You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by mo...@apache.org on 2023/06/03 08:34:13 UTC
[doris] 01/09: [Bug](materialized-view) forbid create mv/rollup on mow table (#20001)
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 <px...@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-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org