hive的排序方式的比较

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

你可能感兴趣的:(Hive,hive)