如何将Hive表导出为CSV文件?

Dun*_*hka 56 csv hive

我使用此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

这对你有用

  • 这将以制表符分隔的形式导出 (2认同)

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)


sun*_*nil 6

最新版本的hive附带此功能.

INSERT OVERWRITE LOCAL DIRECTORY '/home/lvermeer/temp' 
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY ',' 
select * from table;
Run Code Online (Sandbox Code Playgroud)

这样您就可以选择自己的分隔符和文件名.只要小心" OVERWRITE ",它会尝试删除所提到的文件夹中的所有内容.