hive高级操作——排序

 Hive提供了4种排序方式:ORDER BY、SORT BY、 DISTRIBUTE BY 及 CLUSTER
BY.
1. ORDER BY
Hive 中的ORDERBY语句与SQL中的类似,可以对结果集进行全局排序,即 Hive
可对所有数据进行 Reducer 处理以保证全局有序,但当数据规模较大时此过程比较耗时。
所以在 strict(hive.mapred.mode=strict,默认是 nonstrict) 模式下,Hive 对 ORDER BY进行了限制,要求 ORDER BY 子句后必须跟随 “LIMIT”子句,以防止单个 Reducer处理时间过长。
【语法】
ORDER BY colName (ASC|DESC)? (,colName (ASC|DESC)?)*
ORDER BY 语句默认按 ASC(升序)排序,排序字段必须出现在SELECT 子句中。
注意
ORDER BY 性能较差,应尽量在排序前对数据进行过滤。

2. SORT BY
SORT BY 指出了数据在每个 Reducer 内如何排序,即 SORT BY 只在每个 Reducer
内对数据进行排序。语法上SORT BY 与ORDER BY 相似,但从作用上看,ORDER BY可以看作是 SORT BY 的一个特例:当 SORT BY 的Reducer 数目设置1时,等同于ORDER BY。所以两者真正的区别是:ORDER BY 强调全局有序,SORT BY 只强调Reducer 内局部有序。

3. DISTRIBUTE BY
DISTRIBUTE BY 控制 Map 的输出数据在Reducer 中的划分。如果 DISTRIBUTE BY指定列的值相同,则它们会被送到同一个 Reducer 中进行处理。
注意
DISTRIBUTE BY 必须写在SORT BY之前

4、 CLUSTER BY
CLUSTER BY 相当于 DISTRIBUTE BY 和SORT BY 的结合体。当 DISTRIBUTE BY和 SORT BY 都在同一列上操作时,如下2个语句是等价的。
select A,B,C from table distribute by A sort by A select A,B,C from table cluster by A
另外,CLUSTER BY 指定的列只能进行升序排序,无法手动指定排序方向。

  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值