You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@calcite.apache.org by "Thomas D'Silva (Jira)" <ji...@apache.org> on 2022/08/17 19:59:00 UTC
[jira] [Created] (CALCITE-5240) Enhance MaterializedViewRule so that it applies to rollup view for queries that contain a predicate on the rollup column
Thomas D'Silva created CALCITE-5240:
---------------------------------------
Summary: 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
{{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)