hive学习笔记4:sort by 、order by

1.order by 子句
在order by子句中有一些限制。在strict模式(hive.mapred.mode=strict)下,order by子句后面必须有limit子句。如果设置hive.mapred.mode=nonstrictlimit子句不一定需要。原因是为了对所有结果进行整体的排序,必须使用一个reducer来对最后的结果进行排序。如果结果的总行数太大,单个reducer可能需要很长的时间完成。

order by默认顺序是升序(asc)。在Hive 2.1.0及以上版本,支持对null值进行排序,升序排序是null值被排在第一位,降序时null值被排在最后。

2.sort by 和 order by 之间的区别
Hive支持使用 sort by 排序。
sort byorder by的区别是前者给每一reducer上的所有行进行排序,后者保证在数据结果上都有序。也就是说,如果使用超过一个reducer,使用sort by可能给出部分有序的结果。

3.使用sort by会在每个reducer中的数据将会根据用户指定的顺序排序

SELECT key, value FROM src SORT BY key ASC, value DESC

这个查询有2个reducer,每个结果如下
这里写图片描述
4.sort by排序字段设置类型
变量类型通常被认为是字符串类型,意味着数值型的数据将会以字母表顺序排序。为了克服这个方面,需要在使用sort by之前使用castselect语句中转换类型。

FROM (FROM (FROM src
            SELECT TRANSFORM(value)
            USING 'mapper'
            AS value, count) mapped
      SELECT cast(value as double) AS value, cast(count as int) AS count
      SORT BY value, count) sorted
SELECT TRANSFORM(value, count)
USING 'reducer'
AS whatever
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值