From f44660db1a194c11db25d3f0a0d5c1cd2eeee2ce Mon Sep 17 00:00:00 2001 From: Xin Liao Date: Tue, 25 Jul 2023 22:05:22 +0800 Subject: [PATCH] [chore](merge-on-write) disable single replica load and compaction for mow table (#22188) --- .../doris/datasource/InternalCatalog.java | 20 +++++++++++-------- .../apache/doris/planner/OlapTableSink.java | 6 ++++++ .../test_create_table.groovy | 20 +++++++++++++++++++ 3 files changed, 38 insertions(+), 8 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/InternalCatalog.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/InternalCatalog.java index 8422758089..fd95fe37a1 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/datasource/InternalCatalog.java +++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/InternalCatalog.java @@ -1978,14 +1978,6 @@ public class InternalCatalog implements CatalogIf { // use light schema change optimization olapTable.setDisableAutoCompaction(disableAutoCompaction); - boolean enableSingleReplicaCompaction = false; - try { - enableSingleReplicaCompaction = PropertyAnalyzer.analyzeEnableSingleReplicaCompaction(properties); - } catch (AnalysisException e) { - throw new DdlException(e.getMessage()); - } - olapTable.setEnableSingleReplicaCompaction(enableSingleReplicaCompaction); - // get storage format TStorageFormat storageFormat = TStorageFormat.V2; // default is segment v2 try { @@ -2019,6 +2011,18 @@ public class InternalCatalog implements CatalogIf { } olapTable.setEnableUniqueKeyMergeOnWrite(enableUniqueKeyMergeOnWrite); + boolean enableSingleReplicaCompaction = false; + try { + enableSingleReplicaCompaction = PropertyAnalyzer.analyzeEnableSingleReplicaCompaction(properties); + } catch (AnalysisException e) { + throw new DdlException(e.getMessage()); + } + if (enableUniqueKeyMergeOnWrite && enableSingleReplicaCompaction) { + throw new DdlException(PropertyAnalyzer.PROPERTIES_ENABLE_SINGLE_REPLICA_COMPACTION + + " property is not supported for merge-on-write table"); + } + olapTable.setEnableSingleReplicaCompaction(enableSingleReplicaCompaction); + // analyze bloom filter columns Set bfColumns = null; double bfFpp = 0; diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/OlapTableSink.java b/fe/fe-core/src/main/java/org/apache/doris/planner/OlapTableSink.java index 411fb548fa..0bc30f978a 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/OlapTableSink.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/OlapTableSink.java @@ -146,6 +146,12 @@ public class OlapTableSink extends DataSink { singleReplicaLoad = false; LOG.warn("Single replica load not supported by TStorageFormat.V1. table: {}", dstTable.getName()); } + if (dstTable.getEnableUniqueKeyMergeOnWrite()) { + singleReplicaLoad = false; + if (LOG.isDebugEnabled()) { + LOG.debug("Single replica load not supported by merge-on-write table: {}", dstTable.getName()); + } + } } public void setPartialUpdateInputColumns(boolean isPartialUpdate, HashSet columns) { diff --git a/regression-test/suites/unique_with_mow_p0/test_create_table.groovy b/regression-test/suites/unique_with_mow_p0/test_create_table.groovy index 5326672db2..0336beb7c0 100644 --- a/regression-test/suites/unique_with_mow_p0/test_create_table.groovy +++ b/regression-test/suites/unique_with_mow_p0/test_create_table.groovy @@ -94,4 +94,24 @@ suite("test_create_table") { """ exception "enable_unique_key_merge_on_write property only support unique key table" } + + // unique table with enable_unique_key_merge_on_write and enable_single_replica_compaction property + test { + sql """ + CREATE TABLE `$tableName` ( + `c_custkey` int(11) NOT NULL COMMENT "", + `c_name` varchar(26) NOT NULL COMMENT "", + `c_address` varchar(41) NOT NULL COMMENT "", + `c_city` varchar(11) NOT NULL COMMENT "" + ) + UNIQUE KEY (`c_custkey`) + DISTRIBUTED BY HASH(`c_custkey`) BUCKETS 1 + PROPERTIES ( + "replication_num" = "1", + "enable_unique_key_merge_on_write" = "true", + "enable_single_replica_compaction" = "true" + ); + """ + exception "enable_single_replica_compaction property is not supported for merge-on-write table" + } }