hive的排序方式的比較

2021-09-07 15:01:31 字數 1568 閱讀 5729

order by :全排序 ,所有的任務分配在乙個reduce上面,將會花費大量的時間,可以保證全域性有序

同時還需要設定下面兩個引數:

hive> set sethive.strict.checks.large.query=false;#大規模查詢的檢查為false

hive> set hive.mapred.mode=nonstrict;#mapreduce的模式為非嚴格

#一部分結果

1 banan1 12 1

3 banan2 14 3

5 banan3 16 5

7 banan4 18 7

9 banan5 20 9

11 banan6 22 11

13 banan7 24 13

hive> select * from order_info order by oid;
sort by :設定reduce個數。只能保證每個reduce的輸出有序,不能保證全域性有序

hive> set mapred.reduce.tasks=3;

hive> select * from order_info sort by oid;

#一部分結果

5 banan3 16 5

7 banan4 18 7

9 banan5 20 9

15 banan8 26 15

19 banan10 30 5

25 banan13 36 11

30 beer2 22 16

32 beer4 24 18

distribute by:一般和sort by聯用,並且放在sort by的前面,如果是根據cid進行分組,那麼一般都是將同乙個客戶的訂單放在乙個reduce裡面

hive> select * from order_info distribute by cid sort by oid desc;

#一部分資料

43 beer15 35 21

40 beer12 32 18

37 beer9 29 15

32 beer4 24 18

29 beer1 21 15

23 banan12 34 9

17 banan9 28 3

15 banan8 26 15

9 banan5 20 9

cluster by:當distribute by 和sort by的字段一致的時候可以用cluster by代替,但是不能用desc 或者asc

Hive的幾種排序方式

記錄hive的幾種常見的排序方式 order by 普通排序,通過order對欄位進行降序或者公升序 select from emp order by sal sort by 對每乙個reduce的結果進行排序,為了看出效果,我們多設定幾個reduce,檢視每個reduce的結果是否是排序的。set...

hive的四種排序比較

hive 的四種排序對比 order by 會對輸入做全域性排序 因此只有乙個reducer 多個reducer無法保證全域性有序 只有乙個reducer,會導致當輸入規模較大時,需要較長的計算時間 在order by 狀態下所有資料會到一台伺服器進行reduce操作也即只有乙個reduce,如果在...

hive中幾個排序方式的區別

order by hive中的order by 和傳統sql中的order by 一樣,對資料做全域性排序,加上排序,會新啟動乙個job進行排序,會把所有資料放到同乙個reduce中進行處理,不管資料多少,不管檔案多少,都啟用乙個reduce進行處理。如果指定了hive.mapred.mode st...