配置单元计数不匹配的原因
Reason for hive Counts mismatch
问题陈述:- 我有一个原始的外部 table 和 table count(1000) 通过将其基础数据复制到某个临时位置并在创建时备份 table 指向那个临时位置。在 运行 msck 修复后 table 计数不匹配?
有什么理由吗。能否请您帮助我了解其背后的原因。
在这里回答和澄清一些事情,
统计信息可以直接从 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;
MSCK REPAIR 不进行文件级别检查。它只查找目录级别的更改,例如,如果您创建了一个分区 table 并在 HDFS 中手动添加了一个分区目录,并且如果您希望 Hive 知道它,MSCK REPAIR 将达到目的。
问题陈述:- 我有一个原始的外部 table 和 table count(1000) 通过将其基础数据复制到某个临时位置并在创建时备份 table 指向那个临时位置。在 运行 msck 修复后 table 计数不匹配?
有什么理由吗。能否请您帮助我了解其背后的原因。
在这里回答和澄清一些事情,
统计信息可以直接从 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;
MSCK REPAIR 不进行文件级别检查。它只查找目录级别的更改,例如,如果您创建了一个分区 table 并在 HDFS 中手动添加了一个分区目录,并且如果您希望 Hive 知道它,MSCK REPAIR 将达到目的。