我正在使用 Apache Calcite 来实现一个分布式 OLAP 系统,它的数据源是 RDBMS。RelNode
所以我想将树中的项目/过滤器/聚合下推到MyTableScan extends TableScan
. 在MyTableScan
,一个RelBuilder
得到推RelNode
。最后,RelBuilder
生成对源数据库的查询。同时,RelNode
应移动或修改原始树中的项目/过滤器/聚合。
据我所知,方解石不支持此功能。
当前限制:JDBC适配器目前只下推表扫描操作;所有其他处理(过滤、连接、聚合等)都在 Calcite 中进行。我们的目标是将尽可能多的处理下推到源系统,同时翻译语法、数据类型和内置函数。如果 Calcite 查询基于单个 JDBC 数据库中的表,则原则上整个查询都应该转到该数据库。如果表来自多个 JDBC 源,或者 JDBC 和非 JDBC 的混合,Calcite 将使用它可以使用的最有效的分布式查询方法。
在我看来,RelOptRule
可能是一个不错的选择。不幸的是,当我创建 new 时RelOptRule
,我无法轻松找到要删除节点的父节点。
RelOptRule
是一个不错的选择吗?任何人都有实现此功能的好主意?
谢谢。