通俗易懂理解Hive四种排序

news2024/11/15 17:23:08

前言

Hive的四种排序包括Sort By、Order By、Distribute By和Cluster By。有关这四种排序的区别,在大数据面试中可能会经常被问到,在我们很多人的实际应用中可能最常用的就是全局排序order by,因此对于其他几个排序理解并不准确,接下来我用简单的案例尽量描述清楚。

数据准备

  1. Hive表

    create table scores (
    name string,
    class string,
    score int
    );
    
  2. 插入数据

    insert into scores values('Lily','1',72),('Mark','2',77),('Lucy','1',83),('Wade','2',92),
    ('Jack','1',91),('James','2',84),('Kobe','2',94),('Jay','1',85);
    
  3. 查询数据

    select * from scores;
    

    在这里插入图片描述

ORDER BY

ORDER BY 会对全局数据进行排序,这意味着Hive会启动一个单独的reducer来接收所有mapper的输出,并在这个reducer中进行排序。这种方式在数据量很大时效率很低,因为所有数据都需要通过网络传输到一个reducer。

  • 需求
    查询按照分数从高到低排序整个表的数据。

  • SQL

    SELECT name,
           CLASS,
           score
    FROM scores
    ORDER BY score DESC;
    
  • 结果
    在这里插入图片描述

SORT BY

SORT BY 是在每个reducer内部进行排序的。这意味着如果你使用SORT BY而没有DISTRIBUTE BY(或CLUSTER BY,它包含了DISTRIBUTE BY),Hive可能会随机地将数据分发到不同的reducer,每个reducer内部的数据会按照SORT BY指定的列进行排序。但不同的reducer之间的数据顺序是不确定的。

  • 需求
    每个班级内部的学生按照分数排序,但不需要全局排序。
  • SQL(需要配合DISTRIBUTE BY使用以控制分发)
    SELECT name,
           CLASS,
           score
    FROM scores DISTRIBUTE BY CLASS
    SORT BY score DESC;
    
  • 结果
    在这里插入图片描述

DISTRIBUTE BY

distribute by是控制在map端如何拆分数据给reduce端的。类似于MapReduce中分区partationer对数据进行分区hive会根据distribute by后面列,将数据分发给对应的reducer,默认是采用hash算法+取余数的方式。
sort by为每个reduce产生一个排序文件,在有些情况下,你需要控制某写特定的行应该到哪个reducer,这通常是为了进行后续的聚集操作。distribute by刚好可以做这件事。因此,distribute by经常和sort by配合使用。

CLUSTER BY

cluster by除了具有distribute by的功能外还兼具sort by的功能。但是排序只能是升序排序,不能指定排序规则为ASC或者DESC。
当分区字段和排序字段相同cluster by可以简化distribute by+sort by 的SQL 写法,也就是说当distribute by和sort by 字段相同时,可以使用cluster by 代替distribute by和sort by。

  • 需求
    每个班级内部的学生按照分数排序,但不需要全局排序。

  • SQL

    SELECT name,
           CLASS,
           score
    FROM scores CLUSTER BY CLASS;
    
  • 结果
    在这里插入图片描述

总结

  • order by 是全局排序,可能性能会比较差;
  • sort by分区内有序,往往配合distribute by来确定该分区都有那些数据;
  • distribute by 确定了数据分发的规则,满足相同条件的数据被分发到一个reducer;
  • cluster by 当distribute by和sort by 字段相同时,可以使用cluster by 代替distribute by和sort by,但是cluster by默认是升序,不能指定排序方向;

参考文献

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+SortBy

https://sqlrelease.com/sort-by-order-by-distribute-by-and-cluster-by-in-hive

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

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

相关文章

ardupilot开发 --- 炸酱面 篇

我的头可不是面头捏的 奥维互动地图ovital航点文件转Mission planner航点文件 奥维互动地图ovital航点文件转Mission planner航点文件 gcj02 转 wgs84 奥维互动地图:https://www.ovital.com 航线1.ovjsn 转换工具:https://github.com/huangyangl/geo_c…

Linux之grep命令

在文本文件中过滤,包含指定字符串的行 – grep [选项] 字符串 文本文件...• 常用命令选项 – -v,取反匹配 – -i,忽略大小写 ]# grep root /etc/passwd #包含root的行 ]# grep -v root /etc/passwd #不包含root ]# grep ROOT…

操作系统的功能及应用

操作系统介绍 操作系统(Operating System, OS)是计算机系统中不可或缺的核心软件,它负责管理和控制计算机硬件与软件资源,提供用户与计算机之间的交互界面。本文将详细探讨操作系统的功能、分类及其在现代社会中的应用。 操作系统…

通过redis-operator 来部署 Redis Cluster 集群

安装 Redis Operator 首先,需要安装 redis-operator。可以通过 Helm 或直接应用 YAML 文件来安装。 使用 Helm 安装: helm repo add ot-helm https://ot-container-kit.github.io/helm-charts/ helm install redis-operator ot-helm/redis-operator --…

2024 年的 Web3 游戏:演变、趋势和市场动态

Web3 游戏行业在经历了多年的快速发展和变革之后,正在2024年迎来全新的阶段。这个行业从最初的边玩边赚(Play-to-Earn, P2E)模式出发,如今正在向更为平衡的“边玩边赚”模式转型。这种转型不仅解决了早期 P2E 模式下存在的可持续性…

自动驾驶真正踏出迈向“用户”的第一步:IROS24新SOTA提出个性化的实例迁移模仿学习

