hive排序:order by、distribute by 、s

2020-01-16  本文已影响0人  emm_simon

[参考link]

order by
order by 只有一个reduce负责对所有的数据进行排序,若大数据量,则需要较长的时间。
建议在小的数据集中使用order by 进行排序。

order by 可以通过设置hive.mapred.mode参数控制执行方式,若选择strict,则order by 则需要指定limit(若有分区还有指定哪个分区) ;若为nostrict,则与关系型数据库差不多。

sort by
sort by 基本上不受hive.mapred.mode影响,可以通过mapred.reduce.task 指定reduce个数,查询后的数据被分发到相关的reduce中。

sort by 的数据在进入reduce前就完成排序,如果要使用sort by 是行排序,并且设置map.reduce.tasks>1,则sort by 才能保证每个reducer输出有序,不能保证全局数据有序。

distribute by
distribute by 采集hash算法,在map端将查询的结果中hash值相同的结果分发到对应的reduce文件中。

distribute by 可以使用length方法会根据string类型的长度划分到不同的reduce中,最终输出到不同的文件中。 length 是内建函数,也可以指定其他的函数或这使用自定义函数。

cluster by
cluster by 除了distribute by 的功能外,还会对该字段进行排序,所以cluster by = distribute by +sort by 。

上一篇下一篇

猜你喜欢

热点阅读