先说结论,再举例子。
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