Hive--關聯查詢


一 表結構
1.1 醫生主表


1.2 醫生服務次數表


二 left join查詢
1.1 on后面加and條件
1.1.1 sql語句


1.1.2 查詢結果


1.1.3 執行計划

 


 

1.2 把條件放在where后面
1.2.1 sql語句


1.2.2 查詢結果


 

1.2.3 執行計划
 

 

1.3 子查詢
1.3.1 sql語句


1.3.2 查詢結果


1.3.3 執行計划

 


 

三 總結
1.不考慮where條件下,left join 會把左表所有數據查詢出來,on及其后面的條件僅僅會影響右表的數據(符合就顯示,不符合全部為null)

2.在匹配階段,where子句的條件都不會被使用,僅在匹配階段完成以后,where子句條件才會被使用,它將從匹配階段產生的數據中檢索過濾

3.所以左連接關注的是左邊的主表數據,不應該把on后面的從表中的條件加到where后,這樣會影響原有主表中的數據

4.where后面:是先連接然生成臨時查詢結果,然后再篩選

 on后面:先根據條件過濾篩選,再連接生成臨時查詢結果

5.對於條件在on加個and還是用子查詢,查詢結果是一模一樣的,至於如何使用這個需要分情況,用子查詢的話會多一個maptask,但是如果利用這個子查詢能過濾到很多數據的話,用子查詢還是比較建議的,因為不會加載太多的數據到內存中,如果過濾數據不多的情況下,建議用on后面加and條件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM