Hive基础知识(十五):Hive中SQL排序方式全解

这篇具有很好参考价值的文章主要介绍了Hive基础知识(十五):Hive中SQL排序方式全解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 全局排序(Order By)

Order By:全局排序,只有一个 Reducer

1)使用 ORDER BY 子句排序

ASC(ascend): 升序(默认)

DESC(descend): 降序

2)ORDER BY 子句在 SELECT 语句的结尾

3)案例实操

(1)查询员工信息按工资升序排列

hive (hive3)> select e.ename,e.sal from emp e order by e.sal;
e.ename e.sal
KING  NULL
SMITH 800.0
JAMES 950.0
ADAMS 1100.0
WARD 1250.0
MARTIN 1250.0
MILLER 1300.0
TURNER 1500.0
ALLEN 1600.0
CLARK 2450.0
BLAKE 2850.0
JONES 2975.0
SCOTT 3000.0
FORD 3000.0
Time taken: 4.87 seconds, Fetched: 14 row(s)

(2)查询员工信息按工资降序排列

hive (hive3)> select e.ename,e.sal from emp e order by e.sal desc;
e.ename e.sal
FORD 3000.0
SCOTT 3000.0
JONES 2975.0
BLAKE 2850.0
CLARK 2450.0
ALLEN 1600.0
TURNER 1500.0
MILLER 1300.0
MARTIN 1250.0
WARD 1250.0
ADAMS 1100.0
JAMES 950.0
SMITH 800.0
KING  NULL
Time taken: 2.08 seconds, Fetched: 14 row(s)

2. 按照别名排序

按照员工薪水的2 倍排序

hive (hive3)>  select ename, sal*2 twosal from emp order by twosal;

3. 多个列排序

按照部门和工资升序排序

hive (hive3)> select e.deptno,e.sal,e.ename from emp e order by deptno, sal;

4. 每个 Reduce 内部排序(Sort By)重点

Sort By:对于大规模的数据集 order by 的效率非常低。在很多情况下,并不需要全局排序,此时可以使用 sort by。

Sort by 为每个 reducer 产生一个排序文件。每个 Reducer 内部进行排序,对全局结果集来说不是排序。

1)设置 reduce 个数

hive (default)> set mapreduce.job.reduces=3;

2)查看设置 reduce 个数

hive (default)> set mapreduce.job.reduces;

3)根据部门编号降序查看员工信息

hive (hive3)> select e.ename,e.deptno from emp e sort by deptno desc;
e.ename e.deptno
TURNER 30
BLAKE 30
MARTIN 30
SCOTT 20
CLARK 10
KING  NULL
WARD 30
ALLEN 30
JAMES 30
ADAMS 20
JONES 20
MILLER 10
FORD 20
SMITH 20
Time taken: 34.805 seconds, Fetched: 14 row(s)

上面的数据整体上看上去不是按照排序来排序的,是因为他们是在3个MR中进行的内部排序,当全部合拢在一起时又不是排序的了。

4)将查询结果导入到文件中(按照部门编号降序排序)

hive (hive3)> insert overwrite local directory '/home/zzdq/sortby-result' select e.ename,e.deptno from emp e sort by deptno desc;
Query ID = zzdq_20211219114405_5c926e59-440c-4eea-b11d-51df3b88c7ba
Hadoop job information for Stage-1: number of mappers: 1; number of reducers: 3
2021-12-19 11:44:16,622 Stage-1 map = 0%, reduce = 0%
2021-12-19 11:44:24,137 Stage-1 map = 100%, reduce = 0%, Cumulative CPU 2.03 sec
2021-12-19 11:44:33,876 Stage-1 map = 100%, reduce = 33%, Cumulative CPU 4.64 sec
2021-12-19 11:44:34,975 Stage-1 map = 100%, reduce = 67%, Cumulative CPU 6.98 sec
2021-12-19 11:44:38,148 Stage-1 map = 100%, reduce = 100%, Cumulative CPU 8.97 sec
MapReduce Total cumulative CPU time: 8 seconds 970 msec
Ended Job = job_1639880318289_0004
Moving data to local directory /home/atguigu/sortby-result
MapReduce Jobs Launched: 
Stage-Stage-1: Map: 1  Reduce: 3  Cumulative CPU: 8.97 sec  HDFS Read: 21354 HDFS Write: 126 SUCCESS
Total MapReduce CPU Time Spent: 8 seconds 970 msec
OK
e.ename e.deptno
Time taken: 34.73 seconds

