zoukankan      html  css  js  c++  java
  • 小记--------hive 4大排序案例

    1.order by  order by和其他sql一样对查询结果集执行一个全局排序,也就是说会有一个所有的数据都通过一个reducer进行处理的过程会消耗大量时间来执行
    Ex: select * from renter_info order by create_time desc ; 
     
    2.sort by  其只会对每个reducer中对数据进行排序,也就是执行一个局部排序过程。可以保证每个reducer的输出数据都是有序的(但不是全局有序),这样可以提供后面进行的全局排序的效率
    Ex: select * from renter_info sort by create_time desc;
     
    上面两个查询看上去几乎一样,不过如果使用的reducer的个数大于1的话,那么输出结果的排序就不一样了。
     
    3.distribute by distribute by是控制map的输出在reducer中如何划分的。默认情况下,MapReduce计算框架会一句map输入的键计算相应的哈希值,然后按照得到的哈希值将键-值对均匀分发到多个reducer中去。
    ex: 假设我们将具有相同班级的数据一起处理,使用distribute by 将相同班级的数据分发到同一个reducer中,然后使用sort by对每个班级的同学进行排序。
    select class_id, student_id, score from className distribute by class_id sort by score desc;
    distribute by和group by在其控制着reducer是如何接受一行行数据进行处理方面是类型的。
    注意:hive要求distribute by语句要写在sort by语句之前。
     
    4.cluster by :如果distribute by和sort by中使用的列完全一致(数量、列名),并且采用的是升序排序方式,那么cluster by 就等价于前面的2个语句,相当于是前面2个句子的一个简写方式。
    ex:select * from tableName cluster by Id;
    注意:使用 distribute by …sort by或者 cluster by 会剥夺sort by 的并行性。但是这样可以实现输出文件的数据是全局排序的。 
  • 相关阅读:
    JDK内置工具使用(jps、jstack、jmap、jstat)
    解决mybatis嵌套查询使用PageHelper分页不准确
    MySQL变量的使用
    java lambda求和最值
    解决ROS中PLUGINLIB_DECLARE_CLASS错误
    由crt和key文件生成keystore文件
    转载从java进程里dump出类的class文件的小工具--dumpclass
    oracle数据库创建实例
    广告 Spring Boot整合Jasypt增强应用安全
    PostgreSQL10基础(4)插件安装(转载)
  • 原文地址:https://www.cnblogs.com/yzqyxq/p/14195131.html
Copyright © 2011-2022 走看看