前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Calcite系列(十):执行流程-计划树执行

Calcite系列(十):执行流程-计划树执行

原创
作者头像
Yiwenwu
发布2024-04-23 09:58:58
1560
发布2024-04-23 09:58:58
举报
文章被收录于专栏:Calcite剖析Calcite剖析

计划树执行是SQL处理的第五步,也称为Implementor执行实现。Calcite主要提供两种Implementor实现方式:RelImplemntor 和 SqlImplemntor

迭代器执行

第一种实现方式:基于 RelImplemntor 直接执行RelNode,由Calcite内置Iterator迭代实现器(EnumerableRelImplementor)实现。执行流程如下图所示,在两个阶段分别处理:

  1. 解析阶段:如图绿色,Implement实现处理过程中,将基于 EnumerableRelImplementor 绑定RelNode,并通过LINQ4j CodeGen生成Java代码,LINQ4j 是基于LINQ扩展的Java实现,可支持表示 Calcite中所有算子和表达式
  2. 执行阶段:如图蓝色,通过迭代器模式,基于Janino动态编译Java源代码并加载成Class进行计算执行

如图展示基于CodeGen生成的Java代码,示例:endWith(left, right) 函数 :

  • 类名:Baz
  • 执行方法:
    • bind:绑定数据,维护并定义迭代执行器行为,包括:reset、moveNext、close、current,其中current定义当前数据的处理行为
    • getElementType:定义函数返回值

SQL执行

第二种实现方式:基于SqlImplemntor 将RelNode转换回SQL语句,由外部引擎执行计算。其中,RelToSqlConverter是 SqlImplemntor子类,基于Visitor模式自底向上逐层构建Result,最终将RelNode转回SqlNode。

SqlNode提供了unparse 方法,该方法能够将SqlNode语法树拼装成SQL语句。在unparse处理中,可根据不同数据源/执行引擎的SqlDialect 适配生成不同的SQL方言,实现与多种不同的数据库系统交互。例如,SparkSqlDialect 可对应生成Spark引擎SQL方言,PrestoSqlDialect 可对应生成Presto引擎SQL方言。

我正在参与2024腾讯技术创作特训营最新征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 迭代器执行
  • SQL执行
相关产品与服务
数据开发治理平台 WeData
数据开发治理平台 WeData(以下简称 WeData)是位于云端的一站式数据开发治理平台,融合了包含数据集成、数据开发、任务运维的全链路DataOps数据开发能力,以及数据地图、数据质量、数据安全等一系列数据治理和运营能力,帮助企业在数据构建和应用的过程中实现降本增效,数据价值最大化。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档