hive中的四種排序方法的使用與區別

2021-10-08 01:55:00 字數 1323 閱讀 8339

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 ...