hive排序问题

文章详细介绍了HiveSQL中的四种排序和分布方法:OrderBy用于全局排序,效率较低;SortBy是内部排序,适用于不需要全局排序的情况;DistributeBy用于控制数据分布到特定Reducer,常配合SortBy用于预排序;ClusterBy则同时实现分布和排序,但只支持升序。这些工具在大数据处理中优化了MapReduce的性能。
摘要由CSDN通过智能技术生成

1.Order By

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

  1. 子句排序

    默认为升序 : asc

    降序: desc

    hive sql执行过程

在这里插入图片描述

2.Sort By

Sort By:

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

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

1)设置reduce个数

set mapreduce.job.reduces=3;

2)查看reduce的个数

set mapreduce.job.reduces;

hive sql执行过程

在这里插入图片描述

3.Distribute By

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

注意

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

  2. Hive要求distribute by语句要写在sort by语句之前。

  3. 演示完以后mapreduce.job.reduces的值要设置回-1,否则下面分区or分桶表load跑MapReduce的时候会报错。

在这里插入图片描述

4.Cluster By

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

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

注意:

  1. 按照部门编号分区,不一定就是固定死的数值,可以是20号和30号部门分到一个分区里面去

注意:

  1. 按照部门编号分区,不一定就是固定死的数值,可以是20号和30号部门分到一个分区里面去

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y5Ygq5NV-1685173271431)(C:\Users\Mr.wang\AppData\Roaming\Typora\typora-user-images\image-20230527153928482.png)]

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值