hive中四種排序的區別

2021-10-03 16:55:06 字數 927 閱讀 7702

hive中有四種排序,分別是:order by,sort by,distribute by(重點),cluster by

order by:全域性排序,但是只能有乙個reduce來處理,在嚴格模式下必須指定limit,否則會報錯,在資料量很大的時候,處理時間會很長甚至跑不出資料,慎用!

sort by:對每個reduce端的結果進行排序,但是不對全域性進行排序,可以設定mapred.reduce.tasks>1的時候,對每個reduce中的資料進行排序

distribute by(重點):distribute by 類似於sql中的group by,它的作用是把distribyte by 後面的列劃分到不同的reduce中去(預設hash),一般搭配sort by使用,例如

select table.a,table.b from table distribute by table.a sort by table.b asc

上述例子的作用是把a列分組,散發到不同的reduce中處理,然後再對每個reduce中的資料將b列進行排序(注意最終的結果只是每個reduce排序,總體不排序)

那麼如何才能做到對整個結果進行排序但是效率更高呢?

我們不妨來這樣做

select * from (select table.a,table.b from table distribute by table.a sort by table.b asc) t order by table.b

這樣做的好處呢,就是可以有多個reduce來處理資料,即便在資料量巨大的時候也不會像只有乙個reduce的時候那麼慢,這也體現了大資料分而治之的思想!

cluster by:cluster by除了具有distribute by的功能外還兼具sort by的功能。但是排序只能是倒敘排序,不能指定排序規則為asc或者desc

以上就是我總結的hive中的排序,加油!

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中4種排序的區別 共有四種排序 order by,sort by distribute by,cluster by order by 全域性排序 對輸入的資料做排序,故此只有乙個reducer 多個reducer無法保證全域性有序 只有乙個reducer,會導致當輸入規模較大時,需要較長的計...