1.Order By:全局排序,只有一個 Reducer;當(dāng)SQL一旦使用order by 進(jìn)行排序,hive翻譯后的 MR只能是一個reduce,不能出現(xiàn)多個reduce,即使將 reduce數(shù)量設(shè)置為多個.為了防止效率比較低,建議在 執(zhí)行order by 時候,一定要帶上limit操作。
2.Sort By:對于大規(guī)模的數(shù)據(jù)集 order by 的效率非常低。在很多情況下,并不需要全局排 序,此時可以使用 sort by。Sort by 為每個 reducer 產(chǎn)生一個排序文件。每個 Reducer 內(nèi)部進(jìn)行排序,對全局結(jié)果集 來說不是排序。如果要使用局部排序,那么前提reduce數(shù)量必須為多個,否則和order by 是一樣的.
3.Distribute By:在有些情況下,我們需要控制某個特定行應(yīng)該到哪個 reducer,通常是為了進(jìn)行后續(xù)的聚集操作。 distribute by 子句可以做這件事。distribute by 類似 MR 中 partition (自定義分區(qū)),進(jìn)行分區(qū),結(jié)合 sort by 使用。 distribute by :當(dāng)有了多個reduce后,相當(dāng)于MR有了多個分區(qū),在分區(qū)的時候,需要那個字段進(jìn)行分區(qū),可以使用distribute by 來設(shè)置,對于 distribute by 進(jìn)行測試,一定要分配多 reduce 進(jìn)行處理,否則無法看到 distribute by 的效果。distribute by 的分區(qū)規(guī)則是根據(jù)分區(qū)字段的 hash 碼與 reduce 的個數(shù)進(jìn)行模除后, 余數(shù)相同的分到一個區(qū),Hive 要求DISTRIBUTE BY 語句要寫在 SORT BY 語句之前。
4.Cluster By:當(dāng) distribute by 和 sort by 字段相同時,可以使用 cluster by 方式。 cluster by 除了具有 distribute by 的功能外還兼具 sort by 的功能。但是排序只能是升序 排序,不能指定排序規(guī)則為 ase或者desc。








暫無數(shù)據(jù)