前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >flink sql源码分析一之执行流程梳理

flink sql源码分析一之执行流程梳理

作者头像
山行AI
发布2020-12-14 10:04:40
1.8K0
发布2020-12-14 10:04:40
举报
文章被收录于专栏:山行AI山行AI

前言

我们在梳理flink sql 执行流程时以sql解析、sql校验、sql转化及sql优化的顺序来展开,本篇主要是对过程的梳理,不会涉及过多的代码部分,后面会针对各环节进行逐一分析。

Parser

Validate

这里以SqlQuery操作的convert过程为例:

转换过程

上面是TableEnvironmentImpl中的translate方法入口,我们来具体分析下planner.translate方法在PlannerBase转换过程如下:

我们来看一下具体的optimize过程:

将FlinkPhysicalRel DAG转换成ExecNode DAG

代码语言:javascript
复制
@VisibleForTesting
private[flink] def translateToExecNodePlan(
                                            optimizedRelNodes: Seq[RelNode]): util.List[ExecNode[_, _]] = {
  require(optimizedRelNodes.forall(_.isInstanceOf[FlinkPhysicalRel]))
  // Rewrite same rel object to different rel objects
  // in order to get the correct dag (dag reuse is based on object not digest)
  val shuttle = new SameRelObjectShuttle()
  val relsWithoutSameObj = optimizedRelNodes.map(_.accept(shuttle))
  // reuse subplan
  val reusedPlan = SubplanReuser.reuseDuplicatedSubplan(relsWithoutSameObj, config)
  // convert FlinkPhysicalRel DAG to ExecNode DAG
  reusedPlan.map(_.asInstanceOf[ExecNode[_, _]])
}

在translateToExecNodePlan方法中将FlinkPhysicalRel DAG转换成ExecNode DAG并尝试复用重复的子计划。

ExecNode转换成Transformation

下面代码是将ExecNode列表转成Transformation列表的入口:

代码语言:javascript
复制
  override protected def translateToPlan(
      execNodes: util.List[ExecNode[_, _]]): util.List[Transformation[_]] = {
    val planner = createDummyPlanner()
    planner.overrideEnvParallelism()

    execNodes.map {
          // 将execNode转成Transformation
      case node: StreamExecNode[_] => node.translateToPlan(planner)
      case _ =>
        throw new TableException("Cannot generate DataStream due to an invalid logical plan. " +
          "This is a bug and should not happen. Please file an issue.")
    }
  }

结语

本篇主要梳理sql执行的流程中涉及到的各个步骤,针对内部调用apache calcite的api进行flink sql的优化及使用javacc 进行代码生成的部分在后续的篇幅中会逐一进行分析。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-12-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 开发架构二三事 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • Parser
  • Validate
  • 转换过程
  • 将FlinkPhysicalRel DAG转换成ExecNode DAG
  • ExecNode转换成Transformation
  • 结语
相关产品与服务
大数据
全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档