问题描述
问题陈述:-我有一个原始外部表,该表具有表count(1000),方法是将其基础数据复制到某个临时位置,并在创建备份表时指向该临时位置。并且在运行msck修复后,两个表的计数都不匹配?
有什么理由吗?您能否帮助我理解其背后的原因。
解决方法
在这里回答和澄清一些事情,
-
可以直接从Metastore或通过读取基础数据来获取
-
Stats。可以由属性
控制hive.compute.query.using.stats
a。设置为TRUE时,Hive将纯粹使用存储在元存储中的统计信息来回答诸如min,max和count(1)之类的一些查询。
b。设置为FALSE时,Hive将产生一个YARN作业以读取数据并提供计数结果。基于数据量通常很耗时,因为这不是从Hive Metastore中存储的统计信息中直接获取的。
因此,如果我们希望在属性
hive.compute.query.using.stats
设置为TRUE时在结果中返回正确的统计信息,则需要确保表的统计信息已更新。您可以通过在Hive中运行以下命令来检查该值是设置为TRUE还是FALSE,
SET hive.compute.query.using.stats;
-
MSCK REPAIR不执行文件级别检查。它仅查找目录级别的更改,例如,如果您已创建分区表并在HDFS中手动添加了分区目录,并且您希望Hive意识到这一点,则MSCK REPAIR可以满足此目的。