我正在尝试将我的hive表导出为beeline hive中的csv。当我运行命令!sql select * from database1 > /user/bob/output.csv
时,它会给我语法错误。
此时我已使用以下命令成功连接到数据库。查询在控制台上输出正确的结果。
beeline -u 'jdbc:hive2://[databaseaddress]' --outputformat=csv
此外,不太清楚文件的最终位置。它应该是hdfs中的文件路径正确吗?
答案 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/