hive中的四种排序类型

1、Order by 全局排序

ASC(ascend): 升序(默认)
DESC(descend): 降序

**注意 :**只有一个 Reducer,即使我们在设置set reducer的数量为多个,但是在执行了order by语句之后,当前此次的运算还是只有1个reducer,因为order by要做的是全局分区。(开窗函数内是分区内排序,不在此问题)

验证:

sql 复制代码
set mapreduce.job.reduces=3;
select * from stu_scores order by math;

**总结:**order by 语句的运行效率较低,一般要配合limit 使用。

2、Sort By 在每一个Reduce的job中进行排序

设置reduce 的job数为3

sql 复制代码
set mapreduce.job.reduces=3;

查看设置的reduce 的job数量

sql 复制代码
set mapreduce.job.reduces

测试sort by:

sql 复制代码
select * from stu_scores sort by math;

**备注:**在3个reduce job中分别进行排序。

3、Distribute By 分区(结合 sort by 使用)

有些场景我们需要控制某些特定行应该到同一reducer,做一些聚集操作。

distribute by 类似 MR 中 partition(自定义分区),进行分区,结合 sort by 使用。

设置reduce 的job数为3

sql 复制代码
set mapreduce.job.reduces=3;

查看设置的reduce 的job数量

sql 复制代码
set mapreduce.job.reduces

测试 distribute by....sort by

按照stu_id分区,分区内使用math排序

sql 复制代码
select * from stu_scores distribute by stu_id sort by math;

分区逻辑:根据distribute by 后的字段hash码与reduce 的个数进行模数后,决定分区路由。

4、cluster by

当 distribute by 和 sort by 字段相同时,可以使用 cluster by 方式。但是排序只能是升序排序,不能指定排序规则为 ASC 或者 DESC。

sql 复制代码
select * from stu_scores cluster by math;
select * from stu_scores distribute by math sort by math;

总结: cluster by 等价于distribute by 和 sort by 字段的升序排序。

相关推荐
叮铃铃上课了4 小时前
Hive实战:精准拆分中英文混合字符串(含重音/空格场景)
数据仓库·hive·hadoop
走遍西兰花.jpg8 小时前
hive怎么实现连续登录
数据仓库·hive·hadoop
a努力。10 小时前
中国邮政Java面试被问:MySQL的ICP(索引条件下推)优化原理
java·开发语言·数据仓库·面试·职场和发展·重构·maven
像豆芽一样优秀12 小时前
深入理解与应用SQL递归CTE处理层级数据
大数据·hive·sql
【赫兹威客】浩哥13 小时前
【赫兹威客】伪分布式Hadoop测试教程
大数据·hadoop·分布式
Hello.Reader14 小时前
Flink on Hadoop YARN 从 0 到可上线的 Session / Application 部署指南
大数据·hadoop·flink
B站计算机毕业设计超人14 小时前
计算机毕业设计Python+Django考研院校推荐系统 考研分数线预测系统 大数据毕业设计 (代码+LW文档+PPT+讲解视频)
大数据·人工智能·hive·python·django·毕业设计·课程设计
Gain_chance14 小时前
22-学习笔记尚硅谷数仓搭建-日志表建表语句解析、数据装载及脚本装载数据
数据仓库·笔记·学习
yumgpkpm15 小时前
Cloudera CDP/CDH/Hadoop 信创大模型AI时代何去何从?
人工智能·hive·hadoop·elasticsearch·zookeeper·kafka·cloudera
Gain_chance15 小时前
18-学习笔记尚硅谷数仓搭建-数据仓库运行环境搭建(hive的安装及配置)
数据仓库·hive·笔记·学习