zoukankan      html  css  js  c++  java
  • Hive 的 排序

    全排序:order by对全部所有的数据进行排序,在实现的时候是放到一个reduce中进行的,可以想象这样做效率是比较低的;

    局部排序:sort by对数据进行分组,然后在组内进行排序,每个reduce分别进行自己的排序;

    row_num()函数:row_num函数通常用over(partition by id),把后面相同id的划分为一组,对这一组内的数据来进行排列;

    distribute by:控制着在map端如何分区,按照什么字段进行分区,要注意均衡。在有些情况下,你需要控制某个特定行应该到哪个reducer,通常是为了进行后续的聚集操作。Hive的distribute by 子句可以做这件事。这里就是MR程序员经常做的,设置PARTITION类的过程,此处已经成为一种语法;
     
    sort by:每个reduce按照sort by 字段进行排序,reduce的数量按照默认的数量来进行,当然可以指定。最终可以进行归并排序得出结果。适用于数据量比较大的排序场景。在很多情况下,并不需要全局排序,此时可以换成Hive的非标准扩展sort by。Sort by为每个reducer产生一个排序文件;
     
    order by:reduce只有一个,在一个reduce中完成排序,使用于数据量小的场景。能够预期产生完全排序的结果,但是它是通过只用一个reduce来做到这点的。所以对于大规模的数据集它的效率非常低;
     
    partition by:partition by指定按照字段进行分组,能够和row_num一起使用
     

     例如

    1. // 根据年份和气温对气象数据进行排序,以确保所有具有相同年份的行最终都在一个reducer分区中  
    2.   
    3. From record2  
    4. select year, temperature  
    5. distribute by year  
    6. sort by year asc, temperature desc;  

    因此,distribute by 经常和 sort by 配合使用。
  • 相关阅读:
    Android Studio代码自己主动检測错误提示
    uva 1567
    UWP 新手教程2——怎样实现自适应用户界面
    远程服务的使用场景
    本地服务和远程服务
    本地应用调用远程服务中的方法
    混合方式开启服务
    绑定服务抽取接口
    绑定服务调用服务里的方法
    bind绑定服务的生命周期
  • 原文地址:https://www.cnblogs.com/laodageblog/p/4091964.html
Copyright © 2011-2022 走看看