hive - 如何使 Hive 查询利用 Metastore 中存储的统计信息

标签 hive

我使用的是 Hive 版本 1.2.1。如果我运行 select count(*) from mytable,我会看到它启动了 Tez 作业。显然它没有使用任何表统计信息,因为理想情况下应该从 Hive Metastore 中存储的表统计信息中获取行数。此外,我还显式检查了 Hive Metastore 中的所有表,但没有在那里找到任何表名称,这表明它存储了表统计信息。我能看到的唯一下一个最相关的表是 TAB_COL_STATS,但该表仅存储列级统计信息,而且它也只有很少的行数,该表有 10 行。这提出了两个问题。

  1. 此版本的 Hive(1.2.1)不支持表统计吗?
  2. 如果这个 Metastore 表(即 TAB_COL_STATS)存储所有内容,为什么像 num_rows 这样的列不属于该表架构的一部分?我看到 max、min、avg、num_distinct 等类型的列。
  3. 当我查询表中的某些统计信息(例如行数)时,我是否必须打开某些选项,以便它利用内部存储的统计信息而不是运行 Tez 作业?

最佳答案

  1. 支持表级统计。
  2. Hive 元存储表高度规范化。您可以在 TABLE_PARAMSPARTITION_PARAMS 中找到有关行数的信息。
  3. 您应该将 hive.compute.query.using.stats 设置为 true 以便为 select count(*) 等查询使用元数据...

    但在此之前,请确保这些统计数据确实存在。

    如果没有,请先运行分析表 mytable 计算统计信息来收集它。

    或者您可以将 hive.stats.autogather 设置为 true 以在将数据插入表时强制收集。

关于hive - 如何使 Hive 查询利用 Metastore 中存储的统计信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59619593/

相关文章:

hadoop - 如何创建从 Hive 表到关系数据库的数据管道

shell - 通过 shell 运行 hive 命令获取错误

hadoop - 连接错误 : <class 'thrift.transport.TTransport.TTransportException' > Could not connect to localhost:21000

java - Hive Driver Connection 线上的 Hadoop 中的 ClassNotFoundException 引起的 NoClassDefFoundError?

hadoop - 从查询中设置配置单元配置变量

java - 结合Hive与Mahout进行推荐

jdbc - hive jdbc 是否支持java.sql.PreparedStatement?

hadoop - 在 Hbase 表之上创建 Hive 表时出错

regex - hive 中的正则表达式

java - Apache HIVE JDBC : How to customize SSL certificate validation?