企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
**1. `sort by` 特点**: (1)<mark>只保证局部有序,全局不一定有序</mark>,因为`sort by`是对每个mapreduce内部进行排序,而且数据在进入reducer前已完成排序。 (2)使用`sort by`进行排序,并且设置`mapred.reduce.tasks > 1`,则`sort by`只保证每个reducer的输出有序,不保证全局有序。 (3)`sort by` 不受`hive.mapred.mode` 是否为 `strict ,nostrict` 的影响。 (4)`sort by` 的数据只能保证在同一 reduce 中的数据可以按指定字段排序。 使用 sort by 你可以指定执行的reduce个数( `set mapred.reduce.tasks=<number>`),对输出的数据再执行归并排序,即可以得到全部结果。 <br/> 注意:可以用 `limit` 子句大大减少数据量。使用 `limit n` 后,传输到 reduce 端(单机)的数据记录数就减少到 `$ n*(map个数) $`,否则可能由于数据过大可能出不了结果。 **2. `sort by`使用示例** ```sql -- 设置 reduce 个数,如果设置为1则sort by等同与order by 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 | +--------------------------+--+ -- 根据部门编号降序查看员工信息 select * from emp sort by empno desc; +------------+------------+------------+----------+---------------+----------+-----------+-------------+--+ | emp.empno | emp.ename | emp.job | emp.mgr | emp.hiredate | emp.sal | emp.comm | emp.deptno | +------------+------------+------------+----------+---------------+----------+-----------+-------------+--+ | 7844 | TURNER | SALESMAN | 7698 | 1981-9-8 | 1500.0 | 0.0 | 30 | | 7839 | KING | PRESIDENT | NULL | 1981-11-17 | 5000.0 | NULL | 10 | | 7788 | SCOTT | ANALYST | 7566 | 1987-4-19 | 3000.0 | NULL | 20 | | 7782 | CLARK | MANAGER | 7839 | 1981-6-9 | 2450.0 | NULL | 10 | ```