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,或者它會理解嘗試執行一個組是否微不足道?如果它嘗試,與第二個版本相比,查詢組的速度會慢嗎?
爲什麼它會返回一個錯誤? count(*)是一個聚合函數,它將簡單計算結果集中的行數。由於引用年份和月份以及計數(*),可能會出現此問題,而不是因爲計數(*)本身。因此,在這種情況下,我們可以將查詢修改爲: - 選擇count(*),2016年爲年份,7爲從year = 2016和month = 7的表格中的月份。但是我們不需要清除count(*)。 – Dhiraj
@Dhiraj,但你沒有擺脫非分組字段。 – miraclefoxx
關鍵是我能夠通過查詢而不使用group by來實現與羣組完全相同的輸出。我的反對意見特別針對Topher提出的觀點,即查詢將失敗,因爲count(*)工作需要一個組,並且第二個查詢中沒有組。在第二個查詢中確實存在一個組 - 年份= 2016和月= 7的所有記錄的集合;所以數(*)會對該組起作用。它會由於不同的原因而失敗,不是因爲沒有組 – Dhiraj