beeline数据导出参数格式

  • 参考语句
beeline -u jdbc:hive2://host:10000 --incremental=true --showHeader=false --outputformat=dsv --delimiterForDSV=$'\t' -e 'select * from test' > ./file.txt
  • 参数说明
参数说明
–incremental=[true/false]从Hive 2.3版本往后默认是true,在它之前是默认为false。当设置为false时,为了最佳的展示列宽,完整的结果集会在展示之前被收集然后缓存起来。当设置为true时,结果集一旦被抓取到就会立即展示, 为了在展示列的填充额外消耗更少的延迟和内存。当你在客户端遭遇一个内存溢出时,推荐设置–incremental=true (因为抓取到的结果集非常大)。
–showHeader=[true/false]展示列名是否在查询结果中。默认是true。用例: beeline --showHeader=false
–outputformat=[table/vertical/csv/tsv/dsv/csv2/tsv2]结果展示的模式。默认是table。dsv可配合delimiterForDSV一起使用,设置分隔符
–delimiterForDSV= DELIMITER用于输出格式中划分值的界定符。默认是‘|’,如果需要输入特殊符号,如‘\n001’ ,‘\x01’等需在前面加$ ,例 --delimiterForDSV=$’\t’
-e 导出sql
  • 结果展示格式(在outputformat参数中设置)

展示形式主要是将一行值的字段按照不同分割符分开,主要包括五种分割输出格式:csv, tsv, csv2, tsv2, dsv,目前csv和tsv已经被csv2和tsv2替代了。
dsv,csv2和tsv2格式的含义分别是:
csv2使用的是逗号,
tsv2使用的是tab空格,
dsv是可配置的。对于dsv格式,分隔符可以通过用参数 delimiterForDSV 进行设置,默认是 ‘|’。


举例说明

  • 方式一:未设置showHeader、outputformat和delimiterForDSV参数的值,说明使用的是Beeline默认的输出格式,从outputformat说明中得知Beeline默认的输出各式为table模式,所以接下来就需要弄清楚table模式下字段分隔符是否为“|”,并且列名是否在查询结果中。–showHeader=默认是true。

语句

beeline -e "select * from table_test > ./test.txt"

展示结果如下

+------------+--------------+------------------+----------+-------------+----------------+--------------+
| area_code  |   acc_nbr    |     serv_id      | prod_id  |  time_tag   |   model_type   | rule_result  |
+------------+--------------+------------------+----------+-------------+----------------+--------------+
| 777        | 18028137123  | 120000485555514  | 3102     | 2023010914  |     507		 | 10001        |
+------------+--------------+------------------+----------+-------------+----------------+--------------+
  • 方式二:去掉列名,–showHeader=false

语句

beeline --showHeader=false -e "select * from table_test > ./test.txt"

展示结果如下

| 777        | 18028137123  | 120000485555514  | 3102     | 2023010914  |     507		 | 10001        |
  • 方式三:如果值之间用逗号分割,可以在beeline执行语句中加入–outputformat=csv2;如果值之间用tab分割,可以在beeline执行语句中加入–outputformat=tsv2。如果方式的分割符不满足需求,想通过其他分割符来分割beeline的执行结果值,可以在beeline执行语句中加入–outputformat=dsv2和–delimiterForDSV=其他分割符号。

1)用逗号分割

语句

beeline --outputformat=csv2 -e "$tj_sql"  > ./test_3.txt

展示结果如下

area_code,acc_nbr,serv_id,prod_id,time_tag,model_type,rule_result
777,18028137123,120000485555514,3102,2023010914,507,10001

2)用tab作为值之间的分割符

语句

beeline --outputformat=tsv2 -e "$tj_sql"  > ./test_3.txt

展示结果如下

area_code       acc_nbr serv_id prod_id time_tag        model_type      rule_result
777     18028137123     120000485555514 3102    2023010914      507 10001

3)其他分割符,将beeline的输出格式设置(–outputformat=dsv)为dsv,使用dsv默认的分割符,即‘|’。

语句

beeline --outputformat=dsv -e "$tj_sql"  > ./test_3.txt

展示结果如下

area_code|acc_nbr|serv_id|prod_id|time_tag|model_type|rule_result
777|18028137123|120000485555514|3102|2023010914|507|10001

4)其他分割符,将beeline的输出格式设置为dsv(–outputformat=dsv),并以“\t”作为值之间得分割符(–delimiterForDSV=$‘\t’)。

语句

beeline --outputformat=dsv --delimiterForDSV=$'\t' -e "$tj_sql"  > ./test_3.txt

展示结果如下

area_code       acc_nbr serv_id prod_id time_tag        model_type      rule_result
777     18028137123     120000485555514 3102    2023010914      507 10001

5)其他分割符,将beeline的输出格式设置为dsv(–outputformat=dsv),并以“#”作为值之间得分割符(–delimiterForDSV=$‘#’)。

语句

beeline --outputformat=dsv --delimiterForDSV=$'#' -e "$tj_sql"  > ./test_3.txt

展示结果如下

area_code#acc_nbr#serv_id#prod_id#time_tag#model_type#rule_result
777#18028137123#120000485555514#3102#2023010914#507#10001
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