From 5ced9cdf71b30db9089614bb0ba7cfb6c8d766b6 Mon Sep 17 00:00:00 2001 From: zhangdong <493738387@qq.com> Date: Fri, 31 May 2024 10:25:16 +0800 Subject: [PATCH 1/5] 1 --- .../trees/plans/commands/info/CreateMTMVInfo.java | 4 ++++ .../suites/mtmv_p0/test_limit_op_mtmv.groovy | 14 ++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateMTMVInfo.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateMTMVInfo.java index 6b008ba2565cab..0add620d035d95 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateMTMVInfo.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateMTMVInfo.java @@ -33,6 +33,7 @@ import org.apache.doris.catalog.View; import org.apache.doris.common.ErrorCode; import org.apache.doris.common.FeNameFormat; +import org.apache.doris.common.util.DynamicPartitionUtil; import org.apache.doris.mtmv.EnvInfo; import org.apache.doris.mtmv.MTMVPartitionInfo; import org.apache.doris.mtmv.MTMVPartitionInfo.MTMVPartitionType; @@ -178,6 +179,9 @@ public void analyze(ConnectContext ctx) { } private void analyzeProperties() { + if (DynamicPartitionUtil.checkDynamicPartitionPropertiesExist(properties)) { + throw new AnalysisException("Not support dynamic partition properties on async materialized view"); + } for (String key : MTMVPropertyUtil.mvPropertyKeys) { if (properties.containsKey(key)) { MTMVPropertyUtil.analyzeProperty(key, properties.get(key)); diff --git a/regression-test/suites/mtmv_p0/test_limit_op_mtmv.groovy b/regression-test/suites/mtmv_p0/test_limit_op_mtmv.groovy index 57104d3d481a14..f58cce44f4d0b5 100644 --- a/regression-test/suites/mtmv_p0/test_limit_op_mtmv.groovy +++ b/regression-test/suites/mtmv_p0/test_limit_op_mtmv.groovy @@ -261,6 +261,20 @@ suite("test_limit_op_mtmv") { Assert.fail(); } + sql """drop materialized view if exists ${mvName};""" + // not allow dynamic_partition + test { + sql """ + CREATE MATERIALIZED VIEW ${mvName} + BUILD DEFERRED REFRESH AUTO ON MANUAL + partition by(`k3`) + DISTRIBUTED BY RANDOM BUCKETS 2 + PROPERTIES ('replication_num' = '1','dynamic_partition.enable'='true') + AS + SELECT * FROM ${tableName}; + """ + exception "dynamic" + } sql """drop table if exists `${tableName}`""" sql """drop materialized view if exists ${mvName};""" } From 7755e1ceb8f586729e61c71e902238f6c4434a9b Mon Sep 17 00:00:00 2001 From: zhangdong <493738387@qq.com> Date: Fri, 31 May 2024 10:27:43 +0800 Subject: [PATCH 2/5] 1 --- .../java/org/apache/doris/clone/DynamicPartitionScheduler.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/fe/fe-core/src/main/java/org/apache/doris/clone/DynamicPartitionScheduler.java b/fe/fe-core/src/main/java/org/apache/doris/clone/DynamicPartitionScheduler.java index e2a700c92bcd1d..7f6f88f1d106f1 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/clone/DynamicPartitionScheduler.java +++ b/fe/fe-core/src/main/java/org/apache/doris/clone/DynamicPartitionScheduler.java @@ -32,6 +32,7 @@ import org.apache.doris.catalog.DynamicPartitionProperty; import org.apache.doris.catalog.Env; import org.apache.doris.catalog.HashDistributionInfo; +import org.apache.doris.catalog.MTMV; import org.apache.doris.catalog.OlapTable; import org.apache.doris.catalog.Partition; import org.apache.doris.catalog.PartitionItem; @@ -505,6 +506,7 @@ private void executeDynamicPartition(Collection> dynamicPartiti olapTable = (OlapTable) db.getTableNullable(tableId); // Only OlapTable has DynamicPartitionProperty if (olapTable == null + || olapTable instanceof MTMV || !olapTable.dynamicPartitionExists() || !olapTable.getTableProperty().getDynamicPartitionProperty().getEnable()) { iterator.remove(); From 31f9be795aa78024445c5172ec4d1c2b53a68027 Mon Sep 17 00:00:00 2001 From: zhangdong <493738387@qq.com> Date: Fri, 31 May 2024 10:39:00 +0800 Subject: [PATCH 3/5] 1 --- regression-test/suites/mtmv_p0/test_build_mtmv.groovy | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/regression-test/suites/mtmv_p0/test_build_mtmv.groovy b/regression-test/suites/mtmv_p0/test_build_mtmv.groovy index 226e05cf02fea2..8614272a7a78e1 100644 --- a/regression-test/suites/mtmv_p0/test_build_mtmv.groovy +++ b/regression-test/suites/mtmv_p0/test_build_mtmv.groovy @@ -88,10 +88,16 @@ suite("test_build_mtmv") { logger.info("showCreateTableResult: " + showCreateTableResult.toString()) assertTrue(showCreateTableResult.toString().contains("CREATE MATERIALIZED VIEW `multi_mv_test_create_mtmv` (\n `aa` BIGINT NULL COMMENT 'aaa',\n `bb` VARCHAR(20) NULL\n) ENGINE=MATERIALIZED_VIEW\nCOMMENT 'comment1'\nDISTRIBUTED BY RANDOM BUCKETS 2\nPROPERTIES")) + // desc def descTableAllResult = sql """desc ${mvName} all""" logger.info("descTableAllResult: " + descTableAllResult.toString()) assertTrue(descTableAllResult.toString().contains("${mvName}")) + // show data + def showDataResult = sql """show data""" + logger.info("showDataResult: " + showDataResult.toString()) + assertTrue(showDataResult.toString().contains("${mvName}")) + // if not exist try { sql """ From 76e387b2c931a9ab2b74088b2c5bf3587c38d41d Mon Sep 17 00:00:00 2001 From: zhangdong <493738387@qq.com> Date: Fri, 31 May 2024 10:55:38 +0800 Subject: [PATCH 4/5] 1 --- .../analysis/ModifyTablePropertiesClause.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/ModifyTablePropertiesClause.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/ModifyTablePropertiesClause.java index b6ef97815bc67f..fd85ad0978e32f 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/ModifyTablePropertiesClause.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/ModifyTablePropertiesClause.java @@ -18,7 +18,10 @@ package org.apache.doris.analysis; import org.apache.doris.alter.AlterOpType; +import org.apache.doris.catalog.Env; +import org.apache.doris.catalog.MTMV; import org.apache.doris.catalog.ReplicaAllocation; +import org.apache.doris.catalog.Table; import org.apache.doris.catalog.TableProperty; import org.apache.doris.common.AnalysisException; import org.apache.doris.common.util.DynamicPartitionUtil; @@ -316,6 +319,20 @@ public void analyze(Analyzer analyzer) throws AnalysisException { } else { throw new AnalysisException("Unknown table property: " + properties.keySet()); } + analyzeForMTMV(); + } + + private void analyzeForMTMV() throws AnalysisException { + if (tableName != null) { + Table table = Env.getCurrentInternalCatalog().getDbOrAnalysisException(tableName.getDb()) + .getTableOrAnalysisException(tableName.getTbl()); + if (!(table instanceof MTMV)) { + return; + } + if (DynamicPartitionUtil.checkDynamicPartitionPropertiesExist(properties)) { + throw new AnalysisException("Not support dynamic partition properties on async materialized view"); + } + } } @Override From a3e78fc1488997aac8ffba32a6034ae45d141fd4 Mon Sep 17 00:00:00 2001 From: zhangdong <493738387@qq.com> Date: Fri, 31 May 2024 11:02:35 +0800 Subject: [PATCH 5/5] 1 --- regression-test/suites/mtmv_p0/test_limit_op_mtmv.groovy | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/regression-test/suites/mtmv_p0/test_limit_op_mtmv.groovy b/regression-test/suites/mtmv_p0/test_limit_op_mtmv.groovy index f58cce44f4d0b5..46c763a04a406a 100644 --- a/regression-test/suites/mtmv_p0/test_limit_op_mtmv.groovy +++ b/regression-test/suites/mtmv_p0/test_limit_op_mtmv.groovy @@ -261,9 +261,13 @@ suite("test_limit_op_mtmv") { Assert.fail(); } + // not allow dynamic_partition + test { + sql """ALTER TABLE ${mvName} set ("dynamic_partition.enable" = "true")""" + exception "dynamic" + } sql """drop materialized view if exists ${mvName};""" - // not allow dynamic_partition - test { + test { sql """ CREATE MATERIALIZED VIEW ${mvName} BUILD DEFERRED REFRESH AUTO ON MANUAL