数仓常用排序详解

news2024/12/28 19:33:54

目录

order by:全局排序

sort by:局部排序

cluster by:簇排序

group by

partition by 


order by:全局排序

order by 会对数据进行一次全局排序,所以说,只要hive的sql中指定了order by,那么所有的数据都会到同一个reducer进行处理(不管有多少map,也不管文件有多少的block只会启动一个reducer)。


order by 只在一个reduce中进行,所以数据量特别大的时候效率非常低。建议在小的数据集中使用order by进行排序
可以通过设置hive.mapred.mode参数控制执行方式:

若选择strict,则order by 需要指定limit(若有分区还有指定哪个分区)
若为nostrict,则limit不是必需的
即使设置了mapreduce.job.reduces的值大于1, 使用order by,时Hive在运行MR程序时也会设置为1覆盖

示例:

在这里插入图片描述

sort by:局部排序

sort by在每个reducer端都会做排序,为每个reduce产生一个排序文件。也就是说sort by能保证局部有序(每个reducer出来的数据是有序的,但是不能保证所有的数据是有序的,除非只有一个reducer)。
使用sort by的好处是:执行了局部排序之后可以为接下去的全局排序提高不少的效率(其实就是做一次归并排序就可以做到全局排序了)。

sort by 的数据在进入reduce前就完成排序。
sort by 基本上不受hive.mapred.mode影响

可以通过mapreduce.job.reduces 指定reduce个数,查询后的数据被分发到相关的reduce中。
如果使用sort by 排序,并且设置mapreduce.job.reduces>1,sort by只能保证每个reducer输出有序,不能保证全局数据有序。

示例:

在这里插入图片描述
示例:

在这里插入图片描述

 在有些情况下,你需要,这通常是为了进行后续的聚集操作。刚好可以做这件事。因此,distribute by经常和sort by配合使用。

distribute by:分区排序
DISTRIBUTE BY是控制map的输出在reducer是如何划分的
DISTRIBUTE BY是控制在map端如何拆分数据给reduce端的。
DISTRIBUTE BY可以控制某个特定行应该到哪个reducer。

distribute by 采集hash算法,在map端将查询结果中hash值相同的结果分发到对应的reduce文件中。
hive会根据distribute by后面列,对应reduce的个数进行分发,默认是采用hash算法。

注意:distribute by必须要写在sort by之前
示例:

我们所有的deptno相同的数据会被送到同一个reducer去处理,这就是因为指定了distribute by deptno,这样的话就可以统计出每个部门中各个员工sal的排序了(这个肯定是全局有序的,因为相同部门的员工会放到同一个reducer去处理)。


cluster by:簇排序

cluster by 除了distribute by 的功能外,还会对该字段进行排序,所以cluster by = distribute by +sort by 。
distribute by 和 sort by 合用就相当于cluster by,但是cluster by 不能指定排序规则为asc或 desc ,只能是升序排列

比如下面两个hql语句是等价的:

insert overwrite local directory '/usr/local/test/tt'
row format delimited fields terminated by '\t'
select * from tb_emp 
distribute by deptno
sort by deptno;
--两者功能等价
insert overwrite local directory '/usr/local/test/tt'
row format delimited fields terminated by '\t'
select * from tb_emp 
cluster by deptno;

示例:

group by

和distribute by类似 都是按key值划分数据,都使用reduce操作
唯一不同的是,distribute by只是单纯的分散数据,distribute by col – 按照col列把数据分散到不同的reduce。

group by把相同key的数据聚集到一起,后续必须是聚合操作。

示例:

在这里插入图片描述


partition by 

通常查询时会对整个数据库查询,而这带来了大量的开销,因此引入了partition的概念,在建表的时候通过设置partition的字段, 会根据该字段对数据分区存放,更具体的说是存放在不同的文件夹,这样通过指定设置Partition的字段条件查询时可以减少大量的开销

示例:查询某一个人的工资并和其所在的部门的平均薪资进行对比。

select ename,sal,deptno,avg(sal) over(partition by deptno)
from tb_emp;

结果:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/50989.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

二、【React拓展】懒加载 lazy

文章目录1、适用点2、汇总1、适用点 懒加载往往配合路由一起使用,此处修改的项目是 二、【React-Router5】路由的基本使用 中的项目 首先从react中引入lazy import { lazy } from react 修改引入路由组件的写法 // import About from ./pages/About // import Home…

[附源码]Python计算机毕业设计Django房屋租赁信息系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

