hive的中的sql的執行順序。
阿新 • • 發佈:2018-08-06
src 一個 輸出結果 bsp pre png 數據 sele 圖片
今天在測試在寫hive sql的時候註意到在進行查詢的時候我們把order by放在後面,前面如果沒有這個字段,則執行報錯。
他就會報下面的錯誤。其實這個時候我們就想著是不是哪裏寫錯了。但是仔細一看。好像並沒有錯誤。
這個時候我們就可能會想是不是因為在hive當中語句的執行順序有問題。於是我在前面select的後面加上order by 之後的字段:
果然是加上之後,執行完全沒有問題。這個時候我們就來總結一下hive語句的執行順序。
在hive的執行語句當中的執行查詢的順序:
這是一條sql:
select … from … where … group by … having … order by …
執行順序:
from … where … select … group by … having … order by …
其實總結hive的執行順序也是總結mapreduce的執行順序:
MR程序的執行順序:
map階段:
1.執行from加載,進行表的查找與加載
2.執行where過濾,進行條件過濾與篩選
3.執行select查詢:進行輸出項的篩選
4.執行group by分組:描述了分組後需要計算的函數
5.map端文件合並:map端本地溢出寫文件的合並操作,每個map最終形成一個臨時文件。 然後按列映射到對應的reduceReduce階段:
Reduce階段:
1.group by:對map端發送過來的數據進行分組並進行計算。
2.select:最後過濾列用於輸出結果
3.limit排序後進行結果輸出到HDFS文件
所以通過上面的例子我們可以看到,在進行selectt之後我們會形成一張表,在這張表當中做分組排序這些操作。
hive的中的sql的執行順序。