2

我正在尝试直线 cli 查询配置单元表并将输出结果存储为变量。使用直线命令:

beeline -u connection_string -n user_name -w password_file \
-e "select count(*) from db.table_name"

使用此命令,我得到的当前输出结果为:

+---------------+--+ 
| record_count  | 
+---------------+--+ 
| 80785         | 
+---------------+--+

虽然我需要结果为:Record count:80785

我正在使用的另一个命令是:

beeline -u connection_string -n user_name -w password_file \
-e "select * from db.table_name;” > result.csv

这再次以表格格式数据显示结果,以 . 分隔|

基本上直线,默认情况下,返回 header( table_name.column_name),然后是表格格式的数据。然而,我想消除这个并获得像 hive CLI 这样的结果。

4

2 回答 2

6

您可以使用参数--showHeader=false --outputformat=tsv2来说明这一点。

使用这种格式你的命令会像

beeline --showHeader=false --outputformat=tsv2 \
-u connection_string -n user_name -w password_file \
 -e "select count(*) from db.table_name"

考虑如果使用 tsv2

id  value   comment
1   Value1  Test comment 1
2   Value2  Test comment 2
3   Value3  Test comment 3

如果使用了 dsv(分隔符是 |)

id|value|comment
1|Value1|Test comment 1
2|Value2|Test comment 2
3|Value3|Test comment 3

您的数据将如下所示。请记住,如果值中包含特殊字符或换行符,则在值周围使用单引号启用这三个。可以通过将 disable.quoting.for.sv 设置为 true 来禁用引用。

使用 CSV 和 TSV 的更多选项

csv, tsv 这两种格式的区别仅在于值之间的分隔符,csv 是逗号,tsv 是制表符。

使用 csv 时,数据将如下所示

'id','value','comment'
'1','Value1','Test comment 1'
'2','Value2','Test comment 2'
'3','Value3','Test comment 3'

而当使用 tsv 时,则

'id'    'value' 'comment'
'1' 'Value1'    'Test comment 1'
'2' 'Value2'    'Test comment 2'
'3' 'Value3'    'Test comment 3'

请注意,在使用csv 或 tsv时,单引号总是被值包围,并且您无法摆脱它,这在少数情况下可能会导致一些问题。

希望以上详细说明将涵盖您想要涵盖的所有可能情况。

更多解释请访问Apache Beeline Wiki 页面。干杯!!

于 2017-12-27T09:00:01.527 回答
1

Beeline 有很多命令行选项。

在您的情况下,您可以使用:

beeline --outputformat=dsv --showheader=false \
-e "select count(*) from db_name.table_name"
于 2017-12-27T07:13:36.070 回答