[ https://issues.apache.org/jira/browse/CALCITE-5240?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
ASF GitHub Bot updated CALCITE-5240: ------------------------------------ Labels: pull-request-available (was: ) > Enhance MaterializedViewRule so that it applies to rollup view for queries > that contain a predicate on the rollup column > ------------------------------------------------------------------------------------------------------------------------ > > Key: CALCITE-5240 > URL: https://issues.apache.org/jira/browse/CALCITE-5240 > Project: Calcite > Issue Type: Improvement > Reporter: Thomas D'Silva > Assignee: Thomas D'Silva > Priority: Major > Labels: pull-request-available > Time Spent: 10m > Remaining Estimate: 0h > > {{MaterializedViewRule}} is not applied when a view does not have a view > predicate but the query contains a predicate. For eg. for the following > materialized view > {code:java} > SELECT eventid, floor(ts to minute), count(*) as cnt > FROM events > GROUP BY eventid, floor(ts TO minute) > {code} > If we have the following query the view is not used. > {code:java} > SELECT floor(ts to minute), count(*) > FROM events > WHERE ts > timestamp'2018-01-01 00:02:30' AND ts <= timestamp'2018-01-01 > 00:05:30' > GROUP BY eventid, floor(ts TO minute) > {code} > If {{MaterializedViewRule}} is modified to automatically add the predicate > {{ts > timestamp'2018-01-01 00:03:00' AND ts < timestamp'2018-01-01 > 00:05:00'}} to the view then the following plan can be generated that uses > the union rewriting feature to query both the table and the view efficiently. > {code:java} > EnumerableAggregate(group=[{0, 1}], EXPR$2=[$SUM0($2)]) > EnumerableUnion(all=[true]) > EnumerableAggregate(group=[{0, 1}], EXPR$2=[COUNT()]) > EnumerableCalc(expr#0..1=[{inputs}], expr#2=[FLAG(MINUTE)], > expr#3=[FLOOR($t1, $t2)], expr#4=[Sarg[(2018-01-01 00:02:30..2018-01-01 > 00:03:00), [2018-01-01 00:05:00..2018-01-01 00:05:30]]], expr#5=[SEARCH($t1, > $t4)], eventid=[$t0], $f1=[$t3], $condition=[$t5]) > EnumerableTableScan(table=[[hr, events]]) > EnumerableCalc(expr#0..2=[{inputs}], expr#3=[Sarg[[2018-01-01 > 00:03:00..2018-01-01 00:05:00)]], expr#4=[SEARCH($t1, $t3)], > proj#0..2=[{exprs}], $condition=[$t4]) > EnumerableTableScan(table=[[hr, MV0]]) > {code} > The mailing list has a discussion related to this > [https://lists.apache.org/thread/c7v85fccpbobz44y1o4z7hklomrcl299] -- This message was sent by Atlassian Jira (v8.20.10#820010)