hive order by 与SQL中的order by一致,都是做全局排序。order by的排序是做全局排序,只会有一个reducer进行排序,多个reducer无法保证全局有序,这样导致大数据量时,reducer排序压力大,运算慢,可能造成内存溢出危险。
sort by 与order by的不同之处在于sort by限定在单机范围内进行排序。且数据能够被分发到多个reducer中处理,现假设有2个reducer处理排序,排序下面的数据 12 13 12 14,12和 13分配给reducer 1,12和14分配给reducer2 则,order by 和sort by的结果会是 12 12 13 14,12 13 12 14。这样12这个值就变得有点多余,这时候与distribute by结合的话,将会将所有12的值发配到一台机器上排序,结果就会变为 12 12 13 14。在不追求全局排序的情况下,使用sort by和distribute by可以有效降低单机排序压力,使得排序效率提高。