天天看點

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);

可以改寫為:

from a left outer join b on (a.key = b.key)

where b.key <> null;

一個更高效的實作為:

from a left semi join b on (a.key = b.key);

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

繼續閱讀