beeline 是一个用于连接 HiveServer2 的命令行工具。
一、beeline参数
使用beeline -u可以指定连接的URL。
例如,beeline -u jdbc:hive2://localhost:10000/default 可以连接到本地的HiveServer2服务。
如果需要用户名和密码进行连接,则可以使用 beeline -u jdbc:hive2://localhost:10000/default -n username -p password 的方式进行连接。如果密码不是在-p之后提供的,则 beeline 将在初始化连接时提示输入密码。
-–incremental=[true/false] 从Hive 2.3版本往后默认是true,在它之前是默认为false。
-–showHeader=[true/false] 展示列名是否在查询结果中。默认是true。
-–outputformat=[table/vertical/csv/tsv/dsv/csv2/tsv2] 结果展示的模式。默认是table。dsv可配合delimiterForDSV一起使用,设置分隔符
-–delimiterForDSV= DELIMITER 用于输出格式中划分值的界定符。默认是 '|',如果需要输入特殊符号,如 '\n001' ,'\x01' 等需在前面加$ ,例 --delimiterForDSV=$'\t'
-e 后跟sql语句
-f 后跟sql语句文件,文件里sql语句前面可以设置hive参数
--hiveconf 给Hive的配置属性赋值,--hiveconf 属性 = value
--hivevar 配置变量名称和值,--hivevar 名称 = value,可用于给 sql 文件传值,例如 -hiveconf etl_date=20231129
结果展示格式(在 outputformat 参数中设置)
展示形式主要是将一行值的字段按照不同分割符分开,主要包括五种分割输出格式:csv, tsv, csv2, tsv2, dsv,目前csv和tsv已经被csv2和tsv2替代了。
csv2,tsv2和dsv格式的含义分别是:
csv2使用的是逗号,
tsv2使用的是tab空格,
dsv是可配置的。对于dsv格式,分隔符可以通过用参数 delimiterForDSV 进行设置,默认是 '|'。
二、示例
1、beeline默认的输出格式为table模式,-–showHeader=默认是true
beeline -e 'select * from import_db.table_test' > test1.txt
2、去掉列名,-–showHeader=false
beeline --showHeader=false -e 'select * from import_db.table_test' > test2.txt
3、用逗号分割
beeline --outputformat=csv2 -e 'select * from import_db.table_test' > test3.txt
4、用tab作为值之间的分割符
beeline --outputformat=tsv2 -e 'select * from import_db.table_test' > test4.txt
5、使用dsv默认的分割符,即 '|'
beeline --outputformat=dsv -e 'select * from import_db.table_test' > test5.txt
6、以 '\t' 作为值之间得分割符(–delimiterForDSV=$'\t')
beeline --outputformat=dsv --delimiterForDSV=$'\t' -e 'select * from import_db.table_test' > test6.txt
7、以 '#' 作为值之间得分割符(–delimiterForDSV=$'#')
beeline --outputformat=dsv --delimiterForDSV=$'#' -e 'select * from import_db.table_test' > test7.txt
beeline -u jdbc:hive2://localhost:10000/default --showHeader=true --outputformat=dsv --delimiterForDSV=$'\t' -e 'select * from import_db.test' > test.txt
beeline -u "jdbc:hive2://localhost:10000/default;principal=xxxx" -e "show create table import_db.test"
三、常用日期格式
date +%F #2023-11-30
date +%Y%m #202311
date +%Y%m%d #20231130
date +%Y%m01 #20231101
date +%Y%m%d #20231130
date -d "1 month ago" +%Y%m%d #20231030
date -d "1 month ago" +%Y%m01 #20231001
date -d "last month" +%Y%m%d #20231030
date -d "last month" +%Y%m01 #20231001
date -d "`date -d "last month" +%Y%m01` last day" +%Y%m%d #20230930
# 上月末(月初前一天)
date -d "`date +%Y%m01` last day" +%Y%m%d
date -d "`date +%Y%m01` last day" +%Y%m%d #20231031
date -d "`date +%Y%m01` -1 day" +%Y%m%d #20231031
# 月初后1天
date -d "`date +%Y%m01` 1 day" +%Y%m%d #20231102
cur_date=20231102
echo $cur_date |cut -c 1-6 #202311
date -d `echo $cur_date |cut -c 1-6`"01" +%F #2023-11-01
date -d "$(date -d `echo $cur_date |cut -c 1-6`"01" +%F) -1 day" +%Y%m%d #20231031
date -d "$(date -d `echo $cur_date |cut -c 1-6`"01" +%F) last month" +%Y%m%d #20231001
date -d "$(date -d "$(date -d `echo $cur_date |cut -c 1-6`"01" +%F) last month" +%Y%m%d) -1 day" +%Y%m%d #20230930
#设置变量,获取年月
data_month=$(date +%Y%m)
data_file_${data_month}.dat
或
data_file_$(date +%Y%m).dat
# 跑批常用代码 cur_date=20231102 cur_date2=$(date -d "$(date -d `echo $cur_date |cut -c 1-6`"01" +%F) -1 day" +%Y%m%d) beeline -u "jdbc:hive2://localhost:10000/default;principal=xxxx" -hiveconf cur_date=${cur_date} -hiveconf cur_date2=${cur_date2} -f test.sql
参考链接:
https://blog.csdn.net/sodaloveer/article/details/128617521