Join
原理如下图

注意事项
0.在Hive下,任何join都会存在着发散。所以join后使用group by进行合并!但是Spark中的join不会发散!
1.其中left/right outer join是left/right join的另一种写法
2.从join中select哪一个表的keywords字段的问题,如果自己写程序会发现其实inner join返回两个名字都叫keywords。但是实际上暗含".",因此select中必须加入'.',所以若两者完全相等,其实选哪个都一样。
3.join在指定on时就是innerjoin;不指定on时就是隐式的crossjoin笛卡尔积(a表的一行和b表中每一行都组成一行,然后逐个下去);使用cross join则显式指定笛卡尔连接。
4.技巧使用left/right join来避免笛卡尔积。
5.join中的表若有where条件,就放在on里面。
这是因为如果on和where搞混,就会有问题(如果想对右表进行限制,则一定要在on条件中进行,否则会丢失;所以对左表进行过滤必须用where,否则会冗余)
on条件中进行,否则会丢失;所以对左表进行过滤必须用where,否则会冗余)6.LEFT SEMI JOIN 是 IN/EXISTS 子查询的一种更高效的实现。
常用代码
References
Last updated