Hive分隔符

  下面我们一起来研究文件格式。用户应该很熟悉以逗号或者制表符分隔的文本文件,也就是所谓的逗号分隔值(CSV)或者制表符分隔值(TSV)。只要用户需要,Hive是支持这些文件格式的。然而,这两种文件格式有一个共同的缺点,那就是用户需要对文本文件中那些不需要作为分隔符处理的逗号或者制表符格外小心。也因此,Hive默认使用了几个控制字符,这些字符很少出现在字段值中。Hive使用术语field来表示替换默认分隔符的字符。下表列举了Hive中默认的记录和字段分隔符:

分隔符描述
\n对于文本文件来说,每行都是一条记录,因此换行符可以分隔记录
^A(Ctrl+A)用于分隔字段(列)。在CREATE TABLE语句中可以使用八进制编码\001表示
^B用于分隔ARRAY或者STRUCT中的元素,或用于MAP中键-值对之间的分隔。在CREATE TABLE语句中可以使用八进制编码\002表示
^C用于MAP中键和值之间的分隔。在CREATE TABLE语句中可以使用八进制编码\003表示

下面这个表结构声明展示了如何明确地指定分隔符:

CREATE TABLE employees (
    name STRING,
    salary FLOAT,
    subordinates ARRAY<STRING>,
    deductions MAP<STRING, FLOAT>,
    address STRUCT<street:STRING, city:STRING, state:STRING, zip:INT>
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\001'
COLLECTION ITEMS TERMINATED BY '\002'
MAP KEYS TERMINATED BY '\003'
LINES TERMINATED BY '\n'
STORED AS TEXTFILE;

  ROW FORMAT DELIMITED这组关键字必须要写在其他子句(除了STORED AS…)子句之前。

  字符\001是^A的八进制数。ROW FORMAT DELIMITED FIELDS TERMINATED BY '\001’这个子句表明hive将使用^A字符作为列分隔符。

  同样的,字符\002是^B的八进制数。ROW FORMAT DELIMITED COLLECTION ITEMS TERMINATED BY '\002’这个子句表明hive将使用^B字符作为集合元素间的分隔符。

  最后,字符\003是^C的八进制数。ROW FORMAT DELIMITED MAP KEYS TERMINATED BY '\003’这个子句表明hive将使用^C字符作为map的键和值之间的分隔符。

  子句LINES TERMINATED BY '…'和STORED AS …不需要ROW FORMAT DELIMITED关键字。

  事实上,Hive目前为止对于LINES TERMINATED BY…仅支持字符’\n’,也就是说行与行之间的分隔符只能为’\n’。

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值