在Beeline Hive中导出为csv

24

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

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

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

此外,不太清楚文件最终会被保存在哪里。应该是HDFS中的文件路径对吗?

5个回答

40

当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查询保存在yourSQLFile.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

3
我注意到一件奇怪的事情,如果你在 -e 查询或者带查询开关的 -f 文件之后放置 --outputformat 参数,它将不起作用。我原以为这些是命名参数,但似乎 beeline 忽略了查询后面的任何参数。我一直得到默认的表格格式。 - Davos
请添加版本,因为Hadoop生态系统是一个正在进行中的工作。 - ozw1z5rd
我正在AWS上使用它,如果我运行 beeline --version 它会显示 Hive 2.3.2-amzn-0。 - Davos
非常感谢您的帮助。您的CLI语句确实帮助我推进了我的项目! - Unknown Coder
这确实使逗号分隔的字段,但并不能保证它是CSV格式,对吧?是否可以指定转义字符、引号字符或所有这些好东西已经被处理了,从而保证一个合法的CSV呢? - B.Mr.W.
不知道它。我可以使用Python库CSV和其他一些我使用的小工具来读取它。由于我从未在导入此文件方面遇到任何问题,因此我从未感到有必要在答案中设置这么多细节。 - ozw1z5rd

4
你可以使用此命令从 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

以下方法适用于我

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

3

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/

这些链接提供了使用Beeline客户端将Hive表导出为CSV格式以及使用HiveServer2 Beeline命令行选项的示例。

0

来自Beeline

beeline -u 'jdbc:hive2://123.12.4132:345/database_name' --outputformat=csv2 -e "select col1, col2, col3 from table_name" > /path/to/dump.csv


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接