order by全局排序
-
只使用一个Reducer执行全局数据排序
-
速度慢,应提前做好数据过滤
-
支持使用CASE WHEN或表达式
-
支持按位置编号排序
select * from offers order by case when offerid = 1 then 1 else 0 end;
select * from offers order by 1;
sort by内部排序
-
对每一个Reduce的结果进行排序,为了看出效果,我们多设置几个Reduce,查看每个Reduce的结果是否是排序的
set mapreduce.job.reduces=3;
-
根据部分编号降序查看员工信息
select * from emp sort by empno desc;
Distribute By分区排序
-
确保具有匹配列值的行被分区到相同的Reducer
-
不会对每个Reducer的输出进行排序
-
Distribute by类似MR中partition(自定义分区),进行分区,结合sort by使用
-
测试时要分配多个reduce进行处理,否则无法看到Distribute by的效果
select
department_id , name, employee_id, evaluation_score
from
employee_hr
distribute by
department_id sort by evaluation_score DESC;
cluster by
-
cluster by = Distribute by + sort by
-
只能默认升序,不能使用倒序(ASC|DESC)
-
排序列必须出现在select column列表中
-
为了充分利用所有的Reducer来执行全局排序,可以先使用cluster by,然后使用order by
select name, employee_id from employee_hr cluster by name;