首页 > 其他 > 详细

Hive中实现SELECT TOP N的方法

时间:2020-03-23 11:36:44      阅读:76      评论:0      收藏:0      [点我收藏+]

TOP N是实现最大/小N条数据。

鉴于Hive提供了limit关键字,配合排序功能就很容易实现了。

但是Hive中order by只能生成1个reduce,如果表的数据量太大,order by 就会有心无力

例如SQL:select a from t_test order by a limit 10;

控制台会输出:Number of reduce tasks determined at compile time: 1

说明启动的reduce数是编译时决定的,查看该SQL的执行计划,发现只启动1个Job

如果表数据量非常大,而我们只想取Top 10,那么这么做就非常不合理

 

这样就可以考虑sort by ,就可以解决这个问题了

select a from t_test sort by a limit 10;

控制台会输出:Number of reduce tasks not specified. Estimated from input data size: 1

说明reduce数不是编译时决定的,而是根据输入的文件大小动态决定的。

sort by可以启动多个reduce,每个reduce做局部排序,这对于sort by limit N已经够了。

从执行计划来看,sort by limit N启动了两个Job,第一个Job在每个reduce中做局部排序,分别取出Top N,然后第二个Job做全局排序,取出Top N得出想要的结果。

假设:第一个Job启动了x个reduce,第二个Job对x个reduce排好序的x * N条数据做全局排序,取Top N ,从而得到想要的结果。

这样就大大提升了select 效率。

Hive中实现SELECT TOP N的方法

原文:https://www.cnblogs.com/zbw1112/p/12550751.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!