FlinkSQL源码解析(一)转换流程

本文详细介绍了Flink SQL的处理流程,从JavaCC生成的SQL解析器解析SQL语句成SqlNode,再到Calcite进行校验和转换为Operation。接着,Flink利用Blink Planner将Operation转为RelNode并执行优化,最后生成Transformation并转化为可执行的流计算任务。整个流程涉及SqlNode、Operation、RelNode和Transformation的转化及优化。

1、前言

1.1、JavaCC

        JavaCC(Java Compiler Compiler)是一个开源的语法分析器生成器和词法分析器生成器。JavaCC通过词法和语法描述文件来生成分析器。

        flink通过java CC生成分析器用于sql解析和校验。

如下图:在flink-table下的flink-sql-parser项目中,org.apache.flink.sql.parser.impl下的类,就是使用javacc生成的。

1.2、Calcite

        Apache Calcite是一个动态数据管理框架 ,它具备很多典型数据库管理系统的功能,如SQL解析、SQL校验、SQL查询优化等,又省略了一些功能,如不存储相关数据,也不完全包含相关处理数据等。

        flink中的sql解析、sql校验和sql优化便是依赖calcite来完成的。

        梳理一下Calcite SQL执行的几个阶段:

  1. 通过Parser解析器将传入的sql解析成一颗词法树,SqlNode作为树的节点
  2. 做词法的校验Validate,类型校验,元数据校验等等
  3. 将校验好的SqlNode树转换成对应的关系代数表达式,也是一颗树,RelNode作为节点
  4. 将RelNode关系代数表达式树,通过内置的两种优化器Volcano , Hep 优化关系代数表达式得到最优逻辑代数的一颗树,也是RelNode
  5. 最优的逻辑代数表达式(RelNode),会被转换成对应的可执行的物理执
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值