left semi join 和 left join 联系和区别
1、都是左表连接,但是semi join右表关联不左表也不会出来,left join不一样
2、semi join只能查询左表信息,left join可以查询所有
3、semi join是left join的一种优化
4、semi join一般使用查询存在的情况
例子:
数据准备:
1,a
2,b
3,c
4,d
7,y
8,u
2,bb
3,cc
7,yy
9,pp
----------------------------------------
执行:
set hive.exec.mode.local.auto=true;
select
u1.*
from u1 u1
left join u2 u2
on u1.id = u2.id
where u2.id is null
;
----结果
Total MapReduce CPU Time Spent: 0 msec
OK
1 a
4 d
8 u
Time taken: 9.829 seconds, Fetched: 3 row(s)
分析:
联系:
他们都是 hive join 方式的一种,join on 属于 common join(shuffle join/reduce join),而 left semi join 则属于 map join(broadcast join)的一种变体,从名字可以看出他们的实现原理有差异