對於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中的 大表 有乙個檢視返回的結果集比較大,如果能調整的話,也只能調整該...