• hive 排序 order by sort by distribute by cluster by


    order by:

        order by是全局排序,受hive.mapred.mode的影响。
     
        使用orderby有一些限制:
        1、在严格模式下(hive.mapred.mode=strict),orderby必须跟limit一起使用(?)。
            原因:在执行orderby时,hive使用一个reducer,如果查询结果量很大,这个reducer执行起来会很费劲,所以必须要限制查询输出结果的数量。
            limit n 之后,reducer处理的数据有n * count(map)条数据。
        
        2、在非严格模式下(默认,hive.mapred.mode=nonstrict),orderby可以不跟limit一起使用。
     
        相关设置:
        set hive.mapred.mode=strict;
        set hive.mapred.mode=nonstrict;    
     
        例子:
        select id, name from user order by name limit 10;

    sort by:

        对每个reducer里的数据进行排序,如果有多个reducer执行查询,则查询出来的数据是部分排序的。。
     
        也可以使用limit n来减少reducer处理的数据量。
     
        相关设置:
        set mapred.reduce.tasks=n;
     
        例子
        hive使用2个reducer执行查询select col1, col2 from t1 sort by col1 asc, col2 desc,则:
        一个reducer的输出结果是:
        0    5
        0    3
        3    6
        9    1
        另一个reducer的输出结果是:
        0    4
        0    3
        1    1
        1    5
        说明:对同一个reducer里的数据进行排序。

    distribute by:

        hive执行查询时,在mr的分区结果根据distributeby的字段进行分区,这样相同字段的数据由同一个reducer处理。
        
        相关设置:
        set mapred.reduce.tasks=n;
     
        例子
        某一列的数据如下:
        x1
        x2
        x3
        x4
        x1
        对这个字段distributeby后,
        reducer1里的数据是:
        x1
        x2
        x1
        reducer2里的数据是:
        x3
        x4
        说明:同一个值(x1)交由同一个reducer处理,但是数据是无序的。

    cluster by:

        clusterby是distributeby和sortby的快捷方式,根据clusterby字段进行分区并排序。
        
        例子
        某一列的数据如下:
        x1
        x2
        x3
        x4
        x1
        对这个字段distributeby后,
        reducer1里的数据是:
        x1
        x1
        x2
        reducer2里的数据是:
        x3
        x4
        说明:同一个值(x1)交由同一个reducer处理,数据也是有序的。
        

     

  • 相关阅读:
    牛客网-求和
    牛客网-删除公共字符
    牛客网-字符串中找出连续最长的数字串(好未来)
    牛客网-求数列的和(挖财)
    牛客网-树的高度(小米)
    牛客网-藏宝图(网易)
    【Python学习笔记】
    php平滑升级
    Nginx平滑升级
    linux下线刷硬盘
  • 原文地址:https://www.cnblogs.com/lishouguang/p/4560753.html
走看看 - 开发者的网上家园