order by,sort by,distribute by,cluster by的区别是什么?

order by,sort by,distribute by,cluster by的区别是什么?前言本文隶属于专栏 1000 个问题搞定大数据技术体系 该专栏为笔者原创 引用请注明来源 不足和错误之处请在评论区帮忙指出 谢谢 本专栏目录结构和参考文献请见 1000 个问题搞定大数据技术体系正文 1 orderby 会对所给的全部数据进行全局排序 不管来多少数据 都只启动一个 reducer 来处理 2 sortby 是局部排序 sortby 会根据数据量的大小启动一到多个 reducer 来干活 并且 它会在进入 reduce 之前为每个 reducer 都产生一个排序文件 3 d

前言

本文隶属于专栏《1000个问题搞定大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!

本专栏目录结构和参考文献请见1000个问题搞定大数据技术体系

正文

1. order by 会对所给的全部数据进行全局排序,不管来多少数据,都只启动一个reducer来处理 。 2. sort by是 局部排序,sort by会根据数据量的大小启动一到多个 reducer 来干活,并且,它会在进入 reduce 之前为每个 reducer 都产生一个排序文件 。 3. distribute by 控制 map 结果的分发,它会将具有相同字段的 map 输出分发到一个 reduce 节点上做处理 。 4. cluster by 可以理解为一个特殊的 distribute by 和 sort by 的结合,当 distribute by 和 sort by 后面所跟的列名相同时,就等同于直接使用 cluster by 跟上该列名。 但是被cluster by指定的列最终的排序结果只能是降序,而且无法指定 asc 和 desc。 

补充

1. order by 全局排序

全局排序,只有一个reduce

使用 order by 子句排序

  1. asc (ascend)—— 升序 (默认)
  2. desc (descend)—— 降序

order by 子句在 select 语句的结尾

2. distribute by 分区排序

distribute by 类似 MapReduce 中 partition,采集 hash 算法,在 map 端将查询的结果中 hash 值相同的结果分发到对应的 reduce 文件中。需要结合sort by使用。

注意: Hive要求 distribute by 语句要写在 sort by 语句之前。

3. cluster by

  • 当 distribute by 和 sort by 字段相同时,可以使用 cluster by 方式
  • 除了 distribute by 的功能外,还会对该字段进行排序,所以 cluster by = distribute by + sort by
--以下两种写法等价 insert overwrite local directory '/home/hadoop/hivedata/distribute_sort' select * from student distribute by score sort by score; insert overwrite local directory '/home/hadoop/hivedata/cluster' select * from student cluster by score; 

实践

1. 查询学生的成绩,并按照分数降序排列

select * from student s order by score desc; 

2. 按照别名排序

  • 按照学生分数的平均值排序
select s.sid,s.tname, avg(score) as score_avg from student s group by s.sid,s.tname order by score_avg desc; 

3. 多列排序

  • 按照学生分数和年龄升序排序
select * from student s order by score,age; 

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

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

1、设置reduce个数

set mapreduce.job.reduces=3; 

2、查看设置reduce个数

set mapreduce.job.reduces; 

3、查询成绩按照成绩降序排列

select * from student s sort by s.score; 

4、将查询结果导入到文件中(按照成绩降序排列)

insert overwrite local directory '/home/hadoop/hivedata/sort' select * from student s sort by s.score; 

5. 先按照学生 sid 进行分区,再按照学生成绩进行排序

1、设置reduce的个数

set mapreduce.job.reduces=3; 

2、通过 distribute by 进行数据的分区,将不同的 sid 划分到对应的 reduce 当中去

insert overwrite local directory '/home/hadoop/hivedata/distribute' select * from student distribute by sid sort by score; 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/213028.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午6:43
下一篇 2026年3月18日 下午6:43


相关推荐

  • gitignore不起作用

    gitignore不起作用gitignore 中已经标明忽略的文件目录下的文件 gitpush 的时候还会出现在 push 的目录中 原因是因为在 git 忽略目录中 新建的文件在 git 中会有缓存 如果某些文件已经被纳入了版本管理中 就算是在 gitignore 中已经声明了忽略路径也是不起作用的 这时候我们就应该先把本地缓存删除 然后再进行 git 的 push 这样就不会出现忽略的文件了 git 清除本地缓存命令如下 gitr

    2026年3月26日
    2
  • 360无线路由器dns服务器,路由器的首选dns服务器怎么填

    360无线路由器dns服务器,路由器的首选dns服务器怎么填满意答案mirk60422020.04.25采纳率:42%等级:7已帮助:159人1、在管理员界面中输入命令:ipconfig/all然后按enter键确认即可显示windowsip配置,在这里我们可以查看我们的dns服务器地址。2、如果你连接了路由的话也可以通过路由来查看你的dns服务器地址,在浏览器输入地址192.168.1.1弹出路由器登入对话框,通常路由器默认的账户密码均为:ad…

    2022年6月10日
    57
  • 方舟gg修改器下载之后怎么操作_方舟手游GG修改器怎么改经验

    方舟gg修改器下载之后怎么操作_方舟手游GG修改器怎么改经验方舟手游gg修改器脚本是一款很奈斯的辅助器,这款软件是为游戏定制的,功能十分强大,一键获取全地图视野,无视丛草,精准射击!感兴趣的用户赶快体验吧!方舟手游gg修改器脚本介绍方舟手游gg修改器脚本是一款数据信息开展非常好的改动,最值得一提的是游戏玩家彻底不必担心会被检验或是封禁,能够说成十分的安全性了,安装文件也是十分的小,需要的游戏玩家快点儿参加进去,这款手机软件能够非常好的协助你提升手机游戏的体…

    2025年9月15日
    6
  • Thinkphp5学习笔记

    Thinkphp5学习笔记架构Thinkphp5目录架构thinkphp应用部署目录├─application应用目录(可设置)│├─common公共模块目录(可更改)│├─in

    2021年12月13日
    47
  • sqlserver 中isnull(Null,0) 和isnull(‘ ‘,0) 区别

    sqlserver 中isnull(Null,0) 和isnull(‘ ‘,0) 区别SELECTISNULL NULL 0 WHEREISNULL NULL 0 0SELECTISNUL 0 WHEREISNULL 0 0SELECTISNUL NULL 0 WHEREISNULL NULL 0 0 SELECTISNULL 0 WHEREISNULL 0 0 上面 sql 看似没有多大区别 但是当

    2026年3月26日
    2
  • maven打包时打包指定的lib文件夹

    maven打包时打包指定的lib文件夹今天在打包自己的springboot项目时遇到了问题,报找不到类和符号。因为我有些依赖是放在项目lib文件夹中,那么打包的时候要连把它一起打包。修改pom.xml,添加一下内容:<build><plugins><plugin><groupId>or…

    2022年5月29日
    46

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号