多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
**1. `distribute by`特点** (1)<mark>先按`distribute by`进行分区,然后再使用`sort by`进行排序。相当于先在分区之间对分区进行排序,然后再对每个分区内的数据进行排序</mark>。 (2)Hive 要求`distribute by` 语句要写在 `sort by` 语句之前。 (3)对于 `distribute by` 进行测试,一定要分配多 reduce 进行处理,否则无法看到`distribute by` 的效果。可以根据相应列以及对应 reduce 的个数进行分发。 (4)默认是采用 hash 算法进行分区。`$ 分区id=分区字段值的 hash 码 % reduce 的个数$`。 <br/> **2. `distribute by`使用示例** ```sql -- 设置 reduce 个数 0: jdbc:hive2://hadoop101:10000> set mapreduce.job.reduces=3; -- 查看设置 reduce 个数 0: jdbc:hive2://hadoop101:10000> set mapreduce.job.reduces; +--------------------------+--+ | set | +--------------------------+--+ | mapreduce.job.reduces=3 | +--------------------------+--+ -- 先使用deptno进行distribute by分区 -- 后用empno进行sort by降序排序 select * from emp distribute by deptno sort by empno desc; +------------+------------+------------+----------+---------------+----------+-----------+-------------+--+ | emp.empno | emp.ename | emp.job | emp.mgr | emp.hiredate | emp.sal | emp.comm | emp.deptno | +------------+------------+------------+----------+---------------+----------+-----------+-------------+--+ | 7900 | JAMES | CLERK | 7698 | 1981-12-3 | 950.0 | NULL | 30 | | 7844 | TURNER | SALESMAN | 7698 | 1981-9-8 | 1500.0 | 0.0 | 30 | | 7698 | BLAKE | MANAGER | 7839 | 1981-5-1 | 2850.0 | NULL | 30 | | 7654 | MARTIN | SALESMAN | 7698 | 1981-9-28 | 1250.0 | 1400.0 | 30 | | 7521 | WARD | SALESMAN | 7698 | 1981-2-22 | 1250.0 | 500.0 | 30 | | 7499 | ALLEN | SALESMAN | 7698 | 1981-2-20 | 1600.0 | 300.0 | 30 | | 7934 | MILLER | CLERK | 7782 | 1982-1-23 | 1300.0 | NULL | 10 | | 7839 | KING | PRESIDENT | NULL | 1981-11-17 | 5000.0 | NULL | 10 | | 7782 | CLARK | MANAGER | 7839 | 1981-6-9 | 2450.0 | NULL | 10 | ```