2016-07-12 24 views
0

我碰到傻情景來到某處,有人創造了一個HIVE查詢,如: -做GROUP BY當底層查詢已擁有唯一的單組

SELECT count(*),year,month from table where year=2016 and month=7 group by year,month; 

這聽起來愚蠢的我。很明顯,因爲我們已經在對行進行過濾,所以只有在group by子句中指定的列的單個組合纔會出現。該查詢等效於以下提到的簡單查詢: -

SELECT count(*),year,month from table where year=2016 and month=7 

很明顯,在GROUP BY沒有必要在這種情況下。現在我的問題是HIVE是否真的試圖在第一個查詢中執行GROUP BY,或者它會理解嘗試執行一個組是否微不足道?如果它嘗試,與第二個版本相比,查詢組的速度會慢嗎?

回答

0

該團隊是需要產生一個組來做點數。 沒有它的組會由於計數錯誤,如果你刪除了計數它將返回大量的記錄2016年7月,而不僅僅是一個

+0

爲什麼它會返回一個錯誤? count(*)是一個聚合函數,它將簡單計算結果集中的行數。由於引用年份和月份以及計數(*),可能會出現此問題,而不是因爲計數(*)本身。因此,在這種情況下,我們可以將查詢修改爲: - 選擇count(*),2016年爲年份,7爲從year = 2016和month = 7的表格中的月份。但是我們不需要清除count(*)。 – Dhiraj

+0

@Dhiraj,但你沒有擺脫非分組字段。 – miraclefoxx

+0

關鍵是我能夠通過查詢而不使用group by來實現與羣組完全相同的輸出。我的反對意見特別針對Topher提出的觀點,即查詢將失敗,因爲count(*)工作需要一個組,並且第二個查詢中沒有組。在第二個查詢中確實存在一個組 - 年份= 2016和月= 7的所有記錄的集合;所以數(*)會對該組起作用。它會由於不同的原因而失敗,不是因爲沒有組 – Dhiraj