在beeline hive中导出为csv

时间:2016-09-19 15:40:26

标签: csv hive beeline

我正在尝试将我的hive表导出为beeline hive中的csv。当我运行命令!sql select * from database1 > /user/bob/output.csv时,它会给我语法错误。

此时我已使用以下命令成功连接到数据库。查询在控制台上输出正确的结果。

beeline -u 'jdbc:hive2://[databaseaddress]' --outputformat=csv

此外,不太清楚文件的最终位置。它应该是hdfs中的文件路径正确吗?

5 个答案:

答案 0 :(得分:22)

当hive版本至少为0.11.0时,您可以执行:

INSERT OVERWRITE LOCAL DIRECTORY '/tmp/directoryWhereToStoreData' 
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY ','  
LINES TERMINATED BY "\n"
SELECT * FROM yourTable;
从hive / beeline

将表存储到本地文件系统上的目录

或者,使用beeline,将SELECT查询保存在SQLFile.sql中并运行:

beeline -u 'jdbc:hive2://[databaseaddress]' --outputformat=csv2 -f yourSQlFile.sql > theFileWhereToStoreTheData.csv 

此外,这会将结果存储到本地文件系统中的文件

从hive,将数据存储到HDFS中:

CREATE EXTERNAL TABLE output 
LIKE yourTable 
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
LOCATION 'hfds://WhereDoYou/Like';

INSERT OVERWRITE TABLE output SELECT * from yourTable;

然后您可以使用以下方法将数据收集到本地文件中

hdfs dfs -getmerge /WhereDoYou/Like

这是另一种仅使用beeline获取数据的选项:

env HADOOP_CLIENT_OPTS="-Ddisable.quoting.for.sv=false" beeline -u "jdbc:hive2://your.hive.server.address:10000/" --incremental=true --outputformat=csv2 -e "select * from youdatabase.yourtable" 

继续工作:

Connected to: Apache Hive (version 1.1.0-cdh5.10.1)
Driver: Hive JDBC (version 1.1.0-cdh5.10.1)
Transaction isolation: TRANSACTION_REPEATABLE_READ
Beeline version 1.1.0-cdh5.10.1 by Apache Hive

答案 1 :(得分:0)

您有不同的选择。

1)您可以控制直线输出的方式,然后将其保存到linux文件中。例如

beeline --outputformat = csv2 xxx> output.csv(参见下面beeline帮助中的相关参数)

2)为了获得更多控制和更好的性能,我曾经写了一个小Java工具。它实际上只有几行jdbc代码。

3)最后Ana写道。 Yopu只需将表格写入HDFS中的外部表格,并指定所需的输出格式。

创建外部表测试ROW FORMAT以'|'结尾的分隔字段位置“/ tmp / myfolder”作为select * from mytable;

然后,您可以使用

在本地文件系统中获取该输出

hadoop fs -getmerge / tmp / myfolder myoutput.csv

答案 2 :(得分:0)

您可以使用此命令以beeline的CSV格式保存输出:

beeline -u 'jdbc:hive2://bigdataplatform-dev.nam.nsroot.net:10000/;principal=hive/bigdataplatform-dev.net@NAMUXDEV.NET;ssl=true' --outputformat=csv2 --verbose=false  --fastConnect=true   --silent=true -f $query_file>out.csv

将您的SQL查询文件保存到$ query_file中。

结果将显示在out.csv中。

我在这里有完整的示例:hivehoney

答案 3 :(得分:0)

以下为我工作

hive --silent=true --verbose=false --outputformat=csv2 -e "use <db_name>; select * from <table_name>" > table_name.csv


使用beeline的一个优势是,如果您在hive节点上运行,则不必提供主机名或用户/密码。

当某些列的字符串值带有逗号时,tsv(制表符分隔)效果更好

hive --silent=true --verbose=false --outputformat=tsv -e "use <db_name>; select * from <table_name>" > table_name.tsv

答案 4 :(得分:0)

CSV格式的输出格式:

$ beeline -u jdbc:hive2://192.168.0.41:10000/test_db -n user1 -p password **--outputformat=csv2** -e "select * from t1";

以自定义分隔符输出的格式:

$ beeline -u jdbc:hive2://192.168.0.41:10000/test_db -n user1 -p password **--outputformat=dsv** **--delimiterForDSV='|'** -e "select * from t1";

在后台运行命令并重定向到文件:

$nohup `$ beeline -u jdbc:hive2://192.168.0.41:10000/test_db -n user1 -p password --outputformat=csv2 -e "select * from t1"; > output.csv 2> log` &

参考网址:

https://dwgeek.com/export-hive-table-into-csv-format-using-beeline-client-example.html/ https://dwgeek.com/hiveserver2-beeline-command-line-shell-options-examples.html/