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;
我目前正在使用 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;