2023.11.14-hive的类SQL表操作之,4个by区别

目录

1.表操作之4个by,分别是

2.Order by:全局排序

3.Cluster by

4.Distribute by :分区

5. Sort by :每个Reduce内部排序

6.操作练习

步骤一.创建表

步骤二.加载数据

 步骤三.验证数据


1.表操作之4个by,分别是

order by 排序字段名 

cluster by 分桶并排序字段名

distribute by字段名sort by字段名 

2.Order by:全局排序

order by排序永远都是全局排序,不受reduces数量影响,每次只用1个reduces

当你使用order by时,默认只走一个reduce,和你设多少个reduce个数无关;

select * from 表名 order by 表内字段名;

缺点:当数据量非常大时,耗时太长,效率低下,适用于数据量较小的场景;
优点:数据全局排序;

 

3.Cluster by

cluster by 字段名:  分桶且正序排序  

弊端: 分桶和排序是同一个字段,相对不灵活

注意: 需要你预先设置reduce个数,结果各个reduce文件内部有序,全局无序;

包含了分桶与排序,但排序默认是升序,无法与SORT BY,ASC或者DESC一起使用

--查询reduces的数量
set mapreduce.job.reduces;  --默认-1个

--修改reduces数量
set mapreduce.job.reduces = ; --修改为所需的数量

select * from 表名 cluster by 表内字段名;

4.Distribute by :分区

distribute by 字段名 sort by 字段名,distribute by负责分,sort by负责排序, 相对比较灵活

控制特定的key到指定的reducer,方便后续的聚集操作,类似MR中partition(自定义分区),一般结合sort by使用;

注意: 需要你预先设置reduce个数,结果各个reduce文件内部有序,全局无序;

1. distribute by的分区规则是根据分区字段的hash码与reduce的个数进行模除后,余数相同的分到一个区。
2. Hive要求distribute by语句要写在sort by语句之前;

--查询reduces的数量
set mapreduce.job.reduces;  --默认-1个

--修改reduces数量
set mapreduce.job.reduces = ; --修改为所需的数量

select * from 表名 distribute by 字段名 sort by 字段名 asc|desc ;

5. Sort by :每个Reduce内部排序

distribute by 字段名 sort by 字段名,distribute by负责分,sort by负责排序, 相对比较灵活

对于大规模的数据集 order by 的效率非常低。在很多情况下,并不需要全局排序,此时可以使用 sort by

Sort by 为每个 reducer 产生一个排序文件。每个 Reducer 内部进行排序,对全局结果集来说不是排序。

适用于数据量较大,但对排序要求不严格的场合,可以大幅度提升执行效率;

注意: 需要你预先设置reduce个数,结果各个reduce文件内部有序,全局无序;

--查询reduces的数量
set mapreduce.job.reduces;  --默认-1个

--修改reduces数量
set mapreduce.job.reduces= ; --修改为所需的数量

select * from 表名 distribute by 字段名 sort by 字段名 asc|desc ;

6.操作练习

现有学生表

2023.11.14-hive的类SQL表操作之,4个by区别_第1张图片

需求:按照性别进行分类,再按照年龄进行降序排序

步骤一.创建表

-- 创建表
create  table stu(
    id int,
    name string,
    gender string,
    age int,
    cls string
)row format delimited fields terminated by ',';

步骤二.加载数据

学生表txt文件

2023.11.14-hive的类SQL表操作之,4个by区别_第2张图片

 

上传文件到hdfs中,并加载到表

load data inpath '/input/students.txt' into table stu;

 步骤三.验证数据

select * from stu;

2023.11.14-hive的类SQL表操作之,4个by区别_第3张图片

进行分桶排序查询

--查询reduces的数量
set mapreduce.job.reduces;  --默认-1个

--修改reduces数量为2
set mapreduce.job.reduces=2; --修改后为2

select * from stu  distribute by gender sort by age desc ;

2023.11.14-hive的类SQL表操作之,4个by区别_第4张图片

你可能感兴趣的:(hive,hadoop,数据仓库,sql,大数据,hdfs,mapreduce)