2015年7月3日星期五

hive中如何替换默认分隔符\001

Hive建表的时候虽然可以指定字段分隔符,不过用insert overwrite local directory这种方式导出文件时,字段的分割符会被默认置为\001,一般都需要将字段分隔符转换为其它字符,可以使用下面的命令:
     sed -e 's/\x01/|/g' file > file.new
可以将|替换成自己需要的分隔符,file为hive导出的文件。

对于高版本的hive,导出语句直接支持自定义分隔符:

标准语法:
INSERT OVERWRITE [LOCAL] DIRECTORY directory1
[ROW FORMAT row_format] [STORED AS file_format] (Note: Only available starting with Hive 0.11.0)
SELECT ... FROM ...
row_format相关语法:
DELIMITED [FIELDS TERMINATED BY char [ESCAPED BY char]] [COLLECTION ITEMS TERMINATED BY char]
[MAP KEYS TERMINATED BY char] [LINES TERMINATED BY char]
[NULL DEFINED AS char](Note: Only available starting with Hive 0.13)
说明: Directory 可以是一个全路径的 url。 如果指定 LOCAL,则会将数据写到本地文件系统。 输出的数据序列化为 text 格式,分隔符为 ^A,行于行之间通过换行符连接。如果存在不是基本类型的列,则这些列将被序列化为 JSON 格式。 在 Hive 0.11.0 可以输出字段的分隔符,之前版本的默认为 ^A。
例如:
hive> insert overwrite local directory '/home/wyp/Documents/result'
hive> row format delimited 
hive> fields terminated by '\t' 
hive> select * from test;

没有评论:

发表评论