[
https://issues.apache.org/jira/browse/CALCITE-2700?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16699445#comment-16699445
]
Julian Hyde commented on CALCITE-2700:
--------------------------------------
It is better to apply the materialized view rules as a separate phase, early in
the planning process, when there are only logical relational expressions. Also,
I would tend to use HepPlanner rather than VolcanoPlanner. I would not include
the materialized view rules in the "main" phase that uses Volcano. Then the
issue doesn't arise.
That said, your change makes sense, because it makes the rules a little less
dangerous when used by non-experts.
> MaterializedView rewrite rules are matched on physical operators.
> -----------------------------------------------------------------
>
> Key: CALCITE-2700
> URL: https://issues.apache.org/jira/browse/CALCITE-2700
> Project: Calcite
> Issue Type: Improvement
> Components: core
> Affects Versions: 1.17.0
> Reporter: Ken Wang
> Assignee: Jesus Camacho Rodriguez
> Priority: Minor
>
> Today, all the MV related rewrite rules can be applied to both logical and
> physical operators.
> This will lead to many redundant matches and make the match process not
> efficient.
> One optimization we can do is just limit the rules application to logical
> operators only.
>
> {noformat}
> 2018-11-23 12:08:14,468 [main] INFO volcano.VolcanoRuleCall:193 - call#659:
> Apply rule [MaterializedViewJoinRule(Project-Filter)] to
> [rel#101:LogicalProject.NONE.[](input=rel#99:Subset#7.NONE.[],X=+($0,
> 1),name=$2),
> rel#97:LogicalFilter.NONE.[](input=rel#44:Subset#0.ENUMERABLE.[],condition==(CAST($1):INTEGER
> NOT NULL, 10))]
> 2018-11-23 12:08:14,468 [main] INFO volcano.VolcanoRuleCall:91 - Transform
> to: rel#111 via MaterializedViewJoinRule(Project-Filter)
> 2018-11-23 12:08:14,468 [main] INFO volcano.VolcanoRuleCall:218 - call#659
> generated 1 successors: [LogicalProject#111]
> 2018-11-23 12:08:14,484 [main] INFO volcano.VolcanoRuleCall:193 - call#738:
> Apply rule [MaterializedViewJoinRule(Project-Filter)] to
> [rel#103:EnumerableProject.ENUMERABLE.[](input=rel#102:Subset#7.ENUMERABLE.[],X=+($0,
> 1),name=$2),
> rel#116:EnumerableFilter.ENUMERABLE.[](input=rel#44:Subset#0.ENUMERABLE.[],condition==(CAST($1):INTEGER
> NOT NULL, 10))]
> 2018-11-23 12:08:14,484 [main] INFO volcano.VolcanoRuleCall:91 - Transform
> to: rel#118 via MaterializedViewJoinRule(Project-Filter)
> 2018-11-23 12:08:14,484 [main] INFO volcano.VolcanoRuleCall:218 - call#738
> generated 1 successors: [LogicalProject#118]
> 2018-11-23 12:08:14,499 [main] INFO volcano.VolcanoRuleCall:193 - call#626:
> Apply rule [MaterializedViewJoinRule(Project-Filter)] to
> [rel#100:LogicalProject.NONE.[](input=rel#99:Subset#7.NONE.[],empid=$0,deptno=$1,name=$2),
>
> rel#97:LogicalFilter.NONE.[](input=rel#44:Subset#0.ENUMERABLE.[],condition==(CAST($1):INTEGER
> NOT NULL, 10))]
> 2018-11-23 12:08:14,499 [main] INFO volcano.VolcanoRuleCall:91 - Transform
> to: rel#127 via MaterializedViewJoinRule(Project-Filter)
> 2018-11-23 12:08:14,499 [main] INFO volcano.VolcanoRuleCall:218 - call#626
> generated 1 successors: [LogicalProject#127]
> 2018-11-23 12:08:14,515 [main] INFO volcano.VolcanoRuleCall:193 - call#216:
> Apply rule [MaterializedViewJoinRule(Filter)] to
> [rel#47:LogicalFilter.NONE.[](input=rel#46:Subset#1.NONE.[],condition==(CAST($1):INTEGER
> NOT NULL, 10))]
> 2018-11-23 12:08:14,515 [main] INFO volcano.VolcanoRuleCall:91 - Transform
> to: rel#134 via MaterializedViewJoinRule(Filter)
> 2018-11-23 12:08:14,515 [main] INFO volcano.VolcanoRuleCall:218 - call#216
> generated 1 successors: [LogicalProject#134]
> 2018-11-23 12:08:14,533 [main] INFO volcano.VolcanoRuleCall:193 - call#908:
> Apply rule [MaterializedViewJoinRule(Project-Filter)] to
> [rel#138:LogicalProject.NONE.[](input=rel#102:Subset#7.ENUMERABLE.[],X=+($0,
> 1),name=$2),
> rel#116:EnumerableFilter.ENUMERABLE.[](input=rel#44:Subset#0.ENUMERABLE.[],condition==(CAST($1):INTEGER
> NOT NULL, 10))]
> 2018-11-23 12:08:14,534 [main] INFO volcano.VolcanoRuleCall:91 - Transform
> to: rel#141 via MaterializedViewJoinRule(Project-Filter)
> 2018-11-23 12:08:14,534 [main] INFO volcano.VolcanoRuleCall:218 - call#908
> generated 1 successors: [LogicalProject#141]
> 2018-11-23 12:08:14,535 [main] INFO volcano.VolcanoRuleCall:193 - call#878:
> Apply rule [MaterializedViewJoinRule(Project-Filter)] to
> [rel#137:EnumerableProject.ENUMERABLE.[](input=rel#102:Subset#7.ENUMERABLE.[],empid=$0,deptno=$1,name=$2),
>
> rel#116:EnumerableFilter.ENUMERABLE.[](input=rel#44:Subset#0.ENUMERABLE.[],condition==(CAST($1):INTEGER
> NOT NULL, 10))]
> 2018-11-23 12:08:14,537 [main] INFO volcano.VolcanoRuleCall:91 - Transform
> to: rel#145 via MaterializedViewJoinRule(Project-Filter)
> 2018-11-23 12:08:14,537 [main] INFO volcano.VolcanoRuleCall:218 - call#878
> generated 1 successors: [LogicalProject#145]
> 2018-11-23 12:08:14,541 [main] INFO volcano.VolcanoRuleCall:193 - call#960:
> Apply rule [MaterializedViewJoinRule(Project-Filter)] to
> [rel#81:EnumerableProject.ENUMERABLE.[](input=rel#80:Subset#2.ENUMERABLE.[],X=+($0,
> 1),name=$2),
> rel#150:EnumerableFilter.ENUMERABLE.[](input=rel#149:Subset#1.ENUMERABLE.[],condition==(CAST($1):INTEGER
> NOT NULL, 10))]
> 2018-11-23 12:08:14,542 [main] INFO volcano.VolcanoRuleCall:91 - Transform
> to: rel#152 via MaterializedViewJoinRule(Project-Filter)
> 2018-11-23 12:08:14,543 [main] INFO volcano.VolcanoRuleCall:218 - call#960
> generated 1 successors: [LogicalProject#152]
> 2018-11-23 12:08:14,544 [main] INFO volcano.VolcanoRuleCall:193 - call#966:
> Apply rule [MaterializedViewJoinRule(Filter)] to
> [rel#150:EnumerableFilter.ENUMERABLE.[](input=rel#149:Subset#1.ENUMERABLE.[],condition==(CAST($1):INTEGER
> NOT NULL, 10))]
> 2018-11-23 12:08:14,546 [main] INFO volcano.VolcanoRuleCall:91 - Transform
> to: rel#156 via MaterializedViewJoinRule(Filter)
> 2018-11-23 12:08:14,546 [main] INFO volcano.VolcanoRuleCall:218 - call#966
> generated 1 successors: [LogicalProject#156]
> 2018-11-23 12:08:15,135 [main] INFO volcano.VolcanoRuleCall:193 - call#1881:
> Apply rule [MaterializedViewJoinRule(Project-Filter)] to
> [rel#330:LogicalProject.NONE.[](input=rel#329:Subset#2.NONE.[],X=+($0,
> 1),name=$2),
> rel#328:LogicalFilter.NONE.[](input=rel#327:Subset#1.NONE.[],condition==(CAST($1):INTEGER
> NOT NULL, 10))]
> 2018-11-23 12:08:15,136 [main] INFO volcano.VolcanoRuleCall:91 - Transform
> to: rel#364 via MaterializedViewJoinRule(Project-Filter)
> 2018-11-23 12:08:15,138 [main] INFO volcano.VolcanoRuleCall:218 - call#1881
> generated 1 successors: [LogicalProject#364]
> 2018-11-23 12:08:15,173 [main] INFO volcano.VolcanoRuleCall:193 - call#2282:
> Apply rule [MaterializedViewJoinRule(Project-Filter)] to
> [rel#382:LogicalProject.NONE.[](input=rel#380:Subset#7.NONE.[],X=+($0,
> 1),name=$2),
> rel#378:LogicalFilter.NONE.[](input=rel#325:Subset#0.ENUMERABLE.[],condition==(CAST($1):INTEGER
> NOT NULL, 10))]
> 2018-11-23 12:08:15,174 [main] INFO volcano.VolcanoRuleCall:91 - Transform
> to: rel#392 via MaterializedViewJoinRule(Project-Filter)
> 2018-11-23 12:08:15,174 [main] INFO volcano.VolcanoRuleCall:218 - call#2282
> generated 1 successors: [LogicalProject#392]
> 2018-11-23 12:08:15,206 [main] INFO volcano.VolcanoRuleCall:193 - call#2249:
> Apply rule [MaterializedViewJoinRule(Project-Filter)] to
> [rel#381:LogicalProject.NONE.[](input=rel#380:Subset#7.NONE.[],empid=$0,deptno=$1,name=$2),
>
> rel#378:LogicalFilter.NONE.[](input=rel#325:Subset#0.ENUMERABLE.[],condition==(CAST($1):INTEGER
> NOT NULL, 10))]
> 2018-11-23 12:08:15,207 [main] INFO volcano.VolcanoRuleCall:91 - Transform
> to: rel#408 via MaterializedViewJoinRule(Project-Filter)
> 2018-11-23 12:08:15,208 [main] INFO volcano.VolcanoRuleCall:218 - call#2249
> generated 1 successors: [LogicalProject#408]
> 2018-11-23 12:08:15,248 [main] INFO volcano.VolcanoRuleCall:193 - call#2531:
> Apply rule [MaterializedViewJoinRule(Project-Filter)] to
> [rel#419:LogicalProject.NONE.[](input=rel#383:Subset#7.ENUMERABLE.[],X=+($0,
> 1),name=$2),
> rel#397:EnumerableFilter.ENUMERABLE.[](input=rel#325:Subset#0.ENUMERABLE.[],condition==(CAST($1):INTEGER
> NOT NULL, 10))]
> 2018-11-23 12:08:15,250 [main] INFO volcano.VolcanoRuleCall:91 - Transform
> to: rel#422 via MaterializedViewJoinRule(Project-Filter)
> 2018-11-23 12:08:15,250 [main] INFO volcano.VolcanoRuleCall:218 - call#2531
> generated 1 successors: [LogicalProject#422]
> 2018-11-23 12:08:15,251 [main] INFO volcano.VolcanoRuleCall:193 - call#2501:
> Apply rule [MaterializedViewJoinRule(Project-Filter)] to
> [rel#418:EnumerableProject.ENUMERABLE.[](input=rel#383:Subset#7.ENUMERABLE.[],empid=$0,deptno=$1,name=$2),
>
> rel#397:EnumerableFilter.ENUMERABLE.[](input=rel#325:Subset#0.ENUMERABLE.[],condition==(CAST($1):INTEGER
> NOT NULL, 10))]
> 2018-11-23 12:08:15,252 [main] INFO volcano.VolcanoRuleCall:91 - Transform
> to: rel#426 via MaterializedViewJoinRule(Project-Filter)
> 2018-11-23 12:08:15,253 [main] INFO volcano.VolcanoRuleCall:218 - call#2501
> generated 1 successors: [LogicalProject#426]
> 2018-11-23 12:08:15,267 [main] INFO volcano.VolcanoRuleCall:193 - call#2583:
> Apply rule [MaterializedViewJoinRule(Project-Filter)] to
> [rel#362:EnumerableProject.ENUMERABLE.[](input=rel#361:Subset#2.ENUMERABLE.[],X=+($0,
> 1),name=$2),
> rel#431:EnumerableFilter.ENUMERABLE.[](input=rel#430:Subset#1.ENUMERABLE.[],condition==(CAST($1):INTEGER
> NOT NULL, 10))]
> 2018-11-23 12:08:15,269 [main] INFO volcano.VolcanoRuleCall:91 - Transform
> to: rel#433 via MaterializedViewJoinRule(Project-Filter)
> 2018-11-23 12:08:15,269 [main] INFO volcano.VolcanoRuleCall:218 - call#2583
> generated 1 successors: [LogicalProject#433]
> {noformat}
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)