整理hive中遇到的几种排序的函数 特性、区别记上一笔
hive的排序
hive的排序有四种: order by ,sort by,distribute by,cluster by
order by
order by 是最常用的一种排序,全局排序,所有的数据会在一个reducer上面进行排序,所以一般使用这个函数进行排序的时候速度较慢。需要指出来的是,在strict模式下,order by 后面是必须加上limit 进行限制的。
sort by
sort by 是在进去reducer之前进行的排序,并不是全局排序。只能保证在进入同一个reducer里面的数据是有序的。有别于order by ,sort by可以指定reducer的个数,然后再对reducer里面的数据再排序,也可以得到全局的排序结果。
distribute by
distribute by 一般是配合sort by 使用的。distribute 是控制在map端的数据拆分到那个reducer去进行聚合。在某些情况下,需要控制某行记录大某个reducer上。
一般两者结合使用的场景如下:
- 小文件很多
- map文件大小不均
- 文件内容很大
- reduce接受的文件大小不均
cluster by
cluster除了具备distribute by的功能之外还具有sort by的功能;
局限性就是:只能进行倒序排序