方解石的ConverterRule和RelOptRule有什么区别?

时间:2019-05-21 08:46:15

标签: apache-calcite

我正在学习方解石,但被ConverterRule和RelOptRule弄糊涂了。

我已经知道RelOptRule是将表达式转换为另一个表达式的规则,而RelOptRule由RelOptPlanner使用。

但是我已经在ConverterRule的Java文档

中看到了
/**
 * Abstract base class for a rule which converts from one calling convention to
 * another without changing semantics.
 */

ConverterRule和RelOptRule有什么区别?我应该如何使用它们?

1 个答案:

答案 0 :(得分:0)

ConverterRuleRelOptRule类的子类。这两个都是计划者用来转换关系代数表达式的规则。 ConverterRule会执行您引用的Javadoc所声明的内容,并在调用约定之间进行转换。例如,它用于通过分配特定的调用约定来实际执行逻辑表达式,该调用约定指示哪个系统将实际执行查询。

规则除了转换约定外还可以做很多其他事情。例如,规则可以决定交换FilterProject节点的顺序。实际上,规则所要做的就是匹配关系代数表达式的子树并将其替换为其他子树。