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

hive sort by order by区别 sort by和order by_数据排序

             

hive sort by order by区别 sort by和order by_字段_02

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

hive sort by order by区别 sort by和order by_数据排序_03

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

hive sort by order by区别 sort by和order by_数据排序_04

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

hive sort by order by区别 sort by和order by_字段_05

    

hive sort by order by区别 sort by和order by_聚合函数_06

总结:order by是全局排序,sort by是组内排序。distribute by sort by可以结合桶表使用,给桶中的数据排序。