order by 是全域性排序,只有乙個reduce(即使設定了多個,也會只走乙個),速度較慢,最好事先完成資料的過濾,支援使用case when 或者表示式,排序的資料是reduce後輸出的資料
原資料:
經過order by排序後的資料 ,可以指定公升序asc 降序desc
sort by 全域性不排序,而是對進入reduce前的每個分割槽中的資料進行排序。如果設定reduce task 的數量為 多個(乙個時等於order by),sort by 只能保證乙個reduce中的輸入資料按照指定的字段排序,使用sort by你可以指定執行的reduce個數(通過set mapred.reduce.tasks=n來指定),對輸出的資料再執行歸併排序,即可得到全部結果。
排序列必須出現在select column列表中
可以看到,設定reduce的個數為2 ,每個reduce中的資料都根據year欄位使用sort by 排序,每個reduce中的資料都是有序的,但是全域性的資料是沒有序的。
首先我們要明白乙個概念,distribute by是用來分組的,不是用來排序的。
即在map端如何拆分資料給reduce端,可以控制相應的行到同乙個reduce中。
hive會根據distribute by後面的欄位名以及reduce的個數進行分發,預設是採用hash演算法。sort by為每個reduce產生乙個排序檔案。distribute by控制某個特定行應該到哪個reducer,這通常是為了進行後續的聚集操作。因此,distribute by經常和sort by配合使用。
使用distribute by後:乙個字段值的某個值一定都在這個reduce中,但乙個reduce中不一定只包含這乙個字段值
語句如下:
結果如下:
cluster by除了具有distribute by的功能外還兼具sort by的功能。但是排序只能是正序排序,不能指定排序規則。
排序列必須出現在select column列表中。
Hive 中的四種排序
1 order by 可以指定desc 降序 asc 公升序 order by會對輸入做全域性排序,因此只有乙個reducer 多個reducer無法保證全域性有序 然而只有乙個reducer,會導致當輸入規模較大時,消耗較長的計算時間。create table temperature year i...
Hive 中的四種排序 舉例
1 order by 可以指定desc 降序 asc 公升序 order by會對輸入做全域性排序,因此只有乙個reducer 多個reducer無法保證全域性有序 然而只有乙個reducer,會導致當輸入規模較大時,消耗較長的計算時間。create table temperature year i...
hive中四種排序的區別
hive中有四種排序,分別是 order by,sort by,distribute by 重點 cluster by order by 全域性排序,但是只能有乙個reduce來處理,在嚴格模式下必須指定limit,否則會報錯,在資料量很大的時候,處理時間會很長甚至跑不出資料,慎用!sort by ...