[附源码]Python计算机毕业设计SSM-乐室预约小程序(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

数字化下烟草行业人力资源管理实践与思考

“十四五”期间,高质量发展要求提质增效、科技创新、转型升级、数字化发展;在政府的工作报告中“创新”、“增长”、“机制”这些词不断提及,企业的发展重点也逐渐由高增长变为高质量发展。烟草行业如何对标世界一流管理,促进人力…

人工智能、机器学习概述

一、人工智能简单了解 1.人工智能发展必备三要素: 数据算法计算力 CPU,GPU,TPU计算力之CPU、GPU对比: CPU主要适合I\O密集型的任务 GPU主要适合计算密集型任务 2.人工智能、机器学习和深度学习 人工智能和机器学习,深度学习的关系 机器学…

野火FPGA进阶(2):基于I2C协议的EEPROM驱动控制

文章目录第49讲:基于I2C协议的EEPROM驱动控制理论部分设计与实现i2c_ctrli2c_rw_dataeeprom_byte_rd_wrtb_eeprom_byte_rd_wr第49讲:基于I2C协议的EEPROM驱动控制 理论部分 I2C通讯协议(Inter-Integrated Circuit)是由Philips公…

Flume环境搭建

1、新建一个专门放文件的目录:mkdir /export/server 2、将Flume的安装包上传到/export/server目录并解压,重命名: tar -zxvf apache-flume-1.8.0-bin.tar.gz -C /export/server mv apache-flume-1.8.0-bin flume 3、修改flume-env.sh文件…

[附源码]计算机毕业设计JAVA校园飞毛腿系统

[附源码]计算机毕业设计JAVA校园飞毛腿系统 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis …

第2-4-10章 规则引擎Drools实战(3)-保险产品准入规则

文章目录9.3 保险产品准入规则9.3.1 决策表9.3.2 规则介绍9.3.3 实现步骤9.3 保险产品准入规则 全套代码及资料全部完整提供,点此处下载 9.3.1 决策表 前面我们编写的规则文件都是drl形式的文件,Drools除了支持drl形式的文件外还支持xls格式的文件&am…

天宇优配|钠电池汽车要来了,续航达500公里!持续高成长股揭秘

钠电池行将进入量产元年。 11月29日,在钠离子电池产业链与规范开展论坛上,宁德年代研究院副院长黄起森表明,在乘用车使用方面,钠离子电池遍及可以满意续航400公里以下的车型需求,宁德年代则通过首创的AB电池体系集成技…

内容、文档和流程数字化如何支持精益原则

内容、文档和流程数字化如何支持精益原则 无论您身处哪个行业,想要在业务中取得真正的成功就必须把客户放在所有决策的中心位置,以便您能够给客户提供最佳服务。同时公司以最高效的方式向前发展也很重要。幸运的是,有一种方法可以确保两者兼而…

SpringCloud系列(四)Nacos 的三个有利配置(服务分级存储 / 环境隔离 / 负载均衡策略))

Nacos 的三个有利配置🚗 Nacos 服务分级存储模型🚗 🚗 环境隔离 - namespace🚗 🚗 🚗 NacosRule 负载均衡策略我们都知道在京东商城购买商品,如果选择的是京东自营,那么几乎都是次日…

Springboot毕业设计毕设作品,农产品销售系统设计与实现

功能清单 【后台管理功能模块】 系统设置:设置关于我们、联系我们、加入我们、法律声明的信息。 广告管理:设置网站首页轮播图和链接地址。 留言管理:显示用户通过前台留言的列表,支持删除。 会员中心:显示所有注册用户…

Python图像处理【1】图像与视频处理

图像与视频处理0. 前言1. 在 3D 空间中显示 RGB 图像颜色通道1.1 图像表示1.2 在 3D 空间中绘制颜色通道2. 使用 scikit-video 读/写视频文件2.1 scikit-video 库2.2 读/写视频文件2.3 提取视频文件属性2.4 读取并保存视频3. 使用 OpenCV 从相机捕获实时视频4. 实现 Gotham 图像…

[附源码]计算机毕业设计springboot葡萄酒销售管理系统论文

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Python jupyter notebook Katex|Latex

目录 1.行内公式编辑 2.矩阵公式编辑 3.添加括号 4.添加图片 1.行内公式编辑 $\alpha\beta \gamma$点击control回车; 运行结果: 2.矩阵公式编辑 \begin{matrix} a & b &c \\ d & e & f \\ j & h & i \end{matrix} 点击…

基于随机森林实现特征选择降维及回归预测(Matlab代码实现)

目录 摘要: 1.随机森林: 2.随机森林的特征选取: 3.基于Matlab自带的随机森林函数进行特征选取具体步骤 (1)加载数据 (2)首先建立随机森林并使用全部特征进行车辆经济性预测 (3&#…

Shell脚本学习指南(五)——变量、判断、重复动作

文章目录前言变量与算术变量赋值与环境参数展开展开运算符位置参数特殊变量算术展开退出状态退出状态值if-else-else-fi语句逻辑的NOT、AND与ORtest命令case语句循环for循环while与until循环break与continueshift与选项处理函数前言 变量对于正规程序而言很重要。处理维护有用…

Android: SimpleAdapter+GridView 简单图片展示

1:原理解析: 一个xml放总布局,一个xml放适配器要加载的模板(我喜欢这样理解); java中写适配事件; 2:目录: 3:主布局:最重要的是要放一个GridView …

[附源码]Python计算机毕业设计Django港口集团仓库管理系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…