order by和sort by的区别

新年的第一天,希望远在几百公里外的她现在睡得正香

问题:

        在学习hive的时候,面对一些东西,总是模棱两可。直接切入话题,sort by和order by的联系与区别。

分析:        

        hive中的order by语句和其它的sql一样,都会对查询结果集进行全局排序,也就是说所有的数据集都会汇集到一个reduce当中去进行排序,对于大数据集,这个过程可能会消耗太过漫长的时间来执行。

        hive增加了一个可以选择的方式,那就是sort by。只会在每个reduce里面进行排序,什么意思呢?如果reduce只有一个的话,那么sort by 和 order by的功能就是一样的,都是对全局进行一个排序,如果reduce的个数多余1个的话,作用就不一样了。sort by如果有两个reuce,那么查询集会分到两个reduce里面。分别在每一个reduce里面进行局部排序,最后将局部排序后的数据汇总起来,这样可以提高全局排序的效率。

实践证明:

首先看一个数据集

        order by和sort by的区别

 

order by和sort by的区别

 

在上面的图中,就是order by的结果,因为order by只在一个reduce里面进行全局排序。

下面我们看一下只有一个reduce时的sort by。

order by和sort by的区别

 

可以看出来,在只有一个reduce的时候,sort by和order by发挥的作用是一致的。

下面来看reduce为2的情况下,sort by的结果是否还是全局排序。

  1. 首先设置reduce的个数为2
    order by和sort by的区别 

     2.在reduce个数为2的情况下的执行信息
                order by和sort by的区别

 

     3.reduce个数为2的执行结果

order by和sort by的区别

        可以看到,我们最后的结果集并不是完全有序的,是每个reduce里面的局部有序,汇总到一块。只能保证每个reduce里面的结果是局部有序的,不同的reduce的输出就可能会有重叠

        总结:关于sort by和order by,通常用的都是Order by。什么时候用sort by呢?当不想hdfs的小文加比较多的时候,我们可以用distuibuted by 和 sort by进行控制小文件的数量。

今天晚上,我会将sort by和distuibuted by的用法写给大家。

上一篇:datax的启动文体datax.py解析


下一篇:DropDownList绑定数据