导读: 本文针对自动驾驶规划任务,提出了一种基于实例的迁移模仿学习方法,通过预先训练的微调框架从专家域迁移专业知识,以解决用户域数据稀缺问题。实验结果显示,该方法能有效捕捉用户驾驶风格并实现具有竞争力的规划性…

select、poll、epoll的原理

目录 1.IO多路复用 2.select原理 3.poll原理 4.epoll原理 5.select、poll、epoll总结 6.epoll原理详解 6.1内核收包的过程 6.2进程调度时的阻塞 6.3再来看一下内核收网络数据的过程 6.4select的原理 6.5epoll的设计原理 6.6补充 6.7总结 1.IO多路复用 IO多路复用…

数据时代的领航者:首席数据官(CDO)如何影响城市治理?

随着2023年9月的到来,多个中国城市包括长沙和北京相继宣布引入首席数据官(CDO)机制,这标志着国家数据管理体系进入一个新纪元。 首席数据官的设立不仅是对传统数据管理方式的重大革新,也是增强数据战略意识和推动数据…

托勒密世界地图:现代地形图绘制的标杆诞生于公元2世纪

关注我们 - 数字罗塞塔计划 - 今天要为大家分享一幅公元150年左右的世界地图——托勒密世界地图,它是由古埃及的数学家、天文学家、地理学家及占星家劳狄乌斯托勒密绘制的。托勒密著有《天文学大成》、《地理学》和《占星四书》等著作,其中《地理学》一书…

从校园到产业园:数字媒体人才如何无缝对接产业需求?

在当今数字化时代,数字媒体产业蓬勃发展,对专业人才的需求日益旺盛。然而,如何实现从校园到产业园的无缝对接,成为关键问题。 为了实现无缝对接,一方面,学校应加强与产业的合作。邀请行业专家走进校园授课、…

免费分享一套SpringBoot+Vue驾校(预约)管理系统【论文+源码+SQL脚本】,帅呆了~~

大家好,我是java1234_小锋老师,看到一个不错的SpringBootVue驾校(预约)管理系统,分享下哈。 项目视频演示 【免费】SpringBootVue驾校(预约)管理系统 Java毕业设计_哔哩哔哩_bilibili 项目介绍 传统办法管理信息首先需要花费的时间比较多&…

OpenCV与Matplotlib:灰度图像

目录 读取灰度图像 代码解释 1. 导入库 2. 读取彩色图像 3. 转换为灰度图像 4. 将 BGR 图像转换为 RGB 格式 5. 创建子图并显示图像 总结: 整体代码 效果展示 衍生操作 1. 边缘检测 代码说明 整体代码 效果展示 2. 图像二值化 代码说明 整体代码 效…

kali——nmap的使用

目录 前言 普通nmap扫描 扫描单个目标地址 扫描多个目标地址 扫描范围目标地址 扫描目标网段 扫描众多目标地址 排除扫描 扫描指定端口 路由追踪 进阶扫描 综合扫描(-A) 目标网段在线主机(-sP) 目标主机指纹扫描&am…

Android TextView设置跑马灯失效

1.关于问题 TextView失效在网上有详细的解决方案&#xff0c;大部分时候都能够很好的解决问题 下面给出网上的解决方案&#xff1a; <TextViewandroid:layout_width"100dp"android:layout_height"22dp"tools:text"水浇地放松放松开发的开始放假…

深入RAG优化:BGE词嵌入全解析与Landmark Embedding新突破

前面已经写过一篇关于Embedding选型的文章,《如何高效选择RAG的中文Embedding模型?揭秘最佳实践与关键标准!》,主要介绍通过开源网站的下载量和测评效果选择Embedding模型。 一、Embedding选型建议与结果 选型建议: 1、大部分模型的序列长度是 512 tokens。8192 可尝试 …

每日最新AIGC进展(59):谷歌提出关键帧插值算法、谷歌研究院提出用实时游戏画面生成算法、中国科学院大学提出复杂场景图像生成算法

Diffusion Models专栏文章汇总&#xff1a;入门与实战 Generative Inbetweening: Adapting Image-to-Video Models for Keyframe Interpolation 本研究提出了一种新颖的关键帧插值方法&#xff0c;旨在生成符合自然运动轨迹的连续视频片段。我们适应了已经训练好的图像到视频扩…

每日OJ_牛客_Emacs计算器(逆波兰表达式)

目录 牛客_Emacs计算器&#xff08;逆波兰表达式&#xff09; 解析代码 牛客_Emacs计算器&#xff08;逆波兰表达式&#xff09; Emacs计算器__牛客网 解析代码 逆波兰表达式(后缀表达式)求值&#xff0c;需要借助栈&#xff0c;思路&#xff1a; 循环输入&#xff0c;获取…

智能制造新纪元:3D协同平台引领前沿创新

随着市场的发展&#xff0c;我们的企业面临两个方面的挑战&#xff1a; 从业务和市场方面来看&#xff0c;为了在竞争中取得更大优势&#xff0c;我们需要以高质且低价的产品赢得消费者的信赖&#xff0c;同时必须有效控制成本、加速产品迭代&#xff0c;缩短产品上市周期&…

Orcad如何更改A4到A3纸,表格填充

1 可以直接从以有的A4纸转到A3 2 选择过滤 1 有电气属性的都选择不了 2 修改元器件名称,改了之后下面有横线

交换机堆叠配置

1.华为S系列交换机 维护宝典 https://support.huawei.com/enterprise/zh/doc/EDOC1100339648/d9b3a94b 2.堆叠方式有两种 2.1.专用堆叠卡 2.2.业务口堆叠-10G光口 主交换机&#xff08;19&#xff0c;20口&#xff09;对应备交换机&#xff08;20,19口&#xff09; 全新设…