You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "Julian Hyde (JIRA)" <ji...@apache.org> on 2019/03/11 20:15:00 UTC

[jira] [Commented] (CALCITE-2912) MaterializedViewAggregateRule.pushFilterToOriginalViewPlan fails to use valid materialization given query with certain kinds of constant filters

    [ https://issues.apache.org/jira/browse/CALCITE-2912?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16789922#comment-16789922 ] 

Julian Hyde commented on CALCITE-2912:
--------------------------------------

Suppose there was a variant of {{AggregateProjectPullUpConstantsRule}} that pulled up constants but did not remove columns from the group key. Do you think that it would solve this problem?

Note that there is similar behavior in the rule already:
{quote}This rules never removes the last column, because Aggregate([]) returns 1 row even if its input is empty.
{quote}
 

> MaterializedViewAggregateRule.pushFilterToOriginalViewPlan fails to use valid materialization given query with certain kinds of constant filters
> ------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: CALCITE-2912
>                 URL: https://issues.apache.org/jira/browse/CALCITE-2912
>             Project: Calcite
>          Issue Type: Bug
>            Reporter: Steven Talbot
>            Priority: Major
>
> This seems to stem from 
> [https://github.com/apache/calcite/blob/d6fb6abd9a17b81a5d8d592860ecd5c2f20ce9b1/core/src/main/java/org/apache/calcite/rel/rules/AbstractMaterializedViewRule.java#L1735]
> {quote}.addRuleInstance(this.aggregateProjectPullUpConstantsRule)
> {quote}
> If commented out, the bug does not occur. Also, when that line is commented out, all tests in `MaterializationTest.java` pass. The following test demonstrates the issue (fails on master, passes with line commented out):
> {code:java}
> @Test public void testAggregateMaterializationWithConstantFilter() {
>   checkMaterialize(
>           "select \"deptno\", \"name\", count(*) as c\n"
>                   + "from \"depts\" group by \"name\", \"deptno\"",
>           "select \"name\", count(*) as c\n"
>                   + "from \"depts\" where \"name\" = 'a_name' group by \"name\"");
> }{code}
> From my understanding, the materialization fails to be used because `aggregateProjectPullUpConstantsRule` rewrites the Aggregate in `topNode` at [https://github.com/apache/calcite/blob/d6fb6abd9a17b81a5d8d592860ecd5c2f20ce9b1/core/src/main/java/org/apache/calcite/rel/rules/AbstractMaterializedViewRule.java#L1743] to not include the known constant "name" in its group set, rather groups on just deptno and then projects `'a_name'` as a constant. This make that aggregate no longer a superset of the query aggregate and `rewriteView` then fails to properly match the aggregates.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)