我使用此Hive查询将表导出为CSV文件.
INSERT OVERWRITE DIRECTORY '/user/data/output/test' select column1, column2 from table1;
Run Code Online (Sandbox Code Playgroud)
生成的文件'000000_0'没有逗号分隔符
这是生成CSV文件的正确方法吗?如果不是,请告诉我如何生成CSV文件?
小智 62
或使用此
hive -e 'select * from your_Table' | sed 's/[\t]/,/g' > /home/yourfile.csv
Run Code Online (Sandbox Code Playgroud)
您还可以set hive.cli.print.header=true在之前指定属性,SELECT以确保创建标题以及数据并将其复制到文件.例如:
hive -e 'set hive.cli.print.header=true; select * from your_Table' | sed 's/[\t]/,/g' > /home/yourfile.csv
Run Code Online (Sandbox Code Playgroud)
如果您不想写入本地文件系统,请使用该命令将命令输出sed传回管道.HDFShadoop fs -put
小智 49
如果您使用的是Hive 11或更高版本,则可以使用INSERT带有LOCAL关键字的语句.
例:
insert overwrite local directory '/home/carter/staging' row format delimited fields terminated by ',' select * from hugetable;
Run Code Online (Sandbox Code Playgroud)
请注意,这可能会创建多个文件,您可能希望在导出完成后在客户端连接它们.
使用此方法意味着您无需担心源表的格式,可以基于任意SQL查询进行导出,并可以选择自己的分隔符和输出格式.
Use*_*sbs 39
这对你有用
标签分开
hive -e 'select * from some_table' > /home/yourfile.tsvRun Code Online (Sandbox Code Playgroud)逗号分开
hive -e 'select * from some_table' | sed 's/[\t]/,/g' > /home/yourfile.csvRun Code Online (Sandbox Code Playgroud)Bal*_*man 23
生成报告后,您不能为查询输出设置分隔符(就像您一样).
您可以将分隔符更改为逗号.
它带有默认分隔符\001(不可分割的字符).
hadoop fs -cat /user/data/output/test/* |tr "\01" "," >>outputwithcomma.csv
Run Code Online (Sandbox Code Playgroud)
小智 10
INSERT OVERWRITE LOCAL DIRECTORY '/home/lvermeer/temp' ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' select * from table;
Run Code Online (Sandbox Code Playgroud)
是正确的答案.
如果记录数量非常大,则根据生成的文件数量而定
以下命令仅给出部分结果.
hive -e 'select * from some_table' > /home/yourfile.csv
Run Code Online (Sandbox Code Playgroud)
最新版本的hive附带此功能.
INSERT OVERWRITE LOCAL DIRECTORY '/home/lvermeer/temp'
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
select * from table;
Run Code Online (Sandbox Code Playgroud)
这样您就可以选择自己的分隔符和文件名.只要小心" OVERWRITE ",它会尝试删除所提到的文件夹中的所有内容.
| 归档时间: |
|
| 查看次数: |
171326 次 |
| 最近记录: |