hive支援的join方式有inner join和outer join,這和標準sql一致。除此之外,還支援一種特殊的join:left semi-join。
left semi-join即左半開連線,hive使用左半開連線實現 in / exists 語法,在0.13版本推出in/not in/exists/not exists 語法後,已經不經常使用。
select a.
key, a.val
from a left semi join b on
(a.key
= b.
key)
它的作用是,當a表的key值,存在於(in 、exists)b的key值中時,返回a表的資料。
作用相當於:
select a.
key, a.
value
from a where a.
keyin
(select b.
keyfrom b)
;
hive在執行join時,缺省會將前面的表直接載入到快取,後面一張表進行stream處理,即shuffle操作。這樣可以減少shuffle過程,因為直接載入到快取中的表,只需要等待後面stream過來的表資料,而不需要進行shuffle,相當於整體減少了一次shuffle過程。
所以在sql語句中,大表放在join後面,會有很好的優化效果,或者可以直接標註為streamtable,來指定進行stream的表。
select
/*+ streamtable(a) */ a.val, b.val, c.val from a join b on
(a.key
= b.key1)
join c on
(c.key
= b.key1)
hive在執行join時,可以使用mapjoin,將小表直接載入到map作業中,以減少shuffle開銷。其實效果與stream table一致。都是快取小表資料的一種方式。
select
/*+ mapjoin(b) */ a.
key, a.
value
from a join b on a.
key= b.
key
hive join語句優化
有兩種方法可以啟用它。1.是通過使用乙個注釋,mapjoin 小表 此c樣式注釋應放在select之後,它指示hive將別名 小表 載入到記憶體中。select mapjoin c from orders o join cities c on o.city id c.id 2.另一種開啟mapjoi...
hive join優化點 持續更新
select m.from 大表1 m where m.id in select l.id from 小表2 l 效能非常差,使用left semi join代替select m.from 大表1 m left semi join 小表2 l on m.id l.id limit 10 但是 小表2...
adapter優化方式
adapter優化需要兩步,這是google i o大會推薦的 第一步,復用convertview 復用convertview的目的是為了復用已經用過的view,否則每次都要例項化,占用記憶體資源多,效率太低,在初始顯示時,convertview的值為null,當顯示完整個螢幕,再往下滑的時候,co...