【问题标题】:Remove headers in output in beeline删除直线输出中的标题
【发布时间】:2017-12-27 06:01:28
【问题描述】:

我正在尝试直线 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

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

默认情况下,直线返回标题(table_name.column_name),然后是表格格式的数据。然而,我想消除这种情况并获得类似 hive CLI 的结果。

【问题讨论】:

    标签: hadoop hive hadoop2 beeline


    【解决方案1】:

    您可以使用参数--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 page。干杯!!

    【讨论】:

    • 你能解释一下tsv2 代表什么,以及使用它的好处。
    • 这里的count只是一个例子,我需要可以在所有选择查询中使用的解决方案。
    • @SandeepSingh 我更新了我的答案,你现在可以结帐了。
    • @SandeepSingh tsv 给出 'col1' 'col2' 'col3' ... 而 tsv2 给出 col1 col2 col3 ... (想象我的空格实际上是 TAB 字符!)。 ...所以 tsv2 是大多数开发人员认为的“正确的”制表符分隔值格式。
    【解决方案2】:

    直线有一堆command line options.

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

    beeline --outputformat=dsv --showheader=false \
    -e "select count(*) from db_name.table_name"
    

    【讨论】:

    • 你能解释一下dsv代表和使用它的优点
    • dsv 代表分隔符分隔值,它在您的情况下没有特定优势,除了它会抑制直线打印的带连字符和加号 => @987654325 的类似表格的结构@
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-08
    • 2012-08-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多