Hive中的Order by与关系型数据库中的order by语句的异同点
2024-10-11 17:16:10
在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 后的选择列的时候就不会报错,如下:
select deptno,empno,ename,job,salary from emp order by deptno;
最新文章
- 第20讲 HOOK和数据库编程
- android 学习运用海马模拟器教程与android环境的搭建
- Apache Spark源码走读之14 -- Graphx实现剖析
- angular 和jq 的AJAX的请求区别
- Delphi对象变成Windows控件的前世今生(关键是设置句柄和回调函数)goodx
- 【LeetCode】38 - Count and Say
- iOS项目架构文档
- JS 浏览器检测
- MySQL删除单列重复或多列同时重复值并保留一条
- 数据结构与算法系列研究五——树、二叉树、三叉树、平衡排序二叉树AVL
- UILabel 的使用
- [android] 自定义广播事件
- 开源流媒体服务器SRS学习笔记(4) - Cluster集群方案
- Docker跨主机link
- JavaScript中的关于this
- ApplicationListener<;ContextRefreshedEvent>;接口,Spring启动后获取所有拥有特定注解的Bean
- [No0000167]CPU内部组成结构及指令执行过程
- SQL Server 配置管理器
- Django--django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE
- Postgresql 字符串操作函数
热门文章
- 好的java资源地址
- vue.js学习系列-第二篇
- 基于Python的Webservice开发(一)-简介
- gitlab 随笔
- 【easy】141. Linked List Cycle
- pytorch查看CUDA支持情况,只需要三行代码,另附Cuda runtime error (48) : no kernel image is available for execution处理办法
- 【Flask】Flask学习笔记(一) 应用基本结构
- Linux 用户组
- 小米众筹新品---8H凉感慢回弹记忆绵枕 99元 上手开箱图
- centos7手把手教你搭建zabbix监控