• hive中order by,sort by, distribute by, cluster by的用法


    1、order by 

         hive中的order by 和传统sql中的order by 一样,对数据做全局排序,加上排序,会新启动一个job进行排序,会把所有数据放到同一个reduce中进行处理,不管数据多少,不管文件多少,都启用一个reduce进行处理。如果指定了hive.mapred.mode=strict(默认值是nonstrict),这时就必须指定limit来限制输出条数,原因是:所有的数据都会在同一个reducer端进行,数据量大的情况下可能不能出结果,那么在这样的严格模式下,必须指定输出的条数。

      如:原始数据为

     id money name  

    2 15 d

    2 13 b

    4 13 g

    1 14 c

    1 12 a

    3 11 h

    3 14 f

    select id,sum(money) from t group by id 这条语句只用一个job就ok,

    select id,sum(money) from t group by id order by id 如果加上order by 就会多一个job进行排序操作。

    2、sort by 

    sort  by 是局部排序,会在每个reduce端做排序,每个reduce端是排序的,也就是每个reduce出来的数据是有序的,但是全部不一定有序,除非一个reduce,一般情况下可以先进行局部排序完成后,再进行全局排序,会提高不少效率。

    select id,sum(money) from t group by id sort by id;  这条语句也不会增加job,它在reduce端直接进行排序。

    3、distribute by

        distribute by 是控制map端在reduce上是如何区分的,distribute by  会把指定的值发到同一个reduce中,比如 用上面数据distribute by id 它就会把id相同的值放到一个reduce中执行,不是一个值一个reduce,而是相同的值进入到一个reduce,例如用上面数据可以进入到2个reduce,一般情况下可以sort by 结合使用,先进行分组reduce,再进行排序。

    如:select id,money,name from t distribute by id sort by id 

    4、cluster  by

        这个其实就是distribute by 和sort by 结合使用的结果。

       如:select id,money,name from t cluster by id;  

       这条语句其实和select id,money,name from t distribute by id sort by id  这条语句的结果是一样的

  • 相关阅读:
    DataTables: Cannot read property 'length' of undefined
    ssis SQL Server Integration Services
    科技爱好者周刊(第 209 期):程序员是怎样的人
    How do I remove the first characters of a specific column in a table?
    Define your Classic pipeline
    How does comparison operator works with null int?
    How to set Google Chrome custom proxy server settings independently from Internet Explorer proxy settings
    GetUniqueNodeName
    RK3399Pro 音频配置
    查看USB设备
  • 原文地址:https://www.cnblogs.com/wujin/p/6024126.html
Copyright © 2020-2023  润新知