This is an automated email from the ASF dual-hosted git repository. morningman pushed a commit to branch branch-1.2-lts in repository https://gitbox.apache.org/repos/asf/doris.git
commit ccbd791cf667a6bbc1462111cc4ebf78322e3381 Author: Pxl <pxl...@qq.com> AuthorDate: Thu May 25 15:30:12 2023 +0800 [Bug](materialized-view) forbid create mv/rollup on mow table (#20001) forbid create mv/rollup on mow table --- conf/asan_suppr.conf | 2 +- .../doris/alter/MaterializedViewHandler.java | 6 ++++ .../java/org/apache/doris/alter/AlterTest.java | 2 +- .../doris/nereids/rules/mv/SelectMvIndexTest.java | 2 +- .../planner/MaterializedViewFunctionTest.java | 2 +- .../test_mv_useless/mow_invalid.groovy | 40 ++++++++++++++++++++++ .../test_uniq_mv_schema_change.groovy | 4 +-- .../test_uniq_rollup_schema_change.groovy | 2 +- 8 files changed, 53 insertions(+), 7 deletions(-) diff --git a/conf/asan_suppr.conf b/conf/asan_suppr.conf index 254e6901ac..fe294d58e8 100644 --- a/conf/asan_suppr.conf +++ b/conf/asan_suppr.conf @@ -16,4 +16,4 @@ # under the License. # This is a known leak. -leak:brpc \ No newline at end of file +leak:brpc diff --git a/fe/fe-core/src/main/java/org/apache/doris/alter/MaterializedViewHandler.java b/fe/fe-core/src/main/java/org/apache/doris/alter/MaterializedViewHandler.java index 355b34f1e8..d5ce9c7a22 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/alter/MaterializedViewHandler.java +++ b/fe/fe-core/src/main/java/org/apache/doris/alter/MaterializedViewHandler.java @@ -444,6 +444,9 @@ public class MaterializedViewHandler extends AlterHandler { if (olapTable.hasMaterializedIndex(addMVClause.getMVName())) { throw new DdlException("Materialized view[" + addMVClause.getMVName() + "] already exists"); } + if (olapTable.getEnableUniqueKeyMergeOnWrite()) { + throw new DdlException("MergeOnWrite table can't create materialized view."); + } // check if mv columns are valid // a. Aggregate or Unique table: // 1. For aggregate table, mv columns with aggregate function should be same as base schema @@ -569,6 +572,9 @@ public class MaterializedViewHandler extends AlterHandler { public List<Column> checkAndPrepareMaterializedView(AddRollupClause addRollupClause, OlapTable olapTable, long baseIndexId, boolean changeStorageFormat) throws DdlException { + if (olapTable.getEnableUniqueKeyMergeOnWrite()) { + throw new DdlException("MergeOnWrite table can't create materialized view."); + } String rollupIndexName = addRollupClause.getRollupName(); List<String> rollupColumnNames = addRollupClause.getColumnNames(); if (changeStorageFormat) { diff --git a/fe/fe-core/src/test/java/org/apache/doris/alter/AlterTest.java b/fe/fe-core/src/test/java/org/apache/doris/alter/AlterTest.java index 553dfc6b6a..a5c820a2e5 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/alter/AlterTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/alter/AlterTest.java @@ -124,7 +124,7 @@ public class AlterTest { + "PARTITION BY RANGE(k1)\n" + "(\n" + " PARTITION p1 values less than('2020-02-01 00:00:00'),\n" + " PARTITION p2 values less than('2020-03-01 00:00:00')\n" + ")\n" - + "DISTRIBUTED BY HASH(k2) BUCKETS 3\n" + "PROPERTIES('replication_num' = '1');"); + + "DISTRIBUTED BY HASH(k2) BUCKETS 3\n" + "PROPERTIES('replication_num' = '1','enable_unique_key_merge_on_write' = 'false');"); createTable("create external table test.odbc_table\n" + "( `k1` bigint(20) COMMENT \"\",\n" + " `k2` datetime COMMENT \"\",\n" + " `k3` varchar(20) COMMENT \"\",\n" diff --git a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/mv/SelectMvIndexTest.java b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/mv/SelectMvIndexTest.java index a1bf9dc70e..a2631fa0bc 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/mv/SelectMvIndexTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/mv/SelectMvIndexTest.java @@ -758,7 +758,7 @@ public class SelectMvIndexTest extends BaseMaterializedIndexSelectTest implement @Test public void testUniqueTableInQuery() throws Exception { String uniqueTable = "CREATE TABLE " + TEST_TABLE_NAME + " (k1 int, k2 int, v1 int) UNIQUE KEY (k1, k2) " - + "DISTRIBUTED BY HASH(k1) BUCKETS 3 PROPERTIES ('replication_num' = '1');"; + + "DISTRIBUTED BY HASH(k1) BUCKETS 3 PROPERTIES ('replication_num' = '1','enable_unique_key_merge_on_write' = 'false');"; createTable(uniqueTable); String createK1MV = "create materialized view only_k1 as select k2 from " + TEST_TABLE_NAME + " group by " + "k2;"; diff --git a/fe/fe-core/src/test/java/org/apache/doris/planner/MaterializedViewFunctionTest.java b/fe/fe-core/src/test/java/org/apache/doris/planner/MaterializedViewFunctionTest.java index fc7fc32823..9db1b85920 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/planner/MaterializedViewFunctionTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/planner/MaterializedViewFunctionTest.java @@ -660,7 +660,7 @@ public class MaterializedViewFunctionTest { @Test public void testUniqueTableInQuery() throws Exception { String uniqueTable = "CREATE TABLE " + TEST_TABLE_NAME + " (k1 int, k2 int, v1 int) UNIQUE KEY (k1, k2) " - + "DISTRIBUTED BY HASH(k1) BUCKETS 3 PROPERTIES ('replication_num' = '1');"; + + "DISTRIBUTED BY HASH(k1) BUCKETS 3 PROPERTIES ('replication_num' = '1', 'enable_unique_key_merge_on_write' = 'false');"; dorisAssert.withTable(uniqueTable); String createK1K2MV = "create materialized view only_k1 as select k2, k1 from " + TEST_TABLE_NAME + " group by " + "k2, k1;"; diff --git a/regression-test/suites/materialized_view_p0/test_mv_useless/mow_invalid.groovy b/regression-test/suites/materialized_view_p0/test_mv_useless/mow_invalid.groovy new file mode 100644 index 0000000000..febdc259a7 --- /dev/null +++ b/regression-test/suites/materialized_view_p0/test_mv_useless/mow_invalid.groovy @@ -0,0 +1,40 @@ +// 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 ("mow_invalid") { + sql """ drop table if exists u_table; """ + + sql """ + create table u_table ( + k1 int null, + k2 int not null, + k3 bigint null, + k4 varchar(100) null + ) + unique key (k1,k2,k3) + distributed BY hash(k1) buckets 3 + properties( + "replication_num" = "1", + "enable_unique_key_merge_on_write" = "true" + ); + """ + + test { + sql "create materialized view k123p as select k1,k2+k3 from u_table;" + exception "errCode = 2," + } +} diff --git a/regression-test/suites/schema_change_p0/test_uniq_mv_schema_change.groovy b/regression-test/suites/schema_change_p0/test_uniq_mv_schema_change.groovy index cad59ed449..e2c2a20893 100644 --- a/regression-test/suites/schema_change_p0/test_uniq_mv_schema_change.groovy +++ b/regression-test/suites/schema_change_p0/test_uniq_mv_schema_change.groovy @@ -72,7 +72,7 @@ suite ("test_uniq_mv_schema_change") { `min_dwell_time` INT DEFAULT "99999" COMMENT "用户最小停留时间") UNIQUE KEY(`user_id`, `date`, `city`, `age`, `sex`) DISTRIBUTED BY HASH(`user_id`) BUCKETS 1 - PROPERTIES ( "replication_num" = "1", "light_schema_change" = "true"); + PROPERTIES ( "replication_num" = "1", "light_schema_change" = "false", 'enable_unique_key_merge_on_write' = 'false'); """ //add materialized view @@ -223,4 +223,4 @@ suite ("test_uniq_mv_schema_change") { } finally { //try_sql("DROP TABLE IF EXISTS ${tableName}") } -} \ No newline at end of file +} diff --git a/regression-test/suites/schema_change_p0/test_uniq_rollup_schema_change.groovy b/regression-test/suites/schema_change_p0/test_uniq_rollup_schema_change.groovy index ceef82590c..b547b4b049 100644 --- a/regression-test/suites/schema_change_p0/test_uniq_rollup_schema_change.groovy +++ b/regression-test/suites/schema_change_p0/test_uniq_rollup_schema_change.groovy @@ -234,4 +234,4 @@ suite ("test_uniq_rollup_schema_change") { } finally { //try_sql("DROP TABLE IF EXISTS ${tableName}") } -} \ No newline at end of file +} --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org