Presto 之 explain and explain analyze的实现

一. 前言

      本文主要探索在Presto中Explain功能是如何实现的。在Presto中,Explain用法有两种,一种是单纯的explain,此场景只会显示经过RBO优化后的执行计划,但是查询并不会真正地执行。第二种是explain analyze,此场景会真正执行查询,而且打印出来的执行计划是真正运行的执行计划。不仅如此,explain analyze还包含各个stage的时间等,信息比单独的explain丰富。

二. Explain

        在Presto中,单独的explain会通过生成常量算子Value Operator来实现不执行Query只打印执行计划树的功能的。如下为其一个样例:

       将explain编译成ValueNode的实现在ExplainRewrite::visitExplain中完成的,如下为其核心的代码调用流程:

     ExplainRewrite::visitExplain

           getQueryPlan

                  singleValueQuery(plan) // plan为value值

                       Relation values = values(plan)  // 编译成常量,plan为value的输出 

三. Explain  Analyze

       与explain相比,explain analyze不仅会打印计划执行树,还会真实执行SQL和打印执行过程中的stage拆分等信息,如修所示:

     explain analyze在执行计划的过程中,计划执行树并不是生产常量Value的形式,而是生成了ExplainAnalyzeNode + queryPlan的形式,如下所示:

        也就是说,地下的query会真正地执行,并且将执行结果输送到ExplainAnalyzeOperator中,但是ExplainAnalyzeOperator会忽略上游传输过来的数据,而是会一直等上游执行完毕后,再根据queryInfo组装成DistributedPlan返回给下游的Operator,实现了既执行query,又只返回执行计划树的功能。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值