Hive 实现 IN 和 NOT IN 子句

目前hive不支持 in或not in 中包含查询子句的语法,所以只能通过left join实现。

假设有一个用户浏览商品表skim,和一个用户购买商品表buy。如下

skim表

userIditemIdtime
0013422015-05-08
0023822015-05-09
0034582015-05-09
0044682015-05-09

buy表

userIditemIdtime
0013422015-05-07
0023822015-05-08
0034582015-05-09
0053252015-05-09

select * from skim left outer join buy
on skim.userId = buy .userId and skim.itemId = buy .itemId
结果如下:

skim.userIdskim.itemIdskim.timebuy.userIdbuy.itemIdbuy.time
0013422015-05-080013422015-05-08
0023822015-05-090023822015-05-09
0034582015-05-090034582015-05-09
0044682015-05-09

IN

如果要查询在skim表中并且也在buy表中的信息,需要用in查询,hive sql如下:

select skim.userId , skim.itemId from skim left outer join buy
on skim.userId = buy .userId and skim.itemId = buy .itemId where buy .userId is not null;

结果如下:

userIditemId
001342
002382
003458

NOT IN

如果要查询在skim表中并且不也在buy表中的信息,需要用not in查询,hive sql如下:

select skim.userId, skim.itemId from skim left outer join buy
on skim.userId=buy .userId and skim.itemId=buy .itemId where buy .userId is null;

结果如下:

userIditemId
004468
  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值