HIVE select count(*) non null returns 值高于 select count(*)

HIVE select count(*) non null returns higher value than select count(*)

我目前正在使用 Hive 进行一些数据探索,无法解释以下行为。假设我有一个 table(名为 mytable),其中包含一个字段 master_id.

当我计算行数时,我得到

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 语句如何最终增加行数。有没有人有任何提示来解释这种行为?

谢谢

由于设置了此参数,很可能您的不带 where 的查询正在使用统计信息:

set hive.compute.query.using.stats=true;

尝试设置为false再执行

或者,您可以计算 table 上的统计数据。 参见 ANALYZE TABLE SYNTAX

也可以在 INSERT OVERWRITE 期间自动收集统计数据:

set hive.stats.autogather=true;