排序
在执行SQL的时候默认是一个reducetesk
set mapreduce.job.reduces=n; – 配置reduce的个数
set mapreduce.job.reduces; – 查看配置结果
- order by 全局最终结果排序
- distribute by 指定分区字段 分区
- sort by --区内数据排序
- cluster by 当分区字段和排序字段相同 并且是升序的时候使用cluster by 替换 distribute by sort by
先设置reduce个数
set mapreduce.job.reduces=2;
数据
1,a
2,a
3,a
4,b
5,b
6,c
7,c
8,e
建表导入数据
create table tb_x(
id int ,
name string
)
row format delimited fields terminated by ‘,’ ;
load data local inpath ‘/data/x/’ into table tb_x ;
– 数据的导出 到本地的文件夹中
insert overwrite local directory ‘/data/x_res1’
select * from tb_x distribute by name;–此处分区,结果如下
-rw-r--r--. 1 root root 32 Dec 1 11:27 000000_0
[root@linux01 x_res1]# cat 000000_0
8h
7g
6f
5e
4d
3c
2b
1a
–此处输出按分区排序的结果
insert overwrite local directory ‘/data/x_res2’
select * from tb_x distribute by name sort by id desc;
-rw-r--r--. 1 root root 16 Dec 1 11:35 000000_0
-rw-r--r--. 1 root root 16 Dec 1 11:35 000001_0
[root@linux01 x_res2]# cat 000000_0
8h
6f
4d
2b
[root@linux01 x_res2]# cat 000001_0
7g
5e
3c
1a
用cluster by 替代distribute by name sort by name (两个字段必须一样且是升序排列才可替换)
insert overwrite local directory ‘/data/x_res3’
select * from tb_x cluster by name ;–只支持升序的