Flink sql的实现

本文介绍了Flink SQL的实现方式,通过Apache Calcite进行SQL解析和逻辑树生成,转化为Flink的Table,并进一步转换为DataSet的计算。Flink的FlinkPlannerImpl和LogicalRelNode是关键组件,Calcite的规则定义用于生成物理执行计划,最终通过codegen生成DataSet的执行Function代码。相比Spark SQL,Flink SQL的实现更为简洁。
摘要由CSDN通过智能技术生成

跟了下Flink Table里sql的实现,flink sql的实现比较简单,一句话概述就是:借助Apache Calcite做了sql解析、逻辑树生成的过程,得到Calcite的RelRoot类,生成flink的TableTable里的执行计划会转化成DataSet的计算,经历物理执行计划优化等步骤。

类比Spark SQL,Calcite代替了大部分Spark SQL Catalyst的工作(Catalyst还包括了Tree/Node的定义,这部分代码Flink也’借鉴’来了)。两者最终是计算一颗逻辑执行计划树,翻译成各自的DataSet(Spark 2.0引入Dataset并统一DataFrame,隐藏RDD到引擎内部这层,类似于执行层内部的物理执行节点)。

Calcite Usage

最新Flink代码里,在flink-table工程里,使用1.7版本的calcite-core

大致的执行过程如下:

  1. TableEnvironment.sql()为调用入口
  2. 类似Calcite的PlannerImpl,flink实现了个FlinkPlannerImpl,执行parse(sql)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值