1. 程式人生 > >hive的中的sql的執行順序。

hive的中的sql的執行順序。

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的執行順序。