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 ...
随机推荐
- TCP窗口扩大选项
TCP窗口扩大选项(TCP Window Scale Option) TCP窗口扩大选项 TCP Window Scale Option (WSopt) 窗口扩大选项用于扩大TCP通告窗口,使TCP的 ...
- JavaScript.how-to-debug-javascript
How to debug JavaScript code 1. 写一个HTML文件.例如: <!DOCTYPE html> <html> <title>Web Pa ...
- iOS.Library.Architecture
在用file查看library的architechture时有以下输出: $ file WebPWebP: Mach-O universal binary with 3 architecturesWe ...
- javascript 高级程序设计 九
JS 面向对象的程序设计思想(1)深入理解JS对象 1.js的中没有OO语言中的'类'的概念.ECMAjs中把对象定义为:‘无序属性的集合,其属性可以包含基本值,对象或函数’. 2.ECMAScrip ...
- (O)web缓存
为什么要用缓存 一般针对静态资源如CSS,JS,图片等使用缓存,原因如下: 请求更快:通过将内容缓存在本地浏览器或距离最近的缓存服务器(如CDN),在不影响网站交互的前提下可以大大加快网站加载速度. ...
- django模板语言和过滤
一:模板组成 HTML代码 + 逻辑控制代码 逻辑代码组成格式: 使用大括号来引用变量, {{ var_name }} 二: Template和Context对象 //进入该的django的项目环境 ...
- go语言练习
// main package main import ( "fmt" "runtime" "sync" ) func main() { f ...
- requestAnimationFrame 完美兼容封装
完美兼容封装: (function() { var lastTime = 0; var vendors = ['webkit', 'moz']; for(var x = 0; x < vendo ...
- 利用PHP脚本辅助MySQL数据库管理2-表主键表索引
<?php $dbi = new DbMysql; $dbi->dbh = 'mysql://root:mysql@127.0.0.1/coffeetest'; $map = array( ...
- 【NIFI】 实现数据库到数据库之间数据同步
本里需要基础知识:[NIFI] Apache NiFI 安装及简单的使用 数据同步 界面如下: 具体流程: 1.使用ExecuteSQL连接mysql数据库,通过写sql查询所需要的数据 2.nifi ...