【问题标题】:What's the difference between Calcite's ConverterRule and RelOptRule?Calcite 的 ConverterRule 和 RelOptRule 有什么区别?
【发布时间】:2020-05-27 22:11:11
【问题描述】:

我正在学习方解石,但对 ConverterRule 和 RelOptRule 感到困惑。

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

但我在 ConverterRule 的 Java 文档中看到了这一点

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

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

【问题讨论】:

    标签: apache-calcite


    【解决方案1】:

    ConverterRuleRelOptRule 类的子类。这两个都是规划器用来转换关系代数表达式的规则。 ConverterRule 执行您引用的 Javadoc 所述的操作,它在调用约定之间进行转换。例如,这用于允许通过分配特定的调用约定来实际执行逻辑表达式,这表明哪个系统将实际执行查询。

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

    【讨论】:

      猜你喜欢
      • 2021-10-09
      • 2020-06-01
      • 2010-10-02
      • 2011-12-12
      • 2010-09-16
      • 2012-03-14
      • 2012-02-06
      • 2011-02-25
      • 2011-11-22
      相关资源
      最近更新 更多