繁体   English   中英

在直线 hive 中导出为 csv

[英]Export as csv in beeline hive

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

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

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

另外,不太清楚文件的最终位置。 应该是hdfs里面的文件路径对吧?

当 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

这是仅使用直线获取数据的另一种选择:

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

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

以下为我工作

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

你有不同的选择。

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

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

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

3)最后安娜写道。 Yopu可以在HDFS中将表写入外部表,并指定所需的输出格式。

喜欢

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

然后,您可以使用本地文件系统获取该输出

hadoop fs -getmerge / tmp / myfolder myoutput.csv

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-例子.html/

从直线

beeline -u 'jdbc:hive2://123.12.4132:345/database_name' --outputformat=csv2 -e "从表名中选择 col1、col2、col3" > /path/to/dump.csv

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM