数据库-如何将HiveQL查询的结果输出到CSV?
我们希望将Hive查询的结果放入CSV文件。 我认为该命令应如下所示:
insert overwrite directory '/home/output.csv' select books from table;
当我运行它时,它表示已成功完成,但我永远找不到该文件。 如何找到该文件,或者应该以其他方式提取数据?
谢谢!
15个解决方案
139 votes
尽管可以使用LOCAL从Hive中获取数据,但是对于您的特定情况,它可能不是最佳方法。 首先让我解释INSERT OVERWRITE的功能,然后再描述从Hive表中获取tsv文件的方法。
根据手册,您的查询会将数据存储在HDFS的目录中。 格式将不是csv。
写入文件系统的数据被序列化为文本,列之间用^ A分隔,行用换行符分隔。 如果任何列都不是原始类型,那么这些列将序列化为JSON格式。
稍作修改(添加LOCAL关键字)会将数据存储在本地目录中。
INSERT OVERWRITE LOCAL DIRECTORY '/home/lvermeer/temp' select books from table;
当我运行类似的查询时,输出结果如下所示。
[lvermeer@hadoop temp]$ ll
total 4
-rwxr-xr-x 1 lvermeer users 811 Aug 9 09:21 000000_0
[lvermeer@hadoop temp]$ head 000000_0
"row1""col1"1234"col3"1234FALSE
"row2""col1"5678"col3"5678TRUE
就个人而言,我通常会在命令行上直接通过Hive运行此类查询,然后将其通过管道传输到本地文件中,如下所示:
hive -e 'select books from table' > /home/lvermeer/temp.tsv
这给了我一个可以用制表符分隔的文件。 希望对您也有帮助。
基于此补丁3682,我怀疑使用Hive 0.11时可以使用更好的解决方案,但我自己无法对此进行测试。 新语