2015-06-21 102 views
1

這聽起來很基本,但這個問題困擾了我一段時間。Hive由vs分配而沒有分配

可以說我有以下查詢

SELECT s.ymd, s.symbol, s.price_close FROM stocks s 
SORT BY s.symbol ASC; 

在這種情況下,如果數據對符號列很好的傳播的話很有道理分配基於符號列,使所有減速獲得良好的份額的數據;更改查詢到下面會給一個更好的性能

SELECT s.ymd, s.symbol, s.price_close FROM stocks s 
DISTRIBUTE BY s.symbol 
SORT BY s.symbol ASC, s.ymd ASC; 

是什麼,如果我不指定by子句分配的效果?在第一個查詢中選擇的默認地圖輸出關鍵字列是什麼,即它的分佈列是什麼?

回答

1

我自己找到了答案。通過排序,映射器的輸出鍵不是應用排序依據的列。關鍵可能是記錄的文件偏移量。 reducer的輸出按減速器排序,但同一排序列值可能會出現在多個減速器的輸出中。這意味着減速器的輸出之間有重疊。通過分配來確保數據在基於按列分佈的還原器之間進行拆分,從而確保相同的列值到達同一個還原器,從而確保相同的出文件。