介绍
在淘宝、京东等搜索商品时,我们通常会按照 销量 进行排序,在 hive 中通过 order by 进行排序。
语法
select * from 表名 order by 列名 [asc/desc]
解释:
- order by 一般放最后面
- asc 表示升序
- desc 表示降序
例子
不加 [asc/desc],默认 是升序
select * from emp order by sal;
asc升序
select * from emp order by sal asc;
desc降序
select * from emp order by sal desc;
多个排序
select * from emp order by sal ,comm desc;
第一排序是 sal,从小到大
第二排序是 comm,从大到小(当 sal值相同 时,才有效果)
全局排序
设置 reduce 数量,然后执行 order by 排序,将其结果导出文件,由于是全局排序,所以会导出一个文件
设置reduce数量,在 beeline、dbeaver 环境下执行下面命令:
set mapreduce.job.reduces=2;
查看reduce数量:
set mapreduce.job.reduces;
执行查询:
insert overwrite local directory '/program/result_order/'
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
select ename,sal,empno from emp order by sal desc;
虽然设置 reduce的数量是2个,但是,在执行时,都只有一个 reduce,所以只生成一个文件,并且全局排序
注意
执行下面没有 order by 的查询,也只有一个文件:
insert overwrite local directory '/program/result_order/'
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
select ename,sal,empno from emp ;
总结
使用 order by 是 全局排序,只有一个 reducer 进行处理(即使设置reducer数量也不起作用),对于 大数据集,这个过程需要很长时间,一般较少使用