zoukankan      html  css  js  c++  java
  • 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处理,数据也是有序的。
        





  • 相关阅读:
    Spring面试题目
    20个非常有用的Java程序片段
    第一个前台页面----xflow的页面
    java中io对文件操作的简单介绍
    java的两种异常runtimeException和checkedException
    jquery的校验规则的方法
    json对象的简单介绍
    http的状态码(中英文)
    eclipse的调试方法的简单介绍
    软件测试人员需要精通的开发语言(3)--- Linux
  • 原文地址:https://www.cnblogs.com/lishouguang/p/4560604.html
Copyright © 2011-2022 走看看