order by、distribute by、sort 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;
结果:
order by、distribute by、sort by、group by、partition by相关推荐
- Hive 区分cluster by、distribute by + sort by、order by以及创建表带有clustered by和sort by
Hive 区分cluster by.distribute by + sort by.order by以及创建表带有clustered by和sort by 本文主要根据一些具体SQL实例来介绍说明cl ...
- Hive sql 中 order by、sort by、distribute by、cluster by用法
名词解释: 名词解释: order by Hive中的order by和数据库中的order by 功能一致,按照某一项或者几项排序输出,可以指定是升序或者是降序排序.它保证全局有序,但是进行orde ...
- HiveQL之Sort by、Distribute by、Cluster by、Order By详解
在这里解释一下select语法中的order by.sort by.distribute by.cluster by.order by语法. 一.order by语法 在hiveQL中Order by ...
- 2.12 Hivet中order by,sort by、distribute by和cluster by
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+SortBy 一.order by 对全局数据的排序,仅仅只有一个red ...
- hive中order by、distribute by、sort by和cluster by的区别和联系
order by order by 会对数据进行全局排序,和oracle和mysql等数据库中的order by 效果一样,它只在一个reduce中进行所以数据量特别大的时候效率非常低.而且当设置 : ...
- hive中的order by、sort by、distribute by、cluster by排序
hive中的排序 说明:hive中有四种全局排序:order by.内部排序:sort by.分区排序:distribute by.组合排序:cluster by. order by(全局排序) 说明 ...
- order by 、sort by、distribute by、group by、cluster by的区别
转载:https://www.cnblogs.com/huxinga/p/7688376.html 转载:https://blog.csdn.net/SunWuKong_Hadoop/article/ ...
- mysql distribute by_Hive学习(八) 排序:order by、sort by、distribute by、cluster by
hive中有四种排序: 1.全局排序:order by 2.内部排序:sort by 3.分区排序:distribute by 4.组合排序:cluster by 全局排序:order by 说明:全 ...
- 【Hive】sort by、order by、 distribute by、 group by 、cluster by区别
(1)order by是将所有数据放在一个reduce里面进行排序,当数据量大时,会出现内存溢出的问题,同时数据排序效率低. 另外,可以在sort by后面加上limit n来实现top n操作. ( ...
- hive 中 order by、sort by、distribute by 、cluster by 区别
1. select 语法 Hive 中的 SELECT 基础语法和标准SQL语法基本一致,支持 WHERE.DISTINCT.GROUP BY.ORDER BY.HAVING.LIMIT.子查询等.语 ...
最新文章
- Linux中的硬链接和软链接
- latex箭头表示符号
- Serval and Parenthesis Sequence
- HDU 3938 Portal
- 运维组如何管理服务器资源,运维服务管理体系方案全套.doc
- SAP License:O2O模式网站解决方案概述
- 《小猪佩奇过大年》首映 导演解答“啥是佩奇”
- 1年内从2000涨到13000的成长经验分享
- 【TWVRP】基于matlab A_star算法求解带时间窗和任务软时间窗多车场多车型车辆路径问题【含Matlab源码 1561期】
- cmd命令打开文本文档_Windows常用cmd命令总结
- 自由软件、开源软件、免费软件之间的区别
- 圆形区域的半透明填充
- 爬虫案例之Pubmed数据库下载
- 详解Https出现的前因后果
- python编制剪刀石头布游戏_Python编辑剪刀石头布游戏
- 《面筋:拿到美团点评和去哪儿网的offer》
- VScode解决Backend TkAgg is interactive backend. Turning interactive mode on.
- Pr2022 视频剪辑软件MAC版正式更新,全新版本支持M1,今天详细介绍pr2022如何安装使用?
- SQL语句的优化(常规SQL语句的优化)
- 微信扫码下单小程序怎么弄(做扫码下单小程序的方法)
热门文章
- spring mysql 事务回滚失败_Spring事务回滚失败
- edk2+vs2019环境搭建
- ae字体预设下载_AE超强文字预设包(附插件和教程)Videohive 2D Text Preset Pack for Animation Composer Plug-in...
- 【React】React三大属性:Props、State、Refs
- 计算机入门在线阅读,计算机应用基础教程(Windows 7+Office 2010)
- 如何屏蔽迅雷9右侧广告首页
- Apache反向代理配置
- fastText训练集对比,分词与句子
- tp5html的if判断,TP5 判断方法
- SIP音调通话调研结果