在直线配置单元中导出为csv

在直线配置单元中导出为csv,csv,hive,beeline,Csv,Hive,Beeline,我正在尝试将我的配置单元表导出为直线配置单元中的csv。当我运行命令时!sql select*from database1>/user/bob/output.csv它给了我语法错误 此时,我已使用以下命令成功连接到数据库。查询在控制台上输出正确的结果 beeline -u 'jdbc:hive2://[databaseaddress]' --outputformat=csv 另外,文件的结尾也不是很清楚。它应该是hdfs中的文件路径是否正确?当配置单元版本至少为0.11.0时,您可以执行: I

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

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

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

另外,文件的结尾也不是很清楚。它应该是hdfs中的文件路径是否正确?

当配置单元版本至少为0.11.0时,您可以执行:

INSERT OVERWRITE LOCAL DIRECTORY '/tmp/directoryWhereToStoreData' 
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY ','  
LINES TERMINATED BY "\n"
SELECT * FROM yourTable;
从配置单元/beeline将表存储到本地文件系统上的目录中


或者,使用beeline,将SELECT查询保存在您的sqlfile.sql中,然后运行:

beeline -u 'jdbc:hive2://[databaseaddress]' --outputformat=csv2 -f yourSQlFile.sql > theFileWhereToStoreTheData.csv 
这也将结果存储到本地文件系统中的文件中


从配置单元,将数据存储到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

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

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\u文件中

结果将显示在out.csv中


我这里有一个完整的例子:

下面的例子对我很有用

hive --silent=true --verbose=false --outputformat=csv2 -e "use <db_name>; select * from <table_name>" > table_name.csv
hive--silent=true--verbose=false--outputformat=csv2-e“使用;从”>table_name.csv中选择*

使用beeline的一个优势是,如果您在配置单元节点上运行,则不必提供主机名或用户/pwd

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

hive --silent=true --verbose=false --outputformat=tsv -e "use <db_name>; select * from <table_name>" > table_name.tsv
hive--silent=true--verbose=false--outputformat=tsv-e“使用;从”>table_name.tsv中选择*
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` &
参考URL:


我注意到一件奇怪的事情,
--outputformat
如果您将它放在带有查询开关的
-e
查询或
-f
文件之后,它将不起作用。奇怪的是,我认为这些是命名参数,但beeline似乎忽略了查询后的任何参数。我一直使用默认的表格格式。请添加版本,因为Hadoop生态系统正在开发中。我正在AWS上使用此版本,如果我运行
beeline--version
它会向我显示Hive 2.3.2-amzn-0,非常感谢。您的CLI声明确实帮助我推进了我的项目!这当然会使字段用逗号分隔,但不能保证它是CSV,对吗?是否可以指定转义字符、引号字符或所有已经处理过的商品,这将保证合法的CSV。