【问题标题】:How to make a Hive query take advantage of statistics stored in Metastore如何使 Hive 查询利用存储在 Metastore 中的统计信息
【发布时间】:2020-01-06 22:03:52
【问题描述】:

我正在使用 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 作业?

【问题讨论】:

    标签: hive


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

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

      如果没有,请先运行analyze table mytable compute statistics 来收集它。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-26
      • 2011-05-15
      • 1970-01-01
      • 2017-01-30
      • 2015-11-10
      • 1970-01-01
      • 2018-09-24
      • 2013-05-31
      相关资源
      最近更新 更多