1. 全局排序(Order By)
只有一个Reducer
如:
emp表按照部门和工资升序排序
select ename, deptno, sal from emp order by deptno, sal ;
2. 每个Reduce内部排序(Sort By)
对于大规模的数据集order by的效率非常低。在并不需要全局排序时,可使用sort by(desc降序 asc升序)。Sort by在每个Reducer内部进行排序,对全局结果集并非有序
。
sort by通常与distribute by结合使用
(distribute by 控制某个特定行到哪个reducer,类似MR中partition分区)
如:
employee表根据部门分区,按照员工编号排序
insert overwrite local directory '/home/hdfs/data/sortby' select * from employee e distribute by e.deptno sort by e.empno
3. Cluster By
当distribute by和sort by字段相同
时,可以使用cluster by方式。
如:
employee表根据部门号分区,按照部门号排序
insert overwrite local directory '/home/hdfs/data/clusterby' select * from emp cluster by deptno;