AAA*_*AAA 75 database hadoop hive bigdata hiveql
我们想将Hive查询的结果放到CSV文件中.我以为命令看起来应该是这样的:
insert overwrite directory '/home/output.csv' select books from table;
当我运行它时,它表示它已成功完成但我永远找不到该文件.如何找到此文件或者我应该以不同的方式提取数据?
谢谢!
Luk*_*eer 141
尽管可以使用INSERT OVERWRITE从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时有更好的解决方案,但我自己无法测试.新语法应允许以下内容.
INSERT OVERWRITE LOCAL DIRECTORY '/home/lvermeer/temp' 
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY ',' 
select books from table;
希望有所帮助.
小智 21
如果你想要一个CSV文件,那么你可以修改Lukas的解决方案如下(假设你在linux盒子上):
hive -e 'select books from table' | sed 's/[[:space:]]\+/,/g' > /home/lvermeer/temp.csv
小智 5
这是我发现输出 HiveQL 结果的最 csv 友好的方式。
您不需要任何 grep 或 sed 命令来格式化数据,而是 hive 支持它,只需要添加额外的 outputformat 标签。
hive --outputformat=csv2 -e 'select * from <table_name> limit 20' > /path/toStore/data/results.csv
| 归档时间: | 
 | 
| 查看次数: | 183789 次 | 
| 最近记录: |