配置单元计数不匹配的原因

Reason for hive Counts mismatch

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

有什么理由吗。能否请您帮助我了解其背后的原因。

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

  1. 统计信息可以直接从 Metastore 中获取,也可以通过读取底层数据来获取。可以通过属性hive.compute.query.using.stats

    来控制

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

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

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

    您可以通过以下 Hive 运行 检查该值是否设置为 TRUE 或 FALSE,

    SET hive.compute.query.using.stats;

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