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