在beeline hive中导出为csv

Def*_*con 17 csv hive beeline

我试图将我的蜂巢表导出为直线蜂巢中的csv.当我运行该命令时,!sql select * from database1 > /user/bob/output.csv它给我语法错误.

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

beeline -u 'jdbc:hive2://[databaseaddress]' --outputformat=csv
Run Code Online (Sandbox Code Playgroud)

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

ozw*_*5rd 28

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

INSERT OVERWRITE LOCAL DIRECTORY '/tmp/directoryWhereToStoreData' 
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY ','  
LINES TERMINATED BY "\n"
SELECT * FROM yourTable;
Run Code Online (Sandbox Code Playgroud)

从hive/beeline将表存储本地文件系统的目录中.


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

beeline -u 'jdbc:hive2://[databaseaddress]' --outputformat=csv2 -f yourSQlFile.sql > theFileWhereToStoreTheData.csv 
Run Code Online (Sandbox Code Playgroud)

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


从配置单元,将数据存储到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;
Run Code Online (Sandbox Code Playgroud)

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

hdfs dfs -getmerge /WhereDoYou/Like
Run Code Online (Sandbox Code Playgroud)

这是另一种仅使用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" 
Run Code Online (Sandbox Code Playgroud)

工作:

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
Run Code Online (Sandbox Code Playgroud)

  • 我注意到的一件奇怪的事情是,如果将-outputformat放在带有查询开关的-e查询或-f文件之后,它将不起作用。奇怪,我以为这些都是命名参数,但是beeline似乎在查询后会忽略任何参数。我一直在使用默认的表格格式。 (2认同)