Hive中如何排序

这篇文章主要为大家展示了“Hive中如何排序”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Hive中如何排序”这篇文章吧。

专业从事企业网站建设和网站设计服务,包括网站建设、域名注册虚拟主机、企业邮箱、微信公众号开发、微信支付宝小程序制作app开发定制、软件开发、等服务。公司始终通过不懈的努力和以更高的目标来要求自己,在不断完善自身管理模式和提高技术研发能力的同时,大力倡导推行新经济品牌战略,促进互联网事业的发展。

1、全局排序:order  by 

order by 子句出现在select语句的结尾;order by子句对最终的结果进行排序;默认使用升序(ASC);可以使用DESC,跟在字段名之后表示降序;
ORDER BY执行全局排序,只有一个reduce;

-- 按别名排序
select empno, ename, job, mgr, sal + nvl(comm, 0) salcomm, deptno  from emp  order by salcomm desc;
-- 多列排序
select empno, ename, job, mgr, sal + nvl(comm, 0) salcomm, deptno  from emp   order by deptno, salcomm desc;

2、每个MR内部排序:sort by

对于大规模数据而言order by效率低;在很多业务场景,我们并不需要全局有序的数据,此时可以使用sort by;sort by为每个reduce产生一个排序文件,在reduce内部进行排序,得到局部有序的结果;

-- 设置reduce个数
set mapreduce.job.reduces=2;   -- 按照工资降序查看员工信息   select * from emp sort by sal desc;
-- 将查询结果导入到文件中(按照工资降序)。生成两个输出文件,每个文件内部数据按工资降序排列
insert overwrite local directory '/home/hadoop/output/sortsal'    select * from emp sort by sal desc;

3、分区排序:distribute by

distribute by 将特定的行发送到特定的reducer中,便于后继的聚合 与 排序操作;distribute by 类似于MR中的分区操作,可以结合sort by操作,使分区数据有序;distribute by 要写在sort by之前;

-- 将数据分到3个区中,每个分区都有数据
set mapreduce.job.reduces=3;
insert overwrite local directory '/home/hadoop/output/distBy1'  select empno, ename, job, deptno, sal + nvl(comm, 0) salcomm  from emp distribute by deptno   sort by salcomm desc;

4、cluster by 

当distribute by 与 sort by是同一个字段时,可使用cluster by简化语法; cluster by 只能是升序,不能指定排序规则;-- 语法上是等价的
select * from emp distribute by deptno sort by deptno;   select * from emp cluster by deptno;

排序小结:
order by。执行全局排序,效率低。生产环境中慎用
sort by。使数据局部有序(在reduce内部有序)
distribute by。按照指定的条件将数据分组,常与sort by联用,使数据局部有序cluster by。

当distribute by 与 sort by是同一个字段时,可使用cluster by简化语法

以上是“Hive中如何排序”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!


网站栏目:Hive中如何排序
转载来源:http://csdahua.cn/article/jhhdgp.html
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流