- order by :全排序 ,所有的任务分配在一个reduce上面,将会花费大量的时间,可以保证全局有序
同时还需要设置下面两个参数:
hive> set sethive.strict.checks.large.query=false;#大规模查询的检查为false
hive> set hive.mapred.mode=nonstrict;#mapreduce的模式为非严格
#一部分结果
1 banan1 12 1
2 apple1 13 2
3 banan2 14 3
4 apple2 15 4
5 banan3 16 5
6 apple3 17 6
7 banan4 18 7
8 apple4 19 8
9 banan5 20 9
10 apple5 21 10
11 banan6 22 11
12 apple6 23 12
13 banan7 24 13
14 apple7 25 14
hive> select * from order_info order by oid;
#花费时间:Time taken: 158.032 seconds, Fetched: 98 row(s)
- sort by :设置reduce个数。只能保证每个reduce的输出有序,不能保证全局有序
hive> set mapred.reduce.tasks=3;
hive> select * from order_info sort by oid;
#花费时间:Time taken: 78.296 seconds, Fetched: 98 row(s)
#一部分结果
5 banan3 16 5
6 apple3 17 6
7 banan4 18 7
8 apple4 19 8
9 banan5 20 9
10 apple5 21 10
15 banan8 26 15
18 apple9 29 4
19 banan10 30 5
22 apple11 33 8
24 apple12 35 10
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
26 apple13 37 12
23 banan12 34 9
20 apple10 31 6
17 banan9 28 3
15 banan8 26 15
12 apple6 23 12
9 banan5 20 9
6 apple3 17 6
- cluster by:当distribute by 和sort by的字段一致的时候可以用cluster by代替,但是不能用desc 或者asc