hive通過union all 實現 join

2021-10-10 08:17:42 字數 475 閱讀 6315

對於join操作,需要shuffle,在reduce端進行。所以對於資料量超大,比如兩個表記錄條數均在億級別的,往往會導致計算時間過長。(在reduce 關聯時 兩個表的key也是需要通過增加標識區別的)

那如何可以高效的完成呢?也就是如果我們把標識去掉,就是兩個表成為乙個大表,中間會少些耗時的邏輯,那這個樣也就是乙個簡單的groupby了。效果會如何呢?

具體做法:

select 

uid,

coalesce(a,null) as a,

coalesce(b,null) as b

from(

select uid, a,null as  b  from table1 -- uid 唯一

union all

select uid , null as a,b from table2  -- uid 唯一

)t group by uid

效果將會提公升10倍以上。

hive裡面union all的用法記錄

union用於聯合多個select語句的結果集,合併為乙個獨立的結果集,結果集去重。union all也是用於聯合多個select語句的結果集。但是不能消除重複行。現在hive只支援union all。這裡需要特別注意,每個select語句返回的列的數量和名字必須一樣,同時字段型別必須完全匹配,否則...

通過調整表union all的順序優化SQL

原文 通過調整表union all的順序優化sql 作業系統 windows xp 資料庫版本 sql server 2005 今天遇到乙個sql,過濾條件是自動生成的,因此,沒法通過調整sql的謂詞達到優化的目的,只能去找sql中的 大表 有乙個檢視返回的結果集比較大,如果能調整的話,也只能調整該...

通過調整表union all的順序優化SQL

原文 通過調整表union all的順序優化sql 作業系統 windows xp 資料庫版本 sql server 2005 今天遇到乙個sql,過濾條件是自動生成的,因此,沒法通過調整sql的謂詞達到優化的目的,只能去找sql中的 大表 有乙個檢視返回的結果集比較大,如果能調整的話,也只能調整該...