一. 前言
本文主要探索在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) // 编译成常


1681

被折叠的 条评论
为什么被折叠?



