hive中的四個by

2021-08-02 13:19:27 字數 1485 閱讀 5731

全域性排序,只有乙個reduce

對每乙個reducer內部的資料進行排序,全域性結果集來說不是排序的,即只能保證每乙個reduce輸出的檔案中的資料是按照規定的字段進行排序的

insert overwrite local directory 」 select * from table_name sort by colum_name

注意:這邊需要設定reduces的數量為分割槽的數量,否則不會啟動相應的reducer去進行任務的執行,這最終會導致不能完全分割槽

set mapreduce.job.reduces=;

針對於注意事項,假設我們現在有員工資訊表如下:

empno   ename   sal   deptno

1 jyw 100.0 1

2 lq 30.0 1

3 xzz 10.0 2

4 dzz 100.0 2

5 kk 15.0 3

6 jj 30.0 3

現在我們需要按照deptno進行分割槽,然後按照sal進行排序,假如我們沒有設定rdeucer的數量,那麼有可能我們的集群只會啟動乙個reducer處理這批資料,那麼最後的結果就是這樣的:

3xzz10.02

5kk15.03

6jj30.03

2lq30.01

4dzz100.02

1jyw100.01

解釋:因為只有乙個reducer,那麼在執行mapreduce的分割槽方法的時候:

public class

hashpartitioner

extends

partitioner

to partition. */

public int getpartition(k key, v value,

int numreducetasks)

}

因為numreducetasks為1,所以所有的資料都跑到乙個reduce裡面了,然後在這個reducer裡面按照sal進行了排序,得到的結果就是上面那個樣子了

但是如果我們set mapreduce.job.reduces=3的話,那麼相同的deptno的資料就會到同乙個reducer中,並且那個reducer剛剛好只會有乙個deptno的資料結果如下:

000000_0 

5kk15.03

6jj30.03

000001_0

2lq30.01

1jyw100.01

000002_0

3xzz10.02

4dzz100.02

當distribute by和sort by的字段相同的時候使用cluster by

hive的四個排序方法

order by 是要對輸出的結果進行全域性排序,這就意味著只有乙個reduce task時才能實現 多個reducer無法保證全域性有序 但是當資料量過大的時候,效率就很低,速度會很慢。可以指定公升序asc 降序desc sort by 不是全域性排序,只保證了每個reduce task中資料按照...

hive排序函式四個by的總結

order by 全域性排序 乙個reducer,執行乙個job。total job 1,可以在執行日誌中看到 number of reucers 1.用在select語句的後面。sort by 分區內排序 每個reducer內部進行排序,對全域性結果集來說不是排序。隨機分割槽,防止資料傾斜。設定r...

Hive DML中的四個by

使用 order by字句排序 asc是公升序也是預設的,desc是降序實操案例 查詢員工按照工資降序排列select from emp order by sal desc 按照部門和工資公升序排序select from emp order by deptno,sal select from emp...