6.5 排序

Hive 共有 4 种排序, order by 和普通的关系型数据库一样.

6.5.1 全局排序 order by

order by 排序

asc 升序 desc 降序


按照别名排序

select ename, sal*2 twosal from emp order by twosal;

多列排序

select ename, deptno, sal from emp order by deptno, sal ;

6.5.2 每个 MapReduce 的结果排序sort by

如果有多个 MapReduce 在工作, 则每个 MapReduce 的结果进行排序.

但是从全局来说, 并没有排序.

1.设置reduce个数set mapreduce.job.reduces=3;
2.查看设置reduce个数
set mapreduce.job.reduces;
3.根据部门编号降序查看员工信息
select * from emp sort by empno desc;
4.将查询结果导入到文件中(按照部门编号降序排序)
insert overwrite local directory '/opt/module/datas/sortby-result'
select * from emp sort by deptno desc;

6.5.3 分区排序 distribute by

distribute by:类似MRpartition,进行分区,结合sort by使用。

注意,Hive 要求 DISTRIBUTE BY 语句要写在 SORT BY 语句之前。

对于distribute by进行测试,一定要分配多reduce进行处理,否则无法看到distribute by的效果。

set mapreduce.job.reduces=3;
insert overwrite local directory '/opt/module/datas/distribute-result' select * from emp distribute by deptno sort by empno desc;

distribute by deptno要求从map出来的结果, 先按照 deptno分区, 然后进入到不同的 reduce.

sort by empno desc 每个reduce的结果按照empno的降序排序.

6.5.4 cluster by

distribute bysorts by字段相同时,可以使用cluster by方式。

cluster by除了具有distribute by的功能外还兼具sort by的功能。但是排序只能是升序排序,不能指定排序规则为ASC或者DESC

以下两种写法等价
select * from emp cluster by deptno;
select * from emp distribute by deptno sort by deptno;
Copyright © 尚硅谷大数据 2019 all right reserved,powered by Gitbook
该文件最后修订时间: 2018-11-20 18:14:21

results matching ""

    No results matching ""