【问题标题】:Hive, how to get column name when output the query (and not table_name.column_name)Hive,输出查询时如何获取列名(而不是table_name.column_name)
【发布时间】:2016-07-03 09:43:12
【问题描述】:

使用 Hive 我想在 csv 文件中获取查询结果,我还想获取标题。

为了实现这一点,我正在执行:

hive -e '
    use database;
    set hive.cli.print.header=true;
    select * from table;
' > /home/centos/user/result.csv

但是csv的第一行是:

table.field1_name,table.field2_name,table.field3_name

我怎样才能进入:

field1_name,field2_name,field3_name

【问题讨论】:

    标签: csv header hive columnname


    【解决方案1】:

    我只需要添加:

    set hive.resultset.use.unique.column.names=false;
    

    【讨论】:

    • 您可以通过添加解释为什么会起作用来改进您的答案。
    【解决方案2】:

    sed 将完成这项工作。

    假设fun.csv 包含以下内容:

    table.field1_name,table.field2_name,table.field3_name
    

    然后我在命令行中执行以下操作:

    sed -e 's/table.//g' < fun.csv > fun2.csv
    

    现在fun2.csv 有:

    field1_name,field2_name,field3_name
    

    【讨论】:

    • 是的,我知道我可以做到这一点,但我想有一个 hive 选项可用
    • @user3636476 很高兴你找到了解决方案,但我猜一个班轮不会伤害 :)
    【解决方案3】:

    您可以使用 select column1,column2 from tablename 而不是 select * from tablename,在这种情况下 tablename 不会添加到列名中。 在这种情况下不需要给出 sed 命令。

    【讨论】:

      【解决方案4】:

      我用

      hive -e 'set hive.cli.print.header=true; select * from database.table;' | sed 's/[\t]/,/g' > /your_path_to_csv
      

      它对我很有效。

      参考: Hive query output delimiter

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-11
        • 2021-08-29
        • 1970-01-01
        • 2011-10-09
        • 2022-08-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多