Hive Join方式與優化

2021-10-13 23:19:53 字數 1165 閱讀 4846

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...