我使用这个Hive查询将一个表导出到CSV文件中。
INSERT OVERWRITE DIRECTORY '/user/data/output/test' select column1, column2 from table1;
生成的文件'000000_0'没有逗号分隔符
这是生成CSV文件的正确方式吗?如果不是,请告诉我如何生成CSV文件?
或者使用这个
hive -e 'select * from your_Table' | sed 's/[\t]/,/g' > /home/yourfile.csv
SELECT
之前指定属性set hive.cli.print.header=true
,以确保标题与数据一起创建并复制到文件中。例如:hive -e 'set hive.cli.print.header=true; select * from your_Table' | sed 's/[\t]/,/g' > /home/yourfile.csv
sed
命令的输出管道返回到 HDFS
中,使用 hadoop fs -put
命令。scp
命令通过终端/命令提示符进行连接。INSERT
语句中使用LOCAL
关键字。insert overwrite local directory '/home/carter/staging' row format delimited fields terminated by ',' select * from hugetable;
请注意这可能会创建多个文件,完成导出后您可能希望在客户端上将它们连接起来。
使用这种方法意味着您无需担心源表格的格式,可以基于任意SQL查询进行导出,并且可以选择自己的分隔符和输出格式。
cat file1 file2 > file
在我的本地机器上合并文件。 - Ravi Chandratab separated
hive -e 'select * from some_table' > /home/yourfile.tsv
comma separated
hive -e 'select * from some_table' | sed 's/[\t]/,/g' > /home/yourfile.csv
-hiveconf
起到了作用,否则您将无法运行它。 - Li haonan在生成报表后(就像您所做的那样),您不能为查询输出设置分隔符。
您可以将分隔符更改为逗号。
它带有默认的分隔符\001
(不可见字符)。
hadoop fs -cat /user/data/output/test/* |tr "\01" "," >>outputwithcomma.csv
INSERT OVERWRITE LOCAL DIRECTORY '/home/lvermeer/temp' ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' select * from table;
是正确答案。
如果记录数非常大,根据生成的文件数量,下面的命令将只会给出部分结果。
hive -e 'select * from some_table' > /home/yourfile.csv
用户 user_id 没有查询的权限
? - sAguinagaINSERT OVERWRITE LOCAL DIRECTORY '/home/lvermeer/temp'
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
select * from table;
通过这种方式,您可以选择自己的分隔符和文件名。 只要小心"覆盖",它将尝试从指定的文件夹中删除所有内容。
hive -e "SELECT col1, col2, … FROM table_name" | perl -lpe 's/"/\\"/g; s/^|$/"/g; s/\t/","/g' > output_file.csv
"col1","col2","col3"
...等等#!/bin/bash
hive -e "insert overwrite local directory '/LocalPath/'
row format delimited fields terminated by ','
select * from Mydatabase,Mytable limit 100"
cat /LocalPath/* > /LocalPath/table.csv
因为我有一个非常大的表格,所以我使用limit 100
限制了数据的大小,但是你可以删除它来导出整个表格。
使用Hive仓库目录,您可以导出数据而不是Hive表。 首先,给出Hive仓库路径,然后是本地路径,您想存储.csv文件的位置。 该命令如下:
hadoop fs -cat /user/hdusr/warehouse/HiveDb/tableName/* > /users/hadoop/test/nilesh/sample.csv
这是在Hive的SQL中执行操作的更加简单的方式:
set hive.execution.engine=tez;
set hive.merge.tezfiles=true;
set hive.exec.compress.output=false;
INSERT OVERWRITE DIRECTORY '/tmp/job/'
ROW FORMAT DELIMITED
FIELDS TERMINATED by ','
NULL DEFINED AS ''
STORED AS TEXTFILE
SELECT * from table;