【问题标题】:Just get column names from hive table只需从配置单元表中获取列名
【发布时间】:2014-11-28 15:50:23
【问题描述】:

我知道您可以通过 hive 中的以下技巧从表中获取列名:

hive> set hive.cli.print.header=true;
hive> select * from tablename;

是否也可以从表中获取列名?

我不喜欢为我只需要一次的东西更改设置。

我目前的解决方案如下:

hive> set hive.cli.print.header=true;
hive> select * from tablename;
hive> set hive.cli.print.header=false;

这似乎过于冗长且违反 DRY 原则。

【问题讨论】:

  • 您的意思是您需要获取列名以及 select * 输出?
  • 为什么不做一个描述表??
  • 哇!在文档中没有找到那个。描述表就可以了。
  • Hive - get column names的可能重复

标签: sql hadoop hive


【解决方案1】:

如果您只是想查看列名,这一行应该提供它而不更改任何设置:

describe database.tablename;

但是,如果这不适用于您的 hive 版本,此代码将提供它,但您的默认数据库现在将是您正在使用的数据库:

use database;
describe tablename;

【讨论】:

  • 我有一个问题:将描述扫描所有​​分区,导致HiveMetastore OOM?我在执行 describe tablename 时遇到了 OOM。
  • 谢谢!,但这也提供了额外的信息,比如关于分区等,如何只过滤列名有什么想法吗?
  • 我如何添加一个值,例如。 '%INVENTORY%' 到上面的代码中检查是否有任何包含库存的列?
  • 只要按照下面的答案,这是更正确的答案。 show columns in $table
  • 我们如何使用 select 语句将所有属性作为 hive 中的列而不是使用 describe 语句
【解决方案2】:

您也可以通过 show columns in $table 或查看 Hive, how do I retrieve all the database's tables columns 访问 hive 元数据

【讨论】:

  • 这应该是对“是否有可能获取列名”问题的公认答案,因为describe 提供了额外信息。
  • 这个答案比较合适。因为它不返回额外的信息。例如,如果您的表有分区,DESCRIBE 命令将返回一些额外的行,包括空行。
  • 这个答案需要从 Hive 3.0 开始编辑!现在show columns in $table 对列名进行排序,当顺序很重要时可能会中断其他代码。
【解决方案3】:

使用 Hive CLI 或 beeline 中的 desc tablename 获取所有列名。如果您想要文件中的列名,请从 shell 运行以下命令。

$ hive -e 'desc dbname.tablename;' > ~/columnnames.txt

其中dbname 是您的表所在的 Hive 数据库的名称 您可以在根目录中找到文件 columnnames.txt。

$cd ~
$ls

【讨论】:

    【解决方案4】:

    解决办法是

    use show columns in table_name;
    

    这个比

    简单
    use describe tablename;
    

    非常感谢。

    【讨论】:

      【解决方案5】:

      最好的方法是设置以下属性:

      set hive.cli.print.header=true;
      set hive.resultset.use.unique.column.names=false;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-01
        • 1970-01-01
        • 2020-04-27
        • 2020-07-27
        相关资源
        最近更新 更多