Convention:Calcite设计的核心概念,代表一类特定的数据源或执行引擎,基于Convention可生成与具体数据源或者引擎相关的执行计划。Calcite初始逻辑计划的所有树节点Convention=NONE,此时CBO代价无穷大,基于Calcite内置执行器无法直接执行。只有将所有计划树节点都转为可执行Convention才可基于Calcite执行,该转换过程可等价理解为从逻辑计划转为物理计划。
在Calcite中,内置可执行Convention如下所示,其中,EnumerableConvention 基于Linq4j生成Java代码并以Iterator迭代器执行;JdbcConvention 基于JDBC连接获取计算结果。
在SQL优化过程中,由于表存储相对固定,无法轻易的变更和移动,因此表节点TableScan只对应一种Convention类型,例如,JDBC来源的表会固定对应为 JdbcConvention;而其他代数运算符(例如,Join、Filter)可以对应多种Convention类型。在Calcite优化过程中,优化器将选择出该节点最优的Convention类型。
Convention为跨源混合查询提供统一处理方式,也可等价理解为:不同Convention的组合在一起,即表示为跨源查询。
根据下面流程图,可以直观地展示出多个跨源Convention的转换过程:
Calling Convention:指触发不同Convention的转换,不同的Convention之间基于Converter节点过渡,即基于Converter节点可标识跨源处理。
如下左图所示,三种颜色代表三种Convention,从蓝色Convention到橙色Convention 中间对应一个BlueToOrange的Converter节点;从绿色Convention到橙色Convention 中间对应一个GreenToOrange的Converter节点。
如下右图所示,分别表示单源查询和跨源查询的计划树。单源查询Converter在Root根节点上,下面所有节点的Convention相同,对应特定数据源的JdbcConvention;而跨源查询,不同的数据源都关联各自的Converter节点,跨源Join关联操作由与数据源无关的EnumerableConvention表示。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。