• 小记--------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 的并行性。但是这样可以实现输出文件的数据是全局排序的。 
  • 相关阅读:
    Oracle 日期总结
    JavaScript 获取文件名,后缀名
    JavaScript Array pop(),shift()函数
    JavaScript Array splice函数
    Oracle 创建表空间、临时表空间、创建用户并指定表空间、授权,删除用户及表空间
    eclipse debug调试java程序的九个技巧
    Oracle dos连接数据库基本操作
    Oracle 隐式游标 存储过程
    Oracle 修改表名
    Oracle 时间 MM-dd形式转换
  • 原文地址:https://www.cnblogs.com/yzqyxq/p/14195131.html
Copyright © 2020-2023  润新知