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以上版本的特性。