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 字段的升序排序。

相关推荐
吞下星星的少年·-·15 小时前
Div.3 CF 1131A题(排序,模拟)
算法·模拟·排序
freejackman1 天前
【架构篇】双遍历 + 多栈协同:手撸 SQL 血缘引擎的架构思考
java·大数据·数据库·hive·sql·架构·spark
陈年老古董1 天前
ClickHouse 单机搭建记录
hive·笔记·学习·clickhouse·硬件架构
Gl�ria1 天前
Hadoop 速刷:HDFS / MR / YARN / Spark / Hive
hadoop·hdfs·mr
陈年老古董1 天前
Spark 3.1.3 集群搭建 + Spark-SQL 整合 Hive 记录
hive·sql·spark
FserSuN1 天前
Hive 分区表存储与查询优化学习总结
hive·hadoop·学习
漂流瓶jz2 天前
UVA-1612 猜名次 题解答案代码 算法竞赛入门经典第二版
数据结构·算法·题解·排序·aoapc·算法竞赛入门经典
注塑机数据采集联网2 天前
数据采集网关入门:ZK-D1/D3从零开始构建你的数据运用
大数据·数据仓库·人工智能·物联网·数据库架构·注塑机网关
测试盐2 天前
spark作业日志定位过程
java·hadoop·spark
roman_日积跬步-终至千里2 天前
【数据建模入门】从一家小店看懂数仓与机器学习:先理业务,再串技术
数据仓库·人工智能·机器学习·数据分析·数据建模