概述
最近需要导出hive的数据到clickhouse,但是由于某些原因使用不了datax,只有使用beeline导出数据csv,在写入clickhouse。
Beeline是Hive新的命令行客户端工具,是从 Hive 0.11版本引入的。
参数
--常用
--help ---帮助 beeline --help
--maxWidth=MAXWIDTH ---设置截断数据的最大宽度:beeline --maxWidth=150
-e <query> ---使用一个查询语句:beeline -e "query_string"
-f <file> ---加载一个文件:beeline -f filepath 多个文件用-e file1 -e file2
-n <username> ---加载一个用户名:beeline -n valid_user
-p <password> ---加载一个密码:beeline -p valid_password
-u <database URL> ---加载一个JDBC连接字符串:beeline -u db_URL
--不常用
--autoCommit=[true/false] ---进入一个自动提交模式:beeline --autoCommit=true
--autosave=[true/false] ---进入一个自动保存模式:beeline --autosave=true
--color=[true/false] ---显示用到的颜色:beeline --color=true
--delimiterForDSV= DELIMITER ---分隔值输出格式的分隔符。默认是“|”字符。
--fastConnect=[true/false] ---在连接时,跳过组建表等对象:beeline --fastConnect=false
--force=[true/false] ---是否强制运行脚本:beeline--force=true
--headerInterval=ROWS ---输出的表间隔格式,默认是100: beeline --headerInterval=50
--hiveconf property=value ---设置属性值,以防被hive.conf.restricted.list重置:beeline --hiveconf prop1=value1
--hivevar name=value ---设置变量名:beeline --hivevar var1=value1
--incremental=[true/false] ---输出增量
--isolation=LEVEL ---设置事务隔离级别:beeline --isolation=TRANSACTION_SERIALIZABLE
--maxColumnWidth=MAXCOLWIDTH ---设置字符串列的最大宽度:beeline --maxColumnWidth=25
--nullemptystring=[true/false] ---打印空字符串:beeline --nullemptystring=false
--numberFormat=[pattern] ---数字使用DecimalFormat:beeline --numberFormat="#,###,##0.00"
--outputformat=[table/vertical/csv/tsv/dsv/csv2/tsv2] ---输出格式:beeline --outputformat=tsv
--showHeader=[true/false] ---显示查询结果的列名:beeline --showHeader=false
--showNestedErrs=[true/false] ---显示嵌套错误:beeline --showNestedErrs=true
--showWarnings=[true/false] ---显示警告:beeline --showWarnings=true
--silent=[true/false] ---减少显示的信息量:beeline --silent=true
--truncateTable=[true/false] ---是否在客户端截断表的列
--verbose=[true/false] ---显示详细错误信息和调试信息:beeline --verbose=true
-d <driver class> ---使用一个驱动类:beeline -d driver_class
其中-f和-e是和hive本身的用法一致,-f执行hql文件,-e执行hql命令。
示例
- 连接hive数据库,查询数据并导出为csv
beeline -u “jdbc:hive2://xxx.xxx.x.xxx:10000/database” -n username --silent=true --showHeader=true --outputformat=csv -e “select * from table where dateline=‘2021-03-27’ limit 100” > test.csv - 连接hive数据库,执行test.sql内容
beeline -u “jdbc:hive2://xxx.xxx.x.xxx:10000/database” -n username -f /data/sql/test.sql
注意问题
- –delimiterForDSV参数可以指定输出文件的分隔符,默认为"|",但是delimiterForDSV必须设置–outputformat参数为dsv,不然不会生效。
- hive中空字段导出csv的时候字段值为NULL,如果不能使用NULL的,需要直接使用nvl函数来替换,例如nvl(dateline,’’)。当然使用sed对最后的csv文件替换也是可以的,例如:sed -i ‘s/NULL//g’ test.csv
版权声明:本文为anyitian原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。