HIVE中join、semi join、outer join举例详解

举例子:

hive> select * from zz0; 
111111 
222222 
888888 
hive> select * from zz1; 
111111 
333333 
444444 
888888

hive> select * from zz0 join zz1 on zz0.uid = zz1.uid; 
111111  111111 
888888  888888 
hive> select * from zz0 left outer join zz1 on zz0.uid = zz1.uid; 
111111  111111 
222222  NULL 
888888  888888 
hive> select * from zz0 right outer join zz1 on zz0.uid = zz1.uid; 
NULL 
111111  111111 
NULL    333333 
NULL    444444 
888888  888888 
hive> select * from zz0 full outer join zz1 on zz0.uid = zz1.uid; 
NULL 
111111  111111 
222222  NULL 
NULL    333333 
NULL    444444 
888888  888888 
hive> select * from zz0 left semi join zz1 on zz0.uid = zz1.uid; 
111111  
888888 

 

 

所谓的左半连接:  左连接就是展示左边表的东西 半就是展示半拉,就是只展示左表的东西

那么展示左表的那些东西呢? ---> 只展示左表中能根据条件匹配到右表的左表数值,

上面例子中根据 zz0.uid = zz1.uid 那么左表中只有 11111  88888能符合条件在右侧表zz1中找到

因此就只展示左侧表的 11111 88888,

如果在  select 左表字段, 右侧表.字段 left semi join

那么会报错,

这个报错是以前做的案例, Invalid table alias or column reference 'b': (possible column names are: id, name)

就是说只能展示左侧表的字段。

 

细节见:

HIVE中Join的专题---Join详解 http://www.aboutyun.com/thread-7392-1-1.html 

猜你喜欢

转载自chengjianxiaoxue.iteye.com/blog/2227854