join left semi_HIVE--left semi join
實驗:
hive> select * from b1;
OK
1 ? ? ? 003 ? ? 20170511
1 ? ? ? 004 ? ? 20170512
1 ? ? ? 005 ? ? 20170513
2 ? ? ? 006 ? ? 20170514
3 ? ? ? 007 ? ? 20170515
Time taken: 0.041 seconds
hive> select * from b2;
OK
1 ? ? ? 005 ? ? 20170513
2 ? ? ? 006 ? ? 20170514
3 ? ? ? 007 ? ? 20170515
Time taken: 0.049 seconds
hive> select * from b1 a left outer join b2 b on a.id=b2.id; ----左邊表的數據都列出來了,如果右邊表沒有對應的列,則寫成了NULL值。如果左邊的主鍵在右邊找到了N條,那么結果也是會叉乘得到N條。hive不支持’left join’的寫法。
OK
1 ? ? ? 003 ? ? 20170511 ? ? ? ?1 ? ? ? 005 ? ? 20170513
1 ? ? ? 004 ? ? 20170512 ? ? ? ?1 ? ? ? 005 ? ? 20170513
1 ? ? ? 005 ? ? 20170513 ? ? ? ?1 ? ? ? 005 ? ? 20170513
2 ? ? ? 006 ? ? 20170514 ? ? ? ?2 ? ? ? 006 ? ? 20170514
3 ? ? ? 007 ? ? 20170515 ? ? ? ?3 ? ? ? 007 ? ? 20170515
hive>?select * from b1 ?left semi join b2 ?on b1.id=b2.id; ---在關聯字段b2表里有的,b1表都展現出來,如果主鍵在右邊表中存在,則打印,否則過濾掉,相當于in
OK
1 ? ? ? 003 ? ? 20170511
1 ? ? ? 004 ? ? 20170512
1 ? ? ? 005 ? ? 20170513
2 ? ? ? 006 ? ? 20170514
3 ? ? ? 007 ? ? 20170515
hive> select * from b1 left outer join b2 on b1.id=b2.id and b1.dat=b2.dat;
OK
1 ? ? ? 003 ? ? 20170511 ? ? ? ?NULL ? ?NULL ? ?NULL
1 ? ? ? 004 ? ? 20170512 ? ? ? ?NULL ? ?NULL ? ?NULL
1 ? ? ? 005 ? ? 20170513 ? ? ? ?1 ? ? ? 005 ? ? 20170513
2 ? ? ? 006 ? ? 20170514 ? ? ? ?2 ? ? ? 006 ? ? 20170514
3 ? ? ? 007 ? ? 20170515 ? ? ? ?3 ? ? ? 007 ? ? 20170515
hive> select * from b1 left semi join b2 on b1.id=b2.id and b1.dat=b2.dat;---在b2表有的都展現出來
OK
1 ? ? ? 005 ? ? 20170513
2 ? ? ? 006 ? ? 20170514
3 ? ? ? 007 ? ? 20170515
再如:
hive> select * from b1;
OK
1 ? ? ? 003 ? ? 20170511
1 ? ? ? 004 ? ? 20170512
1 ? ? ? 005 ? ? 20170513
2 ? ? ? 006 ? ? 20170514
3 ? ? ? 007 ? ? 20170515
4 ? ? ? 008 ? ? 20170518
Time taken: 0.042 seconds
hive> select * from b2;
OK
1 ? ? ? 005 ? ? 20170513
2 ? ? ? 006 ? ? 20170514
3 ? ? ? 007 ? ? 20170515
Time taken: 0.053 seconds
hive> select * from b1 left outer join b2 on b1.id=b2.id and b1.dat=b2.dat;
OK
1 ? ? ? 003 ? ? 20170511 ? ? ? ?NULL ? ?NULL ? ?NULL
1 ? ? ? 004 ? ? 20170512 ? ? ? ?NULL ? ?NULL ? ?NULL
1 ? ? ? 005 ? ? 20170513 ? ? ? ?1 ? ? ? 005 ? ? 20170513
2 ? ? ? 006 ? ? 20170514 ? ? ? ?2 ? ? ? 006 ? ? 20170514
3 ? ? ? 007 ? ? 20170515 ? ? ? ?3 ? ? ? 007 ? ? 20170515
4 ? ? ? 008 ? ? 20170518 ? ? ? ?NULL ? ?NULL ? ?NULL
hive> select * from b1 left semi join b2 on b1.id=b2.id and b1.dat=b2.dat;---更能證明只展現關聯條件在右表有的數據,相當于in
OK
1 ? ? ? 005 ? ? 20170513
2 ? ? ? 006 ? ? 20170514
3 ? ? ? 007 ? ? 20170515
總結:
hive不支持’left join’的寫法;
hive的left outer join:如果右邊有多行和左邊表對應,就每一行都映射輸出;如果右邊沒有行與左邊行對應,就輸出左邊行,右邊表字段為NULL;
hive的left semi join:相當于SQL的in語句,結果沒有右表數據。
來自 “ ITPUB博客 ” ,鏈接:http://blog.itpub.net/30289795/viewspace-2139756/,如需轉載,請注明出處,否則將追究法律責任。
總結
以上是生活随笔為你收集整理的join left semi_HIVE--left semi join的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华景机器人怎么控制_【华景QQ机器人怎么
- 下一篇: creo减速器建模实例_3.16减速器箱