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相关推荐

  1. 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 ...

  2. Hive sql 中 order by、sort by、distribute by、cluster by用法

    名词解释: 名词解释: order by Hive中的order by和数据库中的order by 功能一致,按照某一项或者几项排序输出,可以指定是升序或者是降序排序.它保证全局有序,但是进行orde ...

  3. 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 ...

  4. 2.12 Hivet中order by,sort by、distribute by和cluster by

    https://cwiki.apache.org/confluence/display/Hive/LanguageManual+SortBy 一.order by 对全局数据的排序,仅仅只有一个red ...

  5. hive中order by、distribute by、sort by和cluster by的区别和联系

    order by order by 会对数据进行全局排序,和oracle和mysql等数据库中的order by 效果一样,它只在一个reduce中进行所以数据量特别大的时候效率非常低.而且当设置 : ...

  6. hive中的order by、sort by、distribute by、cluster by排序

    hive中的排序 说明:hive中有四种全局排序:order by.内部排序:sort by.分区排序:distribute by.组合排序:cluster by. order by(全局排序) 说明 ...

  7. 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/ ...

  8. 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 说明:全 ...

  9. 【Hive】sort by、order by、 distribute by、 group by 、cluster by区别

    (1)order by是将所有数据放在一个reduce里面进行排序,当数据量大时,会出现内存溢出的问题,同时数据排序效率低. 另外,可以在sort by后面加上limit n来实现top n操作. ( ...

  10. hive 中 order by、sort by、distribute by 、cluster by 区别

    1. select 语法 Hive 中的 SELECT 基础语法和标准SQL语法基本一致,支持 WHERE.DISTINCT.GROUP BY.ORDER BY.HAVING.LIMIT.子查询等.语 ...

最新文章

  1. Linux中的硬链接和软链接
  2. latex箭头表示符号
  3. Serval and Parenthesis Sequence
  4. HDU 3938 Portal
  5. 运维组如何管理服务器资源,运维服务管理体系方案全套.doc
  6. SAP License:O2O模式网站解决方案概述
  7. 《小猪佩奇过大年》首映 导演解答“啥是佩奇”
  8. 1年内从2000涨到13000的成长经验分享
  9. 【TWVRP】基于matlab A_star算法求解带时间窗和任务软时间窗多车场多车型车辆路径问题【含Matlab源码 1561期】
  10. cmd命令打开文本文档_Windows常用cmd命令总结
  11. 自由软件、开源软件、免费软件之间的区别
  12. 圆形区域的半透明填充
  13. 爬虫案例之Pubmed数据库下载
  14. 详解Https出现的前因后果
  15. python编制剪刀石头布游戏_Python编辑剪刀石头布游戏
  16. 《面筋:拿到美团点评和去哪儿网的offer》
  17. VScode解决Backend TkAgg is interactive backend. Turning interactive mode on.
  18. Pr2022 视频剪辑软件MAC版正式更新,全新版本支持M1,今天详细介绍pr2022如何安装使用?
  19. SQL语句的优化(常规SQL语句的优化)
  20. 微信扫码下单小程序怎么弄(做扫码下单小程序的方法)

热门文章

  1. spring mysql 事务回滚失败_Spring事务回滚失败
  2. edk2+vs2019环境搭建
  3. ae字体预设下载_AE超强文字预设包(附插件和教程)Videohive 2D Text Preset Pack for Animation Composer Plug-in...
  4. 【React】React三大属性:Props、State、Refs
  5. 计算机入门在线阅读,计算机应用基础教程(Windows 7+Office 2010)
  6. 如何屏蔽迅雷9右侧广告首页
  7. Apache反向代理配置
  8. fastText训练集对比,分词与句子
  9. tp5html的if判断,TP5 判断方法
  10. SIP音调通话调研结果