HIVE select count(*) 非 null 返回高于 select count(*) 的值
Posted
技术标签:
【中文标题】HIVE select count(*) 非 null 返回高于 select count(*) 的值【英文标题】:HIVE select count(*) non null returns higher value than select count(*) 【发布时间】:2016-10-07 08:27:19 【问题描述】:我目前正在使用 Hive 进行一些数据探索,但无法解释以下行为。假设我有一个带有 master_id 字段的表(名为 mytable)。
当我计算得到的行数时
select count(*) as c from mytable
c
1129563
如果我想计算具有非空 master_id 的行数,我会得到更大的数字
select count(*) as c from mytable where master_id is not null
c
1134041
此外,master_id 似乎永远不会为空。
select count(*) as c from mytable where master_id is null
c
0
我无法解释如何添加 where 语句最终会增加行数。有没有人有任何提示来解释这种行为?
谢谢
【问题讨论】:
该表的架构是什么样的? 提供您的表架构 【参考方案1】:很可能您的查询没有使用统计信息,因为设置了此参数:
set hive.compute.query.using.stats=true;
尝试将其设置为 false 并再次执行。
或者,您可以计算表的统计信息。 见ANALYZE TABLE SYNTAX
还可以在 INSERT OVERWRITE 期间自动收集统计信息:
set hive.stats.autogather=true;
【讨论】:
非常感谢。实际上,如果我将 hive.compute.query.using.stats 设置为 false,则两个计数都匹配。 这是一个值得分析的新东西。很好。以上是关于HIVE select count(*) 非 null 返回高于 select count(*) 的值的主要内容,如果未能解决你的问题,请参考以下文章
Hive:SELECT * 语句有效,但 SELECT COUNT(*) 无效
HIVE-----count(distinct ) over() 无法使用解决办法
Select * 的行计数结果 MISMATCH 和大文件的 Hive 外部表的 Select count(1)
job.split 元信息的 Hive Select Count(*) filenotfoundexception