beeline的使用方法以及导出csv需要注意的问题

概述

最近需要导出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版权协议,转载请附上原文出处链接和本声明。