查看生成的文件:

Hive基础知识(十五):Hive中SQL排序方式全解,大数据,hive,hadoop,数据仓库

查看文件:

[zzdq@hadoop100 sortby-result]$ cat 000000_0 -n
1  TURNER•30
2  BLAKE•30
3  MARTIN•30
4  SCOTT•20
5  CLARK•10
6  KING•\N
[zzdq@hadoop100 sortby-result]$ cat 000001_0 -n 
1  WARD•30
2  ALLEN•30
3  JAMES•30
4  ADAMS•20
5  JONES•20
6  MILLER•10
[zzdq@hadoop100 sortby-result]$ cat 000002_0 -n 
1  FORD•20
2  SMITH•20
[zzdq@hadoop100 sortby-result]$

可以看到,在文件内部的数据是有序的,也就是进行过排序了。排序过程中,数据是随机拿出来排序的,这是为了防止数据倾斜

5. 分区(Distribute By)

Distribute By:在有些情况下,我们需要控制某个特定行应该到哪个 reducer,通常是为了进行后续的聚集操作。distribute by 子句可以做这件事。distribute by 类似 MR 中 partition (自定义分区),进行分区,结合 sort by 使用。

对于 distribute by 进行测试,一定要分配多 reduce 进行处理,否则无法看到 distribute by 的效果。

1)案例实操:

(1)先按照部门编号分区,再按照员工编号降序排序。

hive (hive3)> select deptno,ename,sal from emp distribute by deptno sort by sal desc;
2021-12-19 11:53:46,343 Stage-1 map = 0%, reduce = 0%
2021-12-19 11:53:56,877 Stage-1 map = 100%, reduce = 0%, Cumulative CPU 3.35 sec
2021-12-19 11:54:07,429 Stage-1 map = 100%, reduce = 33%, Cumulative CPU 5.83 sec
2021-12-19 11:54:08,484 Stage-1 map = 100%, reduce = 67%, Cumulative CPU 8.31 sec
2021-12-19 11:54:09,519 Stage-1 map = 100%, reduce = 100%, Cumulative CPU 11.05 sec
MapReduce Total cumulative CPU time: 11 seconds 50 msec
Ended Job = job_1639880318289_0005
MapReduce Jobs Launched: 
Stage-Stage-1: Map: 1  Reduce: 3  Cumulative CPU: 11.05 sec  HDFS Read: 23443 HDFS Write: 647 SUCCESS
Total MapReduce CPU Time Spent: 11 seconds 50 msec
OK
deptno  ename  sal
30  BLAKE 2850.0
30  ALLEN 1600.0
30  TURNER 1500.0
30  WARD 1250.0
30  MARTIN 1250.0
30  JAMES 950.0
NULL  KING  NULL
10  CLARK 2450.0
10  MILLER 1300.0
20  SCOTT 3000.0
20  FORD 3000.0
20  JONES 2975.0
20  ADAMS 1100.0
20  SMITH 800.0
Time taken: 36.518 seconds, Fetched: 14 row(s)

同样可以输出到本地来进行查看

hive (hive3)> set mapreduce.job.reduces=3;
hive (hive3)> insert overwrite local directory '/home/zzdq/distribute-result' select deptno,ename,sal from emp distribute by deptno sort by sal desc;

使用多个reduce时,hive会退出本地模式

Cannot run job locally: Number of reducers (= 3) is more than 1

注意:

➢ distribute by 的分区规则是根据分区字段的 hash 码与 reduce 的个数进行模除后,余数相同的分到一个区。

➢ Hive 要求 DISTRIBUTE BY 语句要写在 SORT BY 语句之前。

6. Cluster By(上面两个结合)

当 distribute by 和 sorts by 字段相同时,可以使用 cluster by 方式。

cluster by 除了具有 distribute by 的功能外还兼具 sort by 的功能。缺点:但是排序只能是升序排序,不能指定排序规则为 ASC 或者 DESC。

(1)以下两种写法等价

hive (default)> select * from emp cluster by deptno;
hive (default)> select * from emp distribute by deptno sort by deptno;

注意:按照部门编号分区,不一定就是固定死的数值,可以是20 号和30 号部门分到一个分区里面去。文章来源地址https://www.toymoban.com/news/detail-803531.html

