Hive hql语句 排序【全局排序、按别名排序、多个列排序、局部排序、分区排序】

您所在的位置:网站首页 按分类列排序怎么排 Hive hql语句 排序【全局排序、按别名排序、多个列排序、局部排序、分区排序】

Hive hql语句 排序【全局排序、按别名排序、多个列排序、局部排序、分区排序】

2024-06-08 21:29| 来源: 网络整理| 查看: 265

文章目录 1.全局排序案例实操: 2.按照别名排序案例实操 3.多个列排序案例实操 4.每个MapReduce内部排序(Sort By)局部排序案例操作:(1)设置reduce个数(2)查看reduce个数(3)将查询结果按照成绩降序排列(4)将查询结果导入文件当中 5.分区排序案例实操 6.CLUSTER BY

1.全局排序

Order By :

1.使用order by 子句排序: ASC(ascend):升序(默认)DESC(descend):降序 2.order by 子句在select语句的结尾。 案例实操:

(1)查询学生成绩,并按照分数降序排列。

select * from student s left join score sco on s.s_id = sco.s_id order by sco.s_score DESC;

命令采用左外连接,按分数列降序查询

执行结果如下: 在这里插入图片描述

(2)查询学生成绩,并且按照分数升序排列

select * from student s left join score sco on s.s_id = sco.s_id order by sco.s_score ASC;

命令按照左外连接,按分数列升序查询。

执行结果如下: 在这里插入图片描述 mV0L3NodXl2,size_16,color_FFFFFF,t_70)

2.按照别名排序 案例实操 select s_id ,avg(s_score) avg from score group by s_id order by avg;

执行结果如下: 在这里插入图片描述

3.多个列排序 案例实操 select s_id ,avg(s_score) avg from score group by s_id order by s_id,avg;

上述hql命令,先对s_id进行分组,求平均值,然后进行排序,先是按照s_id进行排序,然后按照平均值avg(别名)进行排序。

结果如下: 在这里插入图片描述

4.每个MapReduce内部排序(Sort By)局部排序

sort by:每个MapReduce内部进行排序,对全局结果集来说不是排序。

案例操作: (1)设置reduce个数 set mapreduce.job.reduces=3; (2)查看reduce个数 set mapreduce.job.reduces; (3)将查询结果按照成绩降序排列 select * from score sort by s_score;

执行结果如下: 在这里插入图片描述 局部排序,三个reduce的结果

(4)将查询结果导入文件当中

按照成绩降序排列

insert overwrite local directory '/usr/Data_train/out_result' select * from score sort by s_score;

执行结果如下:在本地去查看hql语句的查询结果 在这里插入图片描述

5.分区排序

Distribute By:类似于MR中的partation,进行分区,结合sort by使用。

注意事项:

1.Hive要求Distribute By 语句写在 sort by 语句之前。2.对于distracte by进行测试,一定要多分配reduce进行处理,否则无法看到distribute by的效果。 案例实操

首先按照学生id进行分区,然后再按照学生成绩进行排序

(1)设置reduce的个数,将我们对应的s_id划分到对应的reduce当中去。

set mapreduce.job.reduces=7;

(2)通过distribute by进行数据的分区。

insert overwrite local directory '/export/servers/hivedatas/sort' select * from score distribute by s_id sort by s_score;

在这里插入图片描述

6.CLUSTER BY

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

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

例如下面俩种写法等价:

select * from score cluster by s_id; select * from score distribute by s_id sort by s_id;


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3