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

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

原创
作者头像
Yiwenwu
修改2024-05-04 19:54:51
1640
修改2024-05-04 19:54:51
举报
文章被收录于专栏:Calcite剖析Calcite剖析

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

迭代器执行

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

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

其中,RexToLixTranslator 通常与 EnumerableRelImplementor 配合使用。EnumerableRelImplementor 负责将逻辑计划(由 RelNode 组成)转换为基于 Linq4j 的可枚举(Enumerable)计划,而 RexToLixTranslator 负责将计划中的行表达式(RexNode)转换为 Linq4j 可执行表达式。

  • RexImpTable:映射RexNode到执行实现,将行表达式算子转为 Linq4j 可执行表达式
  • SqlFunctions:定义函数Function相关的代码生成实现

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

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

SQL执行

第二种实现方式:基于SqlImplementor 将RelNode转换回SQL语句,由外部引擎执行计算。其中,RelToSqlConverter是?SqlImplementor子类,基于Visitor模式自底向上逐层构建Result,最终将RelNode转回SqlNode,基于SqlNode反解析为可执行 SQL,下推到特定数据源执行。

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

备注:Dialect是可插拔的,可通过继承SqlDialect类实现自定义Dialect扩展

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

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 迭代器执行
  • SQL执行
相关产品与服务
大数据处理套件 TBDS
腾讯大数据处理套件(Tencent Big Data Suite,TBDS)依托腾讯多年海量数据处理经验,基于云原生技术和泛 Hadoop 生态开源技术对外提供的可靠、安全、易用的大数据处理平台。 TBDS可在公有云、私有云、非云化环境,根据不同数据处理需求组合合适的存算分析组件,包括 Hive、Spark、HBase、Flink、presto、Iceberg、Alluxio 等,以快速构建企业级数据湖、数据仓库。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com