2013-11-01 46 views
1

如果我有兩個查詢從同一個表中查詢數據,但每個組都按不同的列查詢。那麼我應該使用兩個分開的查詢或使用union all函數?我關心的是性能。因爲我有人說union all應該避免,如果沒有必要,否則這是一個很大的開銷。Hive union所有性能

例如,我應該使用UNION ALL進行以下查詢嗎?請指教。謝謝。

INSERT INTO TABLE newtable 
SELECT SUBSTRING(A1, 1, 7) AS col1, COUNT(DISTINCT B) AS col2, C AS col3 
FROM oldtable 
GROUP BY SUBSTRING(A1, 1, 7), C; 

INSERT INTO TABLE newtable 
SELECT A2 AS col1, COUNT(DISTINCT B) AS col2, C AS col3 
FROM oldtable 
GROUP BY A2, C; 

回答

1

假設你有一個UNION ALL,其父母有2個MapReduce作業。 每個MapReduce作業都會將其輸出寫入臨時文件,然後UNION將讀取這些臨時文件並寫入最終存儲。所以你可以看到這是非常浪費的,因爲你最終會讀寫結果兩次!

還有some improvements作爲Hive 0.10的一部分完成,因此如果您運行的是新版本之一,您可以嘗試一下。

+0

謝謝@Charles。你能否給我一些關於「檔案匯」和「父母」在這裏的含義的提示? – Kevin