hive中 exists與left semi join


hive中 exists的底層實現為left semi join。
驗證:

對比發現執行計划一樣,都是left semi join實現。 且,left semi join前,會對t2表group by;

explain select t1.* from t1 left semi join t2 on t1.id=t2.id;
explain select t1.* from t1 where exists(select 1 from t2 where t1.id=t2.id);
初步結論

所以如果使用exists或left semi join語法,性能一樣。
值得注意的是,t2表重復數據多的場景,應該是一樣的。
如果t2表沒有重復數據,也就不需要group by,此時可以選擇使用join語法代替,當然這個需要抽時間驗證研究一番。


免責聲明!

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



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