This is an automated email from the ASF dual-hosted git repository.

yiguolei pushed a commit to branch branch-2.1
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-2.1 by this push:
     new 96413e679d5 [branch-2.1](mtmv) Support read sync materialized view in 
async materialized view (#38462)
96413e679d5 is described below

commit 96413e679d547ee144308d663c8f9c01b32f21db
Author: Lijia Liu <[email protected]>
AuthorDate: Wed Jul 31 22:32:28 2024 +0800

    [branch-2.1](mtmv) Support read sync materialized view in async 
materialized view (#38462)
    
    ## Proposed changes
    
    pick #37396
    
    <!--Describe your changes.-->
    
    ---------
    
    Co-authored-by: liutang123 <[email protected]>
---
 .../exploration/mv/MaterializedViewUtils.java      |   9 ++
 .../data/rollup_p0/test_create_mv_and_mtmv.out     |  14 +++
 .../rollup_p0/test_create_mv_and_mtmv.groovy       | 109 +++++++++++++++++++++
 3 files changed, 132 insertions(+)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/MaterializedViewUtils.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/MaterializedViewUtils.java
index 937f90c61e0..f1ce770de2d 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/MaterializedViewUtils.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/MaterializedViewUtils.java
@@ -17,6 +17,8 @@
 
 package org.apache.doris.nereids.rules.exploration.mv;
 
+import org.apache.doris.analysis.Expr;
+import org.apache.doris.analysis.SlotRef;
 import org.apache.doris.catalog.Column;
 import org.apache.doris.catalog.MTMV;
 import org.apache.doris.catalog.PartitionType;
@@ -405,6 +407,13 @@ public class MaterializedViewUtils {
                 return null;
             }
             Column mvReferenceColumn = 
contextPartitionColumn.getColumn().get();
+            Expr definExpr = mvReferenceColumn.getDefineExpr();
+            if (definExpr instanceof SlotRef) {
+                Column referenceRollupColumn = ((SlotRef) 
definExpr).getColumn();
+                if (referenceRollupColumn != null) {
+                    mvReferenceColumn = referenceRollupColumn;
+                }
+            }
             if (partitionColumnSet.contains(mvReferenceColumn)
                     && (!mvReferenceColumn.isAllowNull() || 
relatedTable.isPartitionColumnAllowNull())) {
                 context.addTableColumn(table, mvReferenceColumn);
diff --git a/regression-test/data/rollup_p0/test_create_mv_and_mtmv.out 
b/regression-test/data/rollup_p0/test_create_mv_and_mtmv.out
new file mode 100644
index 00000000000..d4ea853addc
--- /dev/null
+++ b/regression-test/data/rollup_p0/test_create_mv_and_mtmv.out
@@ -0,0 +1,14 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !mtmv_init --
+2024-07-02     a       1
+2024-07-03     b       1
+
+-- !insert_into_partial_old_partition --
+2024-07-02     a       1
+2024-07-03     b       2
+
+-- !insert_into_partial_new_partition --
+2024-07-02     a       1
+2024-07-03     b       2
+2024-07-04     b       1
+
diff --git a/regression-test/suites/rollup_p0/test_create_mv_and_mtmv.groovy 
b/regression-test/suites/rollup_p0/test_create_mv_and_mtmv.groovy
new file mode 100644
index 00000000000..43f08c72dba
--- /dev/null
+++ b/regression-test/suites/rollup_p0/test_create_mv_and_mtmv.groovy
@@ -0,0 +1,109 @@
+import java.text.SimpleDateFormat
+
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+suite("test_create_mv_and_mtmt") {
+    def tableName = "test_create_mv_and_mtmt_advertiser_view_record"
+    def mvName = "test_create_mv_and_mtmt_advertiser_uv"
+    def mtmvName = "test_create_mv_and_mtmt_advertiser_uv_mtmv"
+    sql """
+            CREATE TABLE  ${tableName}(
+              time date not null,
+              advertiser varchar(10),
+              dt date not null,
+              channel varchar(10),
+              user_id int) 
+            DUPLICATE KEY(`time`, `advertiser`)
+              PARTITION BY RANGE (dt)(FROM ("2024-07-02") TO ("2024-07-05") 
INTERVAL 1 DAY)
+              -- AUTO PARTITION BY RANGE (date_trunc(`time`, 'day'))()
+              distributed BY hash(time) 
+              properties("replication_allocation" = "tag.location.default: 1");
+    """
+    sql """ insert into ${tableName} values("2024-07-02",'a', "2024-07-02", 
'a',1); """
+    sql """ insert into ${tableName} values("2024-07-03",'b', "2024-07-03", 
'b',1); """
+
+    createMV("""
+        CREATE materialized VIEW ${mvName} AS
+        SELECT advertiser,
+               channel,
+               dt,
+               bitmap_union(to_bitmap(user_id))
+        FROM ${tableName}
+        GROUP BY advertiser,
+                 channel,
+                 dt;
+
+    """)
+    explain {
+        sql("""
+                    SELECT dt,advertiser,
+                          count(DISTINCT user_id)
+                    FROM ${tableName}
+                    GROUP BY dt,advertiser""")
+        contains "(${mvName})"
+    }
+    def refreshTime = System.currentTimeMillis() / 1000L
+    sql """
+            CREATE MATERIALIZED VIEW ${mtmvName}
+            BUILD IMMEDIATE REFRESH AUTO ON MANUAL
+            partition by(dt)
+            DISTRIBUTED BY RANDOM BUCKETS 1
+            PROPERTIES ('replication_num' = '1') 
+            AS 
+            select dt, advertiser, count(distinct user_id)
+                from ${tableName}
+                group by dt, advertiser;
+    """
+    def wait_mtmv_refresh_finish = { refreshMode->
+        for (int loop = 0; loop < 300; loop++) {
+            Thread.sleep(1200)
+            boolean finished = true;
+            def result = sql """
+select * from tasks('type'='mv') 
+where MvName='${mtmvName}' 
+AND Status = 'SUCCESS' 
+AND CreateTime >= from_unixtime(${refreshTime}) 
+AND RefreshMode = '${refreshMode}';"""
+            finished = (result.size() == 1)
+            if (finished) {
+                def sqlResult = result[0]
+                log.info("refresh result: ${sqlResult}")
+                return;
+            }
+        }
+        throw new Exception("Wait mtmv ${mtmvName} finish timeout.")
+    }
+    wait_mtmv_refresh_finish("COMPLETE")
+    qt_mtmv_init """ SELECT * FROM ${mtmvName} ORDER BY dt, advertiser"""
+
+    sql """INSERT INTO ${tableName} VALUES("2024-07-03",'b', "2024-07-03", 
'b',2);"""
+    refreshTime = System.currentTimeMillis() / 1000L
+    sql """REFRESH MATERIALIZED VIEW ${mtmvName} AUTO;"""
+    wait_mtmv_refresh_finish("PARTIAL")
+    qt_insert_into_partial_old_partition """ SELECT * FROM ${mtmvName} ORDER 
BY dt, advertiser"""
+
+    sql """INSERT INTO ${tableName} VALUES("2024-07-04",'b', "2024-07-04", 
'a',1);"""
+    refreshTime = System.currentTimeMillis() / 1000L
+    sql """REFRESH MATERIALIZED VIEW ${mtmvName} AUTO;"""
+    wait_mtmv_refresh_finish("PARTIAL")
+    qt_insert_into_partial_new_partition """ SELECT * FROM ${mtmvName} ORDER 
BY dt, advertiser"""
+
+    sql """ DROP TABLE IF EXISTS ${tableName} """
+    sql """ DROP MATERIALIZED VIEW ${mtmvName} """
+
+}


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to