Presto中Limit算子的处理过程

一. 前言

本文主要探究在Presto中是如何处理Limit算子的。以简单的Hive数据源查询select * from testlimit limit 2为例来探讨在Presto中Limit 2是怎么应用到TableScan的。通过本文可以了解到limit算子下推到Hive数据源的TableScan后,TableScan是如何处理的。

二.带Limit算子的计划执行树

在Presto中,Limit算子在经过RBO优化后会下推到尽可能接近数据源的位置。上边的SQL优化后,最后生成的operator的操作顺序为:

虽然从此图看上去像是TableScan将所有的数据读出来后,再经过Limit过滤,再传给下游。但是在Presto中,实现并不是这样的,因为这样会导致TableScan有相当大的资源消耗从而导致查询效率变慢。

在Presto中,采用的是pipeline的执行模式。也就是说,TableScan每扫到一个Page的数据,就立即送给下游的Limit Operation,Limit Operator操作完之后,也立即送给下游。以此同时,TableScan也会继续扫描下一个page的数据,周而复此。

三. TableScan是如何处理Limit算子的

​     下边详细描述在Presto中是上边的Limit下推到TableScan后,TableScan是如何处理的。

从上图也可以看出来,在TableScan中,不会将数据全部扫描出来才交给Limit算子,而是一个一个Page扫描,扫描的数据满足大于Limit的个数后,Limit算子就通知TableScan停止扫描了,从未减少扫描的数据量。 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值