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的个数小于分区数则会报错)
说明:
- 类似于mr中的分区,要用多个reducer处理,最终输出多个文件结果
- 当分区字段和排序字段不同的时候使用,需和sort by结合
- cluster by
当ditribute by ...sort by的字段是同一个字段时,可以用cluster by 代替。
但是cluster by的排序只支持倒序,不能指定asc或desc。
hive的 order by & distribute by & cluter by的更多相关文章
- [转]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 ...
- Hive中order by,sort by,distribute by,cluster by的区别
一:order by order by会对输入做全局排序,因此只有一个Reducer(多个Reducer无法保证全局有序),然而只有一个Reducer,会导致当输入规模较大时,消耗较长的计算时间.关于 ...
- hive中order by、distribute by、sort by和cluster by的区别和联系
hive中order by.distribute by.sort by和cluster by的区别和联系 order by order by 会对数据进行全局排序,和oracle和mysql等数据库中 ...
- hive中order by,sort by, distribute by, cluster by作用以及用法
1. order by Hive中的order by跟传统的sql语言中的order by作用是一样的,会对查询的结果做一次全局排序,所以说,只有hive的sql中制定了order by所有的 ...
- hive 排序 order by sort by distribute by cluster by
order by: order by是全局排序,受hive.mapred.mode的影响. 使用orderby有一些限制: 1.在严格模式下(hive.mapred.mod ...
- [转载]hive中order by,sort by, distribute by, cluster by作用以及用法
1. order by Hive中的order by跟传统的sql语言中的order by作用是一样的,会对查询的结果做一次全局排序,所以说,只有hive的sql中制定了order by所有的 ...
- hive中order by,sort by, distribute by, cluster by的用法
1.order by hive中的order by 和传统sql中的order by 一样,对数据做全局排序,加上排序,会新启动一个job进行排序,会把所有数据放到同一个reduce中进行处理,不管数 ...
- Hive之Order,Sort,Cluster and Distribute By
测试数据 create table sort_test( id int, name string ) row format delimited fields terminated by '\t' li ...
- hive中order by ,sort by ,distribute by, cluster by 的区别(**很详细**)
hive 查询语法 select [all | distinct] select_ condition, select_ condition from table_name a [join table ...
随机推荐
- The 10 Best Choices On The Market Review 2018
Looking to buy a scan tool or considering one of Autel Scanner impressive product line?. The company ...
- 洛谷1066 2^k进制数
原题链接 大力猜结论竟然猜对了.. 对于一对\(k,w\),我们可以把\(w\)位划分成\(k\)位一段的形式,每一段就是转换成十进制后的一位,这个从题面的解释中应该可以理解. 先不考虑可能多出(即剩 ...
- imaplib.error: command: SEARCH => got more than 10000 bytes
imaplib.error: command: SEARCH => got more than 10000 bytes 使用IMAPLIB进行标记邮件状态的时候,在 typ,data=M.sea ...
- Delphi各种Socket组件的模式和模型
Delphi各种Socket组件的模式和模型 Delphi的大多数书籍里面都没有提到delphi的各种socket通信组件的模式和模型,有的书只讲解了windows的socket模式和模型,并没有归纳 ...
- 如何查看api项目接口
http://www.api.com/Api/Page/index/?format_type=json&api_cate=cms&ma=8026
- Java中 i++ 是线程安全的么?为什么?
问题 在 int i = 0; i = i++; 语句中,i = i++是线程安全的么?如果不安全,请说明上面操作在JVM中的执行过程,为什么不安全?说出JDK中哪个类能达到以上的效果,并且是线程安全 ...
- Python之路(第二十七篇) 面向对象进阶:内置方法、描述符
一.__call__ 对象后面加括号,触发执行类下面的__call__方法. 创建对象时,对象 = 类名() :而对于 __call__ 方法的执行是由对象后加括号触发的,即:对象() 或者 类()( ...
- Python之路(第三篇):Python基本数据类型字符串(二)
一.基本数据类型1.字符串 str字符串方法介绍(二)a --expandtabs( ) expandtabs( ) 把字符串中的 tab 符号('\t')转为空格参数默认为8,注意字符串原有的空格也 ...
- android 4.0 webview 无法播放视频
Android4.0+webview中不能播放网页视频解决方法: 1.修改AndroidManifest.xml文件 在application中添加如下属性 android:hardwareAccel ...
- IOS初级:app的图标
1,首先准备6张png图,分辨率一定要正确,不然报错(The app icon set named "AppIcon" did not have any applicable co ...