到了这里,关于Hive基础知识(十五):Hive中SQL排序方式全解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Html基础知识学习——css精灵(十五)

    将网页用到的图片放在一张图片上,进行定位展示 优点:防止网页http请求次数过多,从而提高页面性能 缺点:降低开发效率。维护难度加大 使用图 网页制作图 用到图片 网页制作

    2024年02月16日
    浏览(27)
  • (十五)VBA常用基础知识:正则表达式的使用

    vba正则表达式的说明 项目 说明 Pattern 在这里写正则表达式,例:[d]{2,4} IgnoreCase 大小写区分,默认false:区分;true:不区分 Global true:全体检索;false:最小匹配 Test 类似perl正则前的m,匹配项目 Replace 类似perl正则前的s,替换项目 Execute 类似java的matcher,然后能取出里边的

    2024年02月07日
    浏览(28)
  • 【前端知识】React 基础巩固(三十五)——ReduxToolKit (RTK)

    Redux Tool Kit (RTK)是官方推荐的编写Redux逻辑的方法,旨在成为编写Redux逻辑的标准方式,从而解决上面提到的问题。 RTK的核心API主要有如下几个: configureStore:包装createStore以提供简化的配置选项和良好的默认值。它可以自动组合你的slice reducer,添加你提供的任何Redux中间件

    2024年02月15日
    浏览(45)
  • 【STM32】基础知识 第十五课 看门狗 IWDG 深入理解与应用

    STM32 系列单片机具有强大的内置功能, 其中之一就是独立看门口 (IWDG). 看门狗定时器是一种重要的硬件设备, 用于防止系统软件故障. 在许多应用中, 看门狗定时器的使用是至关重要的, 它可以检测和解决软件错误, 提高系统的可靠性. 今天小白将带领大家深入探讨 STM32 独立看门

    2024年02月11日
    浏览(36)
  • Hive基础知识

      Hive是由Facebook开源用于解决海量 结构化 日志的数据统计工具。Hive是基于Hadoop的一个 数据仓库工具 ,可以将结 构化的数据文件映射为一张表 ,并提供 类SQL 查询功能。 Hive的本质是将HQL转化成MapReduce程序。 Hive处理的数据存储在HDFS。 Hive分析数据底层的实现是MapReduce。

    2024年02月11日
    浏览(24)
  • hive 基础知识

    在本节前我们需要明确 hive 是什么 上面两个代码块,左边的是 mapreduce 的代码块,右边的是hive 的代码块 很容易看出来,右边的 hive 写起来要更容易更快些,而执行效率,右边的 hive 只比左边多一个翻译的过程,就是将写的 HQL语句 翻译成 mapreduce 去执行 简单来说 hive 就是一

    2024年02月09日
    浏览(23)
  • 【人工智能】实验三 A*算法求解八/十五数码问题实验与基础知识

    熟悉和掌握启发式搜索的定义、估价函数和算法过程,并利用A*算法求解N数码难题,理解求解流程和搜索顺序。 以8数码问题和15数码问题为例实现A*算法的求解程序(编程语言不限)。 设计两种不同的估价函数。 设置相同的初始状态和目标状态,针对不同的估价函数,求得

    2024年02月03日
    浏览(45)
  • Hive基础知识(十一):Hive的数据导出方法示例

    1)将查询的结果导出到本地 2)将查询的结果格式化导出到本地(加上一个以“,”隔开数据的格式) 3)将查询的结果导出到 HDFS 上(没有 local) 基本语法:(hive -f/-e 执行语句或者脚本 file) 导出的数据中有两个数据源,其中除了主信息之外,还包括记录主数据信息的元数据

    2024年01月22日
    浏览(28)
  • Day1 - Hive基础知识

    概述 Hive是由Facobook开发的后来贡献给了Apache的一套用于进行 数据仓库 管理的工具,使用类SQL语言来对分布式文件系统中的PB级别的数据来进行读写、管理以及分析 Hive基于Hadoop来使用的,底层的默认计算引擎使用的是MapReduce。Hive利用类SQL(HQL,Hive Query Language)语言来操作数据

    2024年04月29日
    浏览(25)
  • HBase基础知识(六):HBase 对接 Hive

    1.Hive (1) 数据仓库 Hive 的本质其实就相当于将 HDFS 中已经存储的文件在 Mysql 中做了一个双射关系,以 方便使用 HQL 去管理查询。 (2) 用于数据分析、清洗 Hive 适用于离线的数据分析和清洗,延迟较高。 (3) 基于 HDFS、MapReduce Hive 存储的数据依旧在 DataNode 上,编写的 HQL 语句终

    2024年02月04日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包