【问题标题】:Calcite LogicalAggregate方解石逻辑聚合
【发布时间】:2017-11-02 01:02:51
【问题描述】:

将作为HAVING 表达式一部分的AggregateCallLogicalAggregateRelRecordType 中的相应字段相关联的正确方法是什么?如果AggregateCall 不是SELECT 子句的一部分,则LogicalAggregateRelRecordType 仍然有它,但AggregateCallname 属性设置为NULLRelRecordType.getField(AggregateCall.getName()) 可以在这种情况下不使用。如果AggregateCall 是最终输出的一部分,则设置其name 并且RelRecordType.getField(AggregateCall.getName()) 返回正确的字段。

【问题讨论】:

    标签: apache-calcite


    【解决方案1】:

    使用字段序号而不是名称。

    在 Calcite RelNodes 和 RexNodes 的世界中,字段名称并不重要;它们的存在主要是为了帮助您在调试时了解字段的用途。 AggregateCalls 的名字就更不重要了;它们的存在是为了让Aggregate 可以为其字段提供合理的名称,如果它们不存在,那也没关系。

    如果您的 SELECTN 个字段(编号为 0 .. N-1)和 HAVING 子句,您可能会添加 HAVING 谓词作为字段 N,应用 Filter 关系运算符,然后应用 Project 以便仅返回字段 0 .. N-1。我很确定SqlToRelConverter 已经这样做了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-08
      • 1970-01-01
      • 2020-03-10
      • 1970-01-01
      • 1970-01-01
      • 2016-03-17
      相关资源
      最近更新 更多