zoukankan      html  css  js  c++  java
  • hive的 order by & distribute by & cluter by

    我们应该都清楚order by 的含义:

    根据某个字段对输出的数据排序,因为只有一个reducer,所以查询效率较慢。

    那么hive中,另外两个排序,distribute by和cluster by的含义是什么呢?

    • distribute by 分区排序

    直接上例子,hive中有张工资表:salary,字段是部门id--department_id,姓名--name,薪水--salary

    department_id

    name salary
    1 张三 3500
    2 李一 2800
    1 王五 5000
    2 赵六 6000

    我们想要按部门分区,再按部门中员工工资由高到低排序:

    select * from salary distribute by department_id sort by salary;

    department_id

    name salary
    1 张三 3500
    1 王五 5000
    2 李一 2800
    2 赵六 6000

    可以看到结果按部门做了分区,每个部门数据按薪水做了排序。

    观察数据的话,每个文件中存储了相同分区的数据。

    因为每个分区使用一个reducer,所以设置的reducer个数应该大于等于结果的分区数,

    不然会报错。

    补充:

    设置reducer个数的方法:

    set mapreduce.job.reduces=-1;

    设为默认值,系统分配reduce的个数。

    设置好后检查一下:

    set mapreduce.job.reduces;

    (如果reducer的个数大于分区数会产生空文件,reducer的个数小于分区数则会报错)

    说明:

    1. 类似于mr中的分区,要用多个reducer处理,最终输出多个文件结果
    2. 当分区字段和排序字段不同的时候使用,需和sort by结合
    • cluster by

    当ditribute by ...sort by的字段是同一个字段时,可以用cluster by 代替。

    但是cluster by的排序只支持倒序,不能指定asc或desc。

  • 相关阅读:
    17种正则表达式
    网页滚动条的处理
    My GIS 2012
    spring 的mvc项目启动报错:java.util.zip.ZipException
    ASP.NET读取XML文件的方法
    urlrewritingnet重写的几点
    ASP.NET 伪静态页面的实现
    URL重写组件UrlRewriter 在Windows XP下的运用
    我们搞web开发,总结一些常用功能源码
    图片二进制存取
  • 原文地址:https://www.cnblogs.com/drjava/p/10466468.html
Copyright © 2011-2022 走看看