码迷,mamicode.com
首页 > 数据库 > 详细

Hive中的Order by与关系型数据库中的order by语句的异同点

时间:2018-08-17 00:41:13      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:sel   注意   bubuko   col   技术   dep   2.3   color   rom   

在Hive中,ORDER BY语句是对查询结果集进行整体的排序,最终将会产生一个reducer进行全局的排序,达到的最终结果是和传统的关系型数据库是一样的。

在数据量非常大的时候,全局排序的单个reducer将会成为性能瓶颈,有可能由于数据量过大而跑不出来结果。

Hive中可以设置hive.mapred.mode为strict严格模式,这时候,Hive要求用户必须对order by语句加上limit 条数限制,防止排序数据集过大导致性能瓶颈。

在这里我不提sort by ,distribute by的用法,下一节好好分析下这几个语句的用法。我主要讲下Hive的order by 与oracle 的order by的不同点。

同样是一个emp雇员表。我希望执行如下查询:

SELECT empno,ename,job,sal FROM emp order by deptno;

这个语句中,order by排序引用的列在不是select查询的列,在大多数的关系型数据库中执行是没有问题的,但是在Hive中执行就会出问题,效果如下:

在Oracle sqlplus中执行效果如下:

技术分享图片

 

在Hive中执行却报错:

技术分享图片

在HIVE中,order by语句只能引用select查询的列,这一点我觉得是有待改进的地方。

我在查询列表中加上deptno后,才能正常执行,这一点大家在写Hive SQL的时候需要注意,或许后续版本会对这个bug进行改进,我当前用的是Hive 2.3.3版本。

select empno,ename,job,salary from emp order by deptno;

 技术分享图片

 

Hive中的Order by与关系型数据库中的order by语句的异同点

标签:sel   注意   bubuko   col   技术   dep   2.3   color   rom   

原文地址:https://www.cnblogs.com/nanshanjushi/p/9490897.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!