說明Hive中order by,sort by,distribute by,cluster by的作用
籠統地看,這四個在hive中都有排序和聚集的作用,然而,它們在執行時所啟動的MR卻各不相同。
1、order by
order by會對所給的全部資料進行全域性排序,並且只會“叫醒”一個reducer幹活。它就像一個糊塗蛋一樣,不管來多少資料,都只啟動一個reducer來處理。因此,資料量小還可以,但資料量一旦變大order by就會變得異常吃力,甚至“罷工”。
- order by(ASC | DESC):類似mysql
- 只使用一個Reducer執行全域性資料排序
- 速度慢,應提前做好資料過濾
- 支援使用CASE WHEN或表示式
- 支援按位置編號排序,需要設定:set hive.groupby.orderby.position.alias=true
select * from offers order by case when offerid = 1 then 1 else 0 end;
select * from offers order by 1;
2、sort by
sort by是區域性排序。相比order by的懶惰糊塗,sort by正好相反,它不但非常勤快,而且具備分身功能。sort by會根據資料量的大小啟動一到多個reducer來幹活,並且,它會在進入reduce之前為每個reducer都產生一個排序檔案。這樣的好處是提高了全域性排序的效率。
- SORT BY對每個Reducer中的資料進行排序
- 當Reducer數量設定為1時,等於ORDER BY
- 排序列必須出現在SELECT column列表中
3、distribute by
distribute by的功能是:distribute by 控制map結果的分發,它會將具有相同欄位的map輸出分發到一個reduce節點上做處理。即就是,某種情況下,我們需要控制某個特定行到某個reducer中,這種操作一般是為後續可能發生的聚集操作做準備。這樣肯定是全域性有序的,因為相同的欄位會被放到同一個reducer處理,distribute by需要和sort by一起使用,distribute by必須要寫在sort by之前。
- distribute by :類似mysql的group by
- 確保具有匹配列值的行被分割槽到相同的Reducer
- 不會對每個Reducer的輸出進行排序
- 通常使用在SORT BY語句之前
select id,name,score from stu_score
distribute by id
sort by score desc;
4、cluster by
如果sort by和distribute by中所用的列相同,可以縮寫為cluster by以便同時指定兩者所用的列。
- cluster by :除了具有distribute by 的功能外,還會對該欄位進行排序。
- CLUSTER BY = DISTRIBUTE BY + SORT BY
- 不支援ASC|DESC
- 排序列必須出現在SELECT column列表中
- 為了充分利用所有的Reducer來執行全域性排序,可以先使用CLUSTER BY,然後使用ORDER BY
相關文章
- hive中order by、distribute by、sort by和cluster by的區別和聯絡Hive
- springboot的註解的作用說明(全)Spring Boot
- MySQL Galera cluster叢集常用引數說明MySql
- GBase8a中tableid的位置、作用以及相關說明
- MySQL:關於排序order by limit值不穩定的說明(1)MySql排序MIT
- API介面的要素以及API的作用說明API
- spring中的IOC說明Spring
- Hive的基本操作用法Hive
- DataLakeAnalytics中OSSLOCATION的使用說明
- Keil中的USE MicroLib說明
- 11g RAC叢集下agent的作用和說明
- 說說HTML中的`<html>`標籤有什麼作用?HTML
- display有哪些值?分別說明他們的作用是什麼?
- 一文詳細說明電感的意義和作用 S
- 以opencv為例說明cmake中的findpackage()OpenCVPackage
- makefile中的一些引數說明
- C++中map的使用詳解說明C++
- 什麼是覆蓋?有什麼作用?請舉例說明。
- Oracle 11gR2(11.2.0.4)安裝包(7個)作用說明Oracle
- Linux裡面sort命令的作用是什麼?如何使用?Linux
- 說明
- winscp操作說明,winscp操作說明的詳細解讀
- Sybase的效能說明
- oradebug的使用說明
- JiaoZiVideoPlayer使用說明(持續更新中...)IDE
- 細說 PEP 468: Preserving Keyword Argument Order
- 說說Vue 3.0中Treeshaking特性?舉例說明一下?Vue
- Python中sort()方法的使用Python
- 說說你對作用域鏈的理解
- gRPC之.Net6中的初步使用說明RPC
- Hive(總)看完這篇,別說你不會Hive!Hive
- Hack 說明
- 使用說明
- SQLServer使用case when中的order bySQLServer
- Vue元件中prop屬性使用說明Vue元件
- python中encode和decode函式說明Python函式
- openjdk映象的tag說明JDK
- 史上最全的WebSettings說明Web