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