hive数据排序之order by、sort by、distribute by和cluster by的介绍与区别

order by

  • order by (asc|desc)类似于标准的sql
    • order by是全局排序,且只会使用一个Reducer干活。
    • 速度很慢,使用前要做好数据过滤的工作,否则就等着加班吧。
    • 支持使用case when或者表达式
      就是,order by会对所给的全部数据进行全局排序,并且只会“叫醒”一个reducer干活。所以,数据量很大时,速度就会很慢,如果必须要使用order by进行排序,请做好数据的过滤工作。

sort by

  • sort by
    • sort by是局部排序,会对每个Reducer中的数据进行排序。
    • 当Reducer的数量设置为1时,等同与order by。
      通俗讲,sort by是局部排序。相比于order by,sort by会根据数据量的大小启动一到多个reducer来干活,并且,它会在进入reduce之前为每个reducer都产生一个排序文件。这样的好处是提高了全局排序的效率。

distribute by

  • distribute by类似于标准sql中的group by
    • 确保具有匹配列值的行被分区到相同的Reducer。
    • 不会对每个Reducer的输出进行排序。
    • 通常使用在sort by 之前。
      distribute by相当于MapReduce中的partition,控制map结果的分发,将具有相同字段的map输出分发到一个reduce节点上做处理。distribute by通常与sort by一起使用,且支持distribute by分区的列与sort by排序的列不是同一个列。
      举个栗子:
      distribute by 后面的用于分区的字段department_id必须要出现在select与from之间。

cluster by

  • cluster by相当于distribute by+sort by
    • 不支持asc和desc。
    • 排序列必须出现在select column列表中。
      如果sort by 和 distribute by 中所用的列相同,可以缩写为cluster by以便同时指定两者的列。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值