举例子:
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