直接删除输出中的标题

问题描述 投票:0回答:2

我正在尝试使用beeline cli查询hive表并将输出结果存储为变量。使用beeline命令:

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

再次显示由|分隔的表格格式数据的结果。

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

hadoop hive hadoop2 beeline
2个回答
2
投票

您可以使用参数--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的tab。

当使用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 page。干杯!!


1
投票

直线有一堆command line options.

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

beeline --outputformat=dsv --showheader=false \
-e "select count(*) from db_name.table_name"
© www.soinside.com 2019 - 2024. All rights reserved.