先说结论,再举例子。
 
hive中,left join与left outer join等价。
 
left semi join与left outer join的区别:left semi join相当于in,即会过滤掉左表中join不到右表的行,右表中有多行能join到时显示一行,并且只输出左表的字段、不输出右表的字段;left outer join不会过滤掉左表中的行,右表中有多行能join到时显示多行,并且能够同时输出左表和右表中的字段。
 
以下为不同语句的效果比对,环境:Hive 1.1.0。
 
基础表tb1:
select * from tb1;
tb1.k tb1.v
a 2
b 3
 
基础表tb2:
select * from tb2;
tb2.k tb2.v
a 3
a 2
b 2
 
left join:
select * from tb1 left join tb2 on tb1.k=tb2.k;
tb1.k tb1.v tb2.k tb2.v
a 2 a 3
a 2 a 2
b 3 b 2
 
left outer join:
select * from tb1 left outer join tb2 on tb1.k=tb2.k;
tb1.k tb1.v tb2.k tb2.v
a 2 a 3
a 2 a 2
b 3 b 2
 
left semi join:
select * from tb1 left semi join tb2 on tb1.k=tb2.k;
tb1.k tb1.v
a 2
b 3
 

 

版权声明:本文为jackley原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/jackley/p/10782495.html