我们应该都清楚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。

hive的 order by & distribute by & cluter by的更多相关文章

  1. [转]hive中order by,distribute by,sort by,cluster by

    转至http://my.oschina.net/repine/blog/296562 order by,distribute by,sort by,cluster by  查询使用说明 1 2 3 4 ...

  2. Hive中order by,sort by,distribute by,cluster by的区别

    一:order by order by会对输入做全局排序,因此只有一个Reducer(多个Reducer无法保证全局有序),然而只有一个Reducer,会导致当输入规模较大时,消耗较长的计算时间.关于 ...

  3. hive中order by、distribute by、sort by和cluster by的区别和联系

    hive中order by.distribute by.sort by和cluster by的区别和联系 order by order by 会对数据进行全局排序,和oracle和mysql等数据库中 ...

  4. hive中order by,sort by, distribute by, cluster by作用以及用法

    1. order by     Hive中的order by跟传统的sql语言中的order by作用是一样的,会对查询的结果做一次全局排序,所以说,只有hive的sql中制定了order by所有的 ...

  5. hive 排序 order by sort by distribute by cluster by

    order by:     order by是全局排序,受hive.mapred.mode的影响.       使用orderby有一些限制:     1.在严格模式下(hive.mapred.mod ...

  6. [转载]hive中order by,sort by, distribute by, cluster by作用以及用法

    1. order by     Hive中的order by跟传统的sql语言中的order by作用是一样的,会对查询的结果做一次全局排序,所以说,只有hive的sql中制定了order by所有的 ...

  7. hive中order by,sort by, distribute by, cluster by的用法

    1.order by hive中的order by 和传统sql中的order by 一样,对数据做全局排序,加上排序,会新启动一个job进行排序,会把所有数据放到同一个reduce中进行处理,不管数 ...

  8. Hive之Order,Sort,Cluster and Distribute By

    测试数据 create table sort_test( id int, name string ) row format delimited fields terminated by '\t' li ...

  9. hive中order by ,sort by ,distribute by, cluster by 的区别(**很详细**)

    hive 查询语法 select [all | distinct] select_ condition, select_ condition from table_name a [join table ...

随机推荐

  1. hdu 1175(BFS&DFS) 连连看

    题目在这里:http://acm.hdu.edu.cn/showproblem.php?pid=1175 大家都很熟悉的连连看,原理基本就是这个,典型的搜索.这里用的是广搜.深搜的在下面 与普通的搜索 ...

  2. gcd(欧几里得算法)

    基础 int gcd(int a,int b)   {       int r;       )       {            r=a%b;            a=b;           ...

  3. Luogu 2147 洞穴勘测 - LCT

    Solution $LCT$ 打上 $cut$ , $link$ 和 $finroot$ 即可 Code #include<cstdio> #include<cstring> ...

  4. Luogu 2216[HAOI2007]理想的正方形 - 单调队列

    Solution 二维单调队列, 这个数组套起来看得我眼瞎... Code #include<cstdio> #include<algorithm> #include<c ...

  5. netstat 查看端口命令

    查看特定端口是否启动 netstat -lnp |

  6. Jquery中$.each()与$().each()的使用与区别。

    在jquery中,遍历对象和数组,经常会用到$().each和$.each(),两个方法.两个方法是有区别的,从而这两个方法在针对不同的操作上,显示了各自的特点. $().each,对于这个方法,在d ...

  7. rsync (转载)

    rsync 编辑   rsync是类unix系统下的数据镜像备份工具——remote sync. 目录 1简介 2特性 3操作流程 ▪ 服务器端启动 ▪ 客户端同步 4安装     1简介编辑 rsy ...

  8. regexper-正则表达式检验

    https://regexper.com 例如:输入 \s.?\w{1,3}(\d(\W)(#?\d{1..4}))

  9. unity技巧

    在之前的程序编写过程中,虽然对相关的方法进行了实例化,但是在运行的时候总是会出现“未将对象引用设置到对象的实例”,出现该种问题的原因是由于在实例化后,没有对实例化进行引用赋值,所以导致相关变量无法在其 ...

  10. php 制作验证码不显示的问题

    php制作验证码的代码,这里就不多说了,网上有很多的,这里说一些可能遇到的问题. 1. 首先是检查自己的php.ini文件,是否支持gd库. 2.保证代码没有出问题. 3.检查字体文件路径是否正确. ...