order bysql
Hive中的order by跟傳統的sql語言中的order by做用是同樣的,會對查詢的結果作一次全局排序,因此說,全部的數據都會到同一個reducer進行處理(無論有多少map,也無論文件有多少的block只會啓動一個reducer)。可是對於大量數據這將會消耗很長的時間去執行。適用於數據量小的場景spa
sort by排序
Hive中指定了sort by,那麼在每一個reducer端都會作排序,也就是說保證了局部有序(每一個reducer出來的數據是有序的,可是不能保證全部的數據是有序的,除非只有一個reduce),好處是:執行了局部排序以後能夠爲接下去的全局排序提升很多的效率(其實就是作一次歸併排序就能夠作到全局排序了)。效率
distribute by和sort by一塊兒使用select
distribute by是控制map的輸出在reducer是如何劃分的,舉個例子,咱們有一張表,mid是指這個store所屬的商戶,money是這個商戶的盈利,name是這個store的名字map
select midmoneyname store distribute by mid sort by mid ascmoney ascim
咱們全部的mid相同的數據會被送到同一個reducer去處理,每一個reduce按照sort by 字段進行排序,這樣的話就能夠統計出每一個商戶中各個商店盈利的排序了(局部有序)。這裏須要注意的是distribute by必需要寫在sort by以前。適用於數據量比較大的排序場景。統計