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 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 28e9df38751a55..8c5f4f669c54b8 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; @@ -508,6 +509,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(); 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_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 """ 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..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,6 +261,24 @@ 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};""" + 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};""" }