Hive中join, outer join, semi join區別

Hive是基於Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射爲一張數據庫表,並提供簡單的sql查詢功能,可以將sql語句轉換爲MapReduce任務進行運行。


最常用的就是多表關聯查詢,主要講解下join、outer join和semi join的具體使用。


join是最簡單的關聯操作,兩邊關聯只取交集。


outer join分爲left outer join、right outer join和full outer join。

left outer join是以左表驅動,右表不存在的key均賦值爲null;

right outer join是以右表驅動,左表不存在的key均賦值爲null;

full outer join全表關聯,將兩表完整的進行笛卡爾積操作,左右表均可賦值爲null。


semi join最主要的使用場景就是解決exist in。

Hive不支持where子句中的子查詢,SQL常用的exist in子句在Hive中是不支持的。

SELECT a.key, a.value

FROM a

WHERE a.key in (SELECT b.key FROM B);

可以改寫爲:

SELECT a.key, a.value

FROM a LEFT OUTER JOIN b ON (a.key = b.key)

WHERE b.key <> NULL;

一個更高效的實現爲:

SELECT a.key, a.value

FROM a LEFT SEMI JOIN b on (a.key = b.key);


left semi join是0.5.0以上版本的特性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章