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 9b4354fcb7b [fix](mtmv) second level MTMV always refresh all partition 
by mistake… (#39167)
9b4354fcb7b is described below

commit 9b4354fcb7b0d0aeabb5a447fcba9c56fc68e3d1
Author: zhangdong <[email protected]>
AuthorDate: Sat Aug 10 18:26:56 2024 +0800

    [fix](mtmv) second level MTMV always refresh all partition by mistake… 
(#39167)
    
    pick:
    https://github.com/apache/doris/pull/38698
---
 .../apache/doris/job/extensions/mtmv/MTMVTask.java | 10 ++++---
 .../org/apache/doris/mtmv/MTMVPartitionUtil.java   |  5 ++--
 .../org/apache/doris/mtmv/MTMVRewriteUtil.java     |  2 +-
 .../main/java/org/apache/doris/mtmv/MTMVUtil.java  |  2 +-
 .../apache/doris/mtmv/MTMVPartitionUtilTest.java   |  2 +-
 .../data/mtmv_p0/test_multi_level_mtmv.out         |  6 +++++
 .../suites/mtmv_p0/test_multi_level_mtmv.groovy    | 31 +++++++++++++++++-----
 7 files changed, 43 insertions(+), 15 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/job/extensions/mtmv/MTMVTask.java 
b/fe/fe-core/src/main/java/org/apache/doris/job/extensions/mtmv/MTMVTask.java
index b50d755951f..0207301c2d2 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/job/extensions/mtmv/MTMVTask.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/job/extensions/mtmv/MTMVTask.java
@@ -196,7 +196,7 @@ public class MTMVTask extends AbstractTask {
                         .subList(start, end > needRefreshPartitions.size() ? 
needRefreshPartitions.size() : end));
                 // need get names before exec
                 Map<String, MTMVRefreshPartitionSnapshot> 
execPartitionSnapshots = MTMVPartitionUtil
-                        .generatePartitionSnapshots(mtmv, 
relation.getBaseTables(), execPartitionNames,
+                        .generatePartitionSnapshots(mtmv, 
relation.getBaseTablesOneLevel(), execPartitionNames,
                                 partitionMappings);
                 exec(ctx, execPartitionNames, tableWithPartKey);
                 completedPartitions.addAll(execPartitionNames);
@@ -288,7 +288,7 @@ public class MTMVTask extends AbstractTask {
      * @throws DdlException
      */
     private void refreshHmsTable() throws AnalysisException, DdlException {
-        for (BaseTableInfo tableInfo : relation.getBaseTables()) {
+        for (BaseTableInfo tableInfo : relation.getBaseTablesOneLevel()) {
             TableIf tableIf = MTMVUtil.getTable(tableInfo);
             if (tableIf instanceof HMSExternalTable) {
                 HMSExternalTable hmsTable = (HMSExternalTable) tableIf;
@@ -450,7 +450,8 @@ public class MTMVTask extends AbstractTask {
         // check if data is fresh
         // We need to use a newly generated relationship and cannot retrieve 
it using mtmv.getRelation()
         // to avoid rebuilding the baseTable and causing a change in the 
tableId
-        boolean fresh = MTMVPartitionUtil.isMTMVSync(mtmv, 
relation.getBaseTables(), mtmv.getExcludedTriggerTables(),
+        boolean fresh = MTMVPartitionUtil.isMTMVSync(mtmv, 
relation.getBaseTablesOneLevel(),
+                mtmv.getExcludedTriggerTables(),
                 partitionMappings);
         if (fresh) {
             return Lists.newArrayList();
@@ -461,7 +462,8 @@ public class MTMVTask extends AbstractTask {
         }
         // We need to use a newly generated relationship and cannot retrieve 
it using mtmv.getRelation()
         // to avoid rebuilding the baseTable and causing a change in the 
tableId
-        return MTMVPartitionUtil.getMTMVNeedRefreshPartitions(mtmv, 
relation.getBaseTables(), partitionMappings);
+        return MTMVPartitionUtil.getMTMVNeedRefreshPartitions(mtmv, 
relation.getBaseTablesOneLevel(),
+                partitionMappings);
     }
 
     public MTMVTaskContext getTaskContext() {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVPartitionUtil.java 
b/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVPartitionUtil.java
index 6595afb70f7..9bf0d82146d 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVPartitionUtil.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVPartitionUtil.java
@@ -201,7 +201,8 @@ public class MTMVPartitionUtil {
             return false;
         }
         try {
-            return isMTMVSync(mtmv, mtmvRelation.getBaseTables(), 
Sets.newHashSet(), mtmv.calculatePartitionMappings());
+            return isMTMVSync(mtmv, mtmvRelation.getBaseTablesOneLevel(), 
Sets.newHashSet(),
+                    mtmv.calculatePartitionMappings());
         } catch (AnalysisException e) {
             LOG.warn("isMTMVSync failed: ", e);
             return false;
@@ -254,7 +255,7 @@ public class MTMVPartitionUtil {
             Set<String> relatedPartitionNames)
             throws AnalysisException {
         List<String> res = Lists.newArrayList();
-        for (BaseTableInfo baseTableInfo : mtmv.getRelation().getBaseTables()) 
{
+        for (BaseTableInfo baseTableInfo : 
mtmv.getRelation().getBaseTablesOneLevel()) {
             TableIf table = MTMVUtil.getTable(baseTableInfo);
             if (!(table instanceof MTMVRelatedTableIf)) {
                 continue;
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVRewriteUtil.java 
b/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVRewriteUtil.java
index 3516e75427e..5392313ba62 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVRewriteUtil.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVRewriteUtil.java
@@ -71,7 +71,7 @@ public class MTMVRewriteUtil {
                     partitionMappings = mtmv.calculatePartitionMappings();
                 }
                 if (MTMVPartitionUtil.isMTMVPartitionSync(mtmv, 
partition.getName(),
-                        partitionMappings.get(partition.getName()), 
mtmvRelation.getBaseTables(),
+                        partitionMappings.get(partition.getName()), 
mtmvRelation.getBaseTablesOneLevel(),
                         Sets.newHashSet())) {
                     res.add(partition);
                 }
diff --git a/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVUtil.java 
b/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVUtil.java
index 1fd56d7b6e4..4868ef94a1b 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVUtil.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVUtil.java
@@ -85,7 +85,7 @@ public class MTMVUtil {
      * @return
      */
     public static boolean mtmvContainsExternalTable(MTMV mtmv) {
-        Set<BaseTableInfo> baseTables = mtmv.getRelation().getBaseTables();
+        Set<BaseTableInfo> baseTables = 
mtmv.getRelation().getBaseTablesOneLevel();
         for (BaseTableInfo baseTableInfo : baseTables) {
             if (baseTableInfo.getCtlId() != 
InternalCatalog.INTERNAL_CATALOG_ID) {
                 return true;
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/mtmv/MTMVPartitionUtilTest.java 
b/fe/fe-core/src/test/java/org/apache/doris/mtmv/MTMVPartitionUtilTest.java
index c125e548d06..d40e6db5d44 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/mtmv/MTMVPartitionUtilTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/mtmv/MTMVPartitionUtilTest.java
@@ -111,7 +111,7 @@ public class MTMVPartitionUtilTest {
                 minTimes = 0;
                 result = true;
 
-                relation.getBaseTables();
+                relation.getBaseTablesOneLevel();
                 minTimes = 0;
                 result = baseTables;
 
diff --git a/regression-test/data/mtmv_p0/test_multi_level_mtmv.out 
b/regression-test/data/mtmv_p0/test_multi_level_mtmv.out
index 3d8a1e1b43f..7543b21ffa7 100644
--- a/regression-test/data/mtmv_p0/test_multi_level_mtmv.out
+++ b/regression-test/data/mtmv_p0/test_multi_level_mtmv.out
@@ -5,6 +5,12 @@
 -- !mv2 --
 1      1
 
+-- !mv1_should_one_partition --
+["p_2"]
+
+-- !mv2_should_one_partition --
+["p_2"]
+
 -- !status1 --
 multi_level_mtmv1      SCHEMA_CHANGE   SUCCESS
 
diff --git a/regression-test/suites/mtmv_p0/test_multi_level_mtmv.groovy 
b/regression-test/suites/mtmv_p0/test_multi_level_mtmv.groovy
index 81d4b78a3d7..55689b74148 100644
--- a/regression-test/suites/mtmv_p0/test_multi_level_mtmv.groovy
+++ b/regression-test/suites/mtmv_p0/test_multi_level_mtmv.groovy
@@ -29,6 +29,11 @@ suite("test_multi_level_mtmv") {
             k1 int,
             k2 int
         )
+        PARTITION BY LIST(`k1`)
+        (
+            PARTITION `p1` VALUES IN ('1'),
+            PARTITION `p2` VALUES IN ('2')
+        )
         DISTRIBUTED BY HASH(k1) BUCKETS 10
         PROPERTIES (
             "replication_num" = "1"
@@ -40,34 +45,48 @@ suite("test_multi_level_mtmv") {
 
     sql """
         CREATE MATERIALIZED VIEW ${mv1}
-        BUILD DEFERRED REFRESH COMPLETE ON MANUAL
+        BUILD DEFERRED REFRESH AUTO ON MANUAL
+        partition by(k1)
         DISTRIBUTED BY RANDOM BUCKETS 2
         PROPERTIES ('replication_num' = '1') 
         AS 
         SELECT * FROM ${tableName};
     """
-    def jobName1 = getJobName("regression_test_mtmv_p0", mv1);
      sql """
         REFRESH MATERIALIZED VIEW ${mv1} AUTO
     """
-    waitingMTMVTaskFinished(jobName1)
+    waitingMTMVTaskFinishedByMvName(mv1)
     order_qt_mv1 "select * from ${mv1}"
 
     sql """
         CREATE MATERIALIZED VIEW ${mv2}
-        BUILD DEFERRED REFRESH COMPLETE ON MANUAL
+        BUILD DEFERRED REFRESH AUTO ON MANUAL
+        partition by(k1)
         DISTRIBUTED BY RANDOM BUCKETS 2
         PROPERTIES ('replication_num' = '1')
         AS
         SELECT * FROM ${mv1};
     """
-    def jobName2 = getJobName("regression_test_mtmv_p0", mv2);
      sql """
         REFRESH MATERIALIZED VIEW ${mv2} AUTO
     """
-    waitingMTMVTaskFinished(jobName2)
+    waitingMTMVTaskFinishedByMvName(mv2)
     order_qt_mv2 "select * from ${mv2}"
 
+    sql """
+            INSERT INTO ${tableName} VALUES(2,2);
+        """
+    sql """
+           REFRESH MATERIALIZED VIEW ${mv1} AUTO
+       """
+    waitingMTMVTaskFinishedByMvName(mv1)
+    order_qt_mv1_should_one_partition "select NeedRefreshPartitions from 
tasks('type'='mv') where MvName = '${mv1}' order by CreateTime desc limit 1"
+    sql """
+           REFRESH MATERIALIZED VIEW ${mv2} AUTO
+        """
+    waitingMTMVTaskFinishedByMvName(mv2)
+    order_qt_mv2_should_one_partition "select NeedRefreshPartitions from 
tasks('type'='mv') where MvName = '${mv2}' order by CreateTime desc limit 1"
+
     // drop table
     sql """
         drop table ${tableName}


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

Reply via email to