hive教程:对查询结果进行排序(order by 全局排序)

介绍

在淘宝、京东等搜索商品时,我们通常会按照 销量 进行排序,在 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数量也不起作用),对于 大数据集,这个过程需要很长时间,一般较少使用


原文出处:/show_1IXlTHixlyL.html