hive聚合函数之排序
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
1 全局排序Order By
Order By全局排序只有一个Reduce。
(1.使用Order By子句排序
ascascend升序默认
descdescend降序
(2.Order By子句在select语句的结尾
基础案例实操
1查询员工信息按工资升序排列
select
*
from emp
order by sal;
2查询员工信息按工资降序排列
select
*
from emp
order by sal desc;
(3按照员工薪水的2倍排序
select
ename,
sal * 2 twosal
from emp
order by twosal;
(4) 多个列排序案例实操
按照部门和工资升序排序。
select
ename,
deptno,
sal
from emp
order by deptno, sal;
2 每个Reduce内部排序Sort By
Sort By对于大规模的数据集order by的效率非常低。在很多情况下并不需要全局排序此时可以使用Sort by。
Sort by为每个reduce产生一个排序文件。每个Reduce内部进行排序对全局结果集来说不是排序。
(1设置reduce个数
set mapreduce.job.reduces=3;
(2查看设置reduce个数
set mapreduce.job.reduces;
(3根据部门编号降序查看员工信息
select
*
from emp
sort by deptno desc;
通过两次sort by 排序比一次order by排序执行效率高
3 分区Distribute By
Distribute By在有些情况下我们需要控制某个特定行应该到哪个Reducer通常是为了进行后续的聚集操作。distribute by子句可以做这件事。distribute by类似MapReduce中partition自定义分区进行分区结合sort by使用。
对于distribute by进行测试一定要分配多reduce进行处理否则无法看到distribute by的效果。
案例实操
(1设置reduce个数
set mapreduce.job.reduces=3;
(2查看设置reduce个数
set mapreduce.job.reduces;
(3) 先按照部门编号分区再按照员工编号薪资排序
select
*
from emp
distribute by deptno
sort by sal desc;
distribute by的分区规则是根据分区字段的hash码与reduce的个数进行相除后余数相同的分到一个区。
Hive要求distribute by语句要写在sort by语句之前。
演示完以后mapreduce.job.reduces的值要设置回-1否则下面分区or分桶表load跑MapReduce的时候会报错。
4 分区排序Cluster By
当distribute by和sort 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;
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |