Hive-- not in + in的条数不等于总条数

本文记录了一个关于Hive查询的问题,当使用notin操作符时,未明确考虑null值导致查询结果不准确。问题在于Hive的notin在内部隐含了is not null条件。解决方法是将notin查询与is null条件结合使用,以确保得到正确的数据统计。
摘要由CSDN通过智能技术生成

  • 今天帮同事看他的一个bug的时候又遇到这个问题,记录一下(之前自己遇到的时候忘记记录了~)

问题:

  • 某列存在null值,关联表太多且对数据不熟悉,导致了个小bug
  • 查询数据的时候not in + in的条数不等于总条数

复现:

  • step1:准备数据
drop table bi_temp.temp_hzy_20221021;
create table bi_temp.temp_hzy_20221021  as
select 1 as id,'张三' union all
select 2 as id,'李四' union all
select 3 as id,'王五' union all
select null as id,'赵六' union all
select null as id ,'孙七'
;
  • step2:查看数据
    • 总共5条
select * from bi_temp.temp_hzy_20221021;

在这里插入图片描述

  • step3:查看not in数据
    • 一条,id=3,无null的
select * 
from bi_temp.temp_hzy_20221021
where id not in (1,2)
;

在这里插入图片描述

  • step4:查看in数据
    • 两条,id=1和id=2,无null的
select * 
from bi_temp.temp_hzy_20221021
where id not in (1,2)
;

在这里插入图片描述

  • step5:发现问题
    • 可以看到not in + in的条数不等于总条数

原因:

  • hive的where条件中使用的not in 或者in时,隐藏了 is not null 的条件

解决

  • not in条数 + in 条数再加上 is null 就能等于总数
    在这里插入图片描述
  • 也就是说

select * 
from bi_temp.temp_hzy_20221021
where id not in (1,2)
;

等价于


select * 
from bi_temp.temp_hzy_20221021
where id not in (1,2) and id is not null
;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值