参考资料:http://stackoverflow.com/questions/16459790/hive-insert-overwrite-directory-command-output-is-not-separated-by-a-delimiter
问题描述:
Hive insert into directory 命令输出的文件没有指定列分隔符,输出结果就像变成了一个字符串。
通过CREATE EXTERNAL TABLE 和load 方式,尝试了多种分隔符都不能正确的区分,所有的字段内容合起来变成一个字符串放在了第一个字段,而后面的字段全部为NULL。
问题分析:
1. 导出前的Hive表是以' '作为分隔符的,用hadoop fs -cat 看到数据是有分隔符的,如:
001 000 001 000 002 001 003 002 004 003 005 004 006 005 007 006 008 007 099 007
2. 导出语句如下:
insert overwrite directory '/tmp/hdfs_out' select a.* from invites a where a.ds='<date>';
3. 查看导出的文件内容:
hadoop dfs -cat /tmp/hdfs_out/000000_0
001000 001000 002001 003002 004003 005004 006005 007006 008007 099007
解决方法:
引文中的满意答案如下:
Are you sure there is no delimiter in the output directory? By default, Hive uses '1' for the field delimiter, so you should try `hadoop dfs -cat "/tmp/hdfs_out/*" | tr '