Hadoop Hive 中的排序 Order by ,Sort by ,Distribute by, Cluster By,

本文详细介绍了Hive中OrderBy、Sortby、Distributeby和ClusterBy的功能和用法,包括它们在数据排序、分布和聚合方面的区别和应用场景。

Hive 中 Order by, Sort by ,Dristribute by,Cluster By 的作用和用法


1. order by

 

set hive.mapred.mode=nonstrict; (default value / 默认值)

set hive.mapred.mode=strict;

 

order by 和数据库中的Order by 功能一致,按照某一项 & 几项 排序输出。

 

与数据库中 order by 的区别在于在hive.mapred.mode = strict 模式下 必须指定 limit 否则执行会报错。

 

 

 

hive> select * from test order by id;     

FAILED: Error in semantic analysis: 1:28 In strict mode, if ORDER BY is specified, LIMIT must also be specified. Error encountered near token 'id'

 

原因: 在order by 状态下所有数据会到一台服务器进行reduce操作也即只有一个reduce,如果在数据量大的情况下会出现无法输出结果的情况,如果进行 limit n ,那只有  n * map number 条记录而已。只有一个reduce也可以处理过来。

 

 

2. sort by

 

sort by 不受 hive.mapred.mode 是否为strict ,nostrict 的影响

 

sort by 的数据只能保证在同一reduce中的数据可以按指定字段排序。

 

使用sort by 你可以指定执行的reduce 个数 (set mapred.reduce.tasks=<number>) 这样可以输出更多的数据。

 

对输出的数据再执行归并排序,即可以得到全部结果。

 

3. distribute by

 

按照指定的字段对数据进行划分到不同的输出reduce  / 文件中。

 

 

insert overwrite local directory '/home/hadoop/out' select * from test order by name distribute by length(name);  

 

此方法会根据name的长度划分到不同的reduce中,最终输出到不同的文件中。 

 

length 是内建函数,也可以指定其他的函数或这使用自定义函数。

 

 

 

4. Cluster By

 

cluster by 除了具有 distribute by 的功能外还兼具 sort by 的功能。 

 

 

倒序排序,且不能指定排序规则。 asc  或者 desc。

 

 

 

 

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值