hive的排序函数(hive之四by)

文章详细介绍了Hive中的四个排序和数据分布函数:OrderBy用于全局排序,可能导致单个reducer导致计算时间长;SortBy是分区内有序的非全局排序;DistributeBy控制数据在map端如何分配给reduce,通常用于聚集操作;ClusterBy结合了DistributeBy和SortBy的功能,简化了SQL写法。
摘要由CSDN通过智能技术生成

前言

介绍hive的四种排序函数:Order By,Sort By,Distribute By,Cluster By 简称”四by“

Order By:全局排序

对输入的所有数据做排序,故此只有一个reducer(多个reducer无法保证全局有序);
只有一个reducer,会导致当输入规模较大时,需要较长的计算时间;

1、ORDER BY 子句排序
ASC(ascend): 升序(默认)
DESC(descend): 降序

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

3、示例:
select * from emp order by sal; (默认升序)

select * from emp order by sal DESC; (降序

Sort By:非全局排序,分区内有序

1、在数据进入reducer前完成排序, 它会在数据进入reduce之前为每个reducer都产生一个排序后的文件;

2、当mapred.reduce.tasks > 1时,只能保证每个reducer的输出有序,不保证全局有序

Distribute By:(数据分发)

控制在map端如何拆分数据给reduce端的

1、按照指定的字段对数据进行划分输出到不同的reduce中,通常是为了进行后续的聚集操作;

2、hive会根据distribute by后面列,将数据分发给对应的reducer,默认是采用hash算法+取余数的方式

3、常和sort by一起使用,并且distribute by必须在sort by前面:sort by为每个reduce产生一个排序文件,在有些情况下,需要控制某写特定的行应该到哪个reducer,这通常是为了进行后续的聚集操作。distribute by刚好可以做这件事。因此,distribute by经常和sort by配合使用。

Cluster By

相当于distribute by+sort by,只能默认升序,不能使用倒序。

当分区字段和排序字段相同cluster by可以简化distribute by+sort by 的SQL 写法,也就是说当distribute by和sort by 字段相同时,可以使用cluster by 代替distribute by和sort by。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值