首页 > 解决方案 > hive 计数不匹配的原因

问题描述

问题陈述:-通过将其基础数据复制到某个临时位置并在创建指向该临时位置的备份表时,我有一个带有表计数(1000)的原始外部表。运行 msck repair 后,两个表计数不匹配?

有什么理由吗。你能帮我理解它背后的原因吗?

标签: hadoophivehiveqlhadoop2

解决方案


在这里回答和澄清一些事情,

  1. 可以直接从 Metastore 或通过读取底层数据来获取统计信息。它可以由属性控制hive.compute.query.using.stats

    一个。当它设置为 TRUE 时,Hive 将纯粹使用存储在元存储中的统计信息来回答一些查询,例如 min、max 和 count(1)。

    湾。当它设置为 FALSE 时,Hive 将生成一个 YARN 作业来读取数据并提供计数结果。根据数据量,这通常很耗时,因为这不是从存储在 Hive Metastore 中的统计信息中直接获取。

    因此,如果我们希望在属性设置为 TRUE 时在结果中返回正确的统计信息hive.compute.query.using.stats,我们需要确保更新表的统计信息。

    您可以通过在 Hive 中运行以下命令来检查该值是设置为 TRUE 还是 FALSE,

    SET hive.compute.query.using.stats;

  2. MSCK REPAIR 不进行文件级别检查。它只查找目录级别的更改,例如,如果您创建了一个分区表并在 HDFS 中手动添加了一个分区目录,并且如果您希望 Hive 知道它,MSCK REPAIR 将达到目的。


推荐阅读