Hive語句的執行順序

order by的字段一定要使用別名,group by 不能用別名,為什麼?原因涉及Hive-SQL語句執行的順序,其執行順序跟我們代碼寫的順序是不同的。

代碼寫的順序:

select ... from... where.... group by... having... order by...limit

代碼執行的順序:

from... where...group by... having...select... distinct ... order by...limit 

hive基于MapReduce,所以他的執行順序决定了hive語句的執行順序,可以再任意語句前,加上explain查看,簡單說明如下:

Map階段:

  1. 執行from,進行表的查找與加載

  2. 執行where過濾,進行條件過濾與篩選

  3. 執行select査詢:進行輸出項的篩選

  4. 執行group by分組:描述了分組後需要計算的函數

  5. map端檔合併:map端本地溢出寫檔案的合併操作,每個map最終形成一個暫存檔案。

Reduce階段:

  1. group by:對map端發送過來的數據進行分組並進行計算。

  2. select:最後過濾column用於輸出結果

  3. limit排序後進行結果輸出到HDFS

Last updated