计划树执行是SQL处理的第五步,也称为Implementor执行实现。Calcite主要提供两种Implementor实现方式:RelImplemntor 和 SqlImplemntor。
第一种实现方式:基于 RelImplemntor 直接执行RelNode,由Calcite内置Iterator迭代实现器(EnumerableRelImplementor)实现。执行流程如下图所示,在两个阶段分别处理:
如图展示基于CodeGen生成的Java代码,示例:endWith(left, right) 函数 :
第二种实现方式:基于SqlImplemntor 将RelNode转换回SQL语句,由外部引擎执行计算。其中,RelToSqlConverter是 SqlImplemntor子类,基于Visitor模式自底向上逐层构建Result,最终将RelNode转回SqlNode。
SqlNode提供了unparse 方法,该方法能够将SqlNode语法树拼装成SQL语句。在unparse处理中,可根据不同数据源/执行引擎的SqlDialect 适配生成不同的SQL方言,实现与多种不同的数据库系统交互。例如,SparkSqlDialect 可对应生成Spark引擎SQL方言,PrestoSqlDialect 可对应生成Presto引擎SQL方言。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。