一、order by
基于整个表的全表扫描,所以只会有一个分区产生,即只有一个reduce任务,
支持升序和降序 asc|desc
二、sort by
可以通过设置reduce的个数,来对reduce任务的内部排序,但是每个分区里面数据通过随机算法分配的,不能人为设置,所以一般都会和distribu by进行联合使用,支持升序降序
设置reduce个数
set mapreduce.job.reduces=i;
set mapreduce.job.reduces //可以查看当前的分配情况
三、 distribute by
distribute by 可以指定的列进行分区,可以说是排序,但也不算,因为distribute by是按照hash来进行的,举例:
select * from test3 distribute by num ;
//将会按照num%reduces 进行分区,hash的结果相同,分区就一致。
select * from test distribute by num sort by sno desc;
//按照降序对sno排序
四、cluster by
cluster by 相当于 distribute by num sort by sno ,进行排序,唯一的确定就是只能按照默认的升序排序,不能进行降序