博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hive 差集运算
阅读量:5022 次
发布时间:2019-06-12

本文共 1376 字,大约阅读时间需要 4 分钟。

差集定义:一般地,设A,B是两个集合,由所有属于A且不属于B的元素组成的集合,叫做集合A减集合B(或集合A与集合B之差)。

                   类似地,对于集合A,B,我们把集合{x/x∈A,且x¢B}叫做A与B的差集,记作A-B记作A-B(或A\B);

                   即A-B={x|x∈A,且x ¢B}(或A\B={x|x∈A,且x ¢B} B-A={x/x∈B且x¢A} 叫做B与A的差集。

 

比如说有这么两个表:

hive> select * from A;OK1	21	32	12	33	1Time taken: 0.3 seconds, Fetched: 5 row(s)hive> select * from B;OK1	21	42	22	3Time taken: 0.086 seconds, Fetched: 4 row(s)

  

要取出A与B的差集(A-B):

1	32	13	1

  

Hive可不可以用not in?可以,但只能用于单个字段。select * from A where (uid,goods) not in (select uid,goods from B);这个oracle是支持的,但hive不行。

hive> select * from A  where uid not in (select uid from B);3	1Time taken: 46.09 seconds, Fetched: 1 row(s)

  

Hive可不可以用not exists?显然也可以! 

hive> select * from A  where not exists (select * from B where A.uid=B.uid and A.goods=B.goods);1	32	13	1Time taken: 12.989 seconds, Fetched: 3 row(s)

  

不过前两种貌似很费资源,在ODPS里都有限制,下面来介绍一下hive常用的求差集方法,左(右)连接 left outer join

 

先看一下左连接之后表是什么样的

hive> select * from A a left outer join B b on a.uid=b.uid and a.goods=b.goods;1	2	1	21	3	NULL	NULL2	1	NULL	NULL2	3	2	33	1	NULL	NULLTime taken: 12.735 seconds, Fetched: 5 row(s)

  

现在只要取出B的uid和goods为null的行就可以了

 

hive> select a.* from A a left outer join B b on a.uid=b.uid and a.goods=b.goods where b.uid is null and b.goods is null;1	32	13	1Time taken: 13.023 seconds, Fetched: 3 row(s)

  

转自:https://blog.csdn.net/Dr_Guo/article/details/51182626

 

转载于:https://www.cnblogs.com/Allen-rg/p/9285081.html

你可能感兴趣的文章
extern static关键字
查看>>
WPF和Silverlight程序中DispatcherTimer与Timer的区别
查看>>
AE开发实现Spatial Join Analysis
查看>>
RedHat 7 安装postgresql 9.2
查看>>
CCNUOJ 1027 教你前缀
查看>>
actionbar、toolbar、menu之间的关系
查看>>
QQ网页交谈
查看>>
JavaScript:学习笔记(8)——对象扩展运算符
查看>>
笔试题 相对位置不变的正负数排序
查看>>
第一天
查看>>
mappingResource属性和mappingDirectoryLocations属性的使用
查看>>
NSString常用的技巧
查看>>
网络编程与并发编程相关网址链接
查看>>
通过python理解闭包
查看>>
linux面试题及答案
查看>>
MongoDB命令行操作
查看>>
Android平台一些流行的使用3D技术开发的锁屏
查看>>
近期的一点感慨
查看>>
用Html5结合Qt制作一款本地化EXE游戏-太空大战(Space War)
查看>>
python操作Oracle
查看>>