order by实现的是全局排序,在hive mr引擎中将会只有1个reduce。而使用sort by会起多个reduce,只会在每个reduce中排序,如果不指定分组的话,跑出来的数据看起来是杂乱无章的,如果指定reduce个数是1,那么结果和order by是一致的,如下图,不指定的情况,两种结果对比:

order by和sort by的区别             order by和sort by的区别

order by一般配合group by使用,而group by需要配合聚合函数使用,举个例子

order by和sort by的区别

而sort by分组时需要使用distribute by,和group by类似,但是它不需要配合聚合函数使用,也就不影响原数据的函数,这点和开窗函数有点类似,如下

order by和sort by的区别

distribute by还有个简化版,当distribute by和sort by的字段相同时,可以简写为cluster by,下面两图对比

order by和sort by的区别    order by和sort by的区别

总结:order by是全局排序,sort by是组内排序。

相关文章: