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 2022/12/31 04:16:15 UTC
[doris] branch branch-1.2-lts updated: [fix](merge-on-write) unique key mow tables should require distribution columns be key column (#15537)
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
The following commit(s) were added to refs/heads/branch-1.2-lts by this push:
new afda226d41 [fix](merge-on-write) unique key mow tables should require distribution columns be key column (#15537)
afda226d41 is described below
commit afda226d4107ffe6ab26a854afcd5281463e7349
Author: zhannngchen <48...@users.noreply.github.com>
AuthorDate: Sat Dec 31 12:16:07 2022 +0800
[fix](merge-on-write) unique key mow tables should require distribution columns be key column (#15537)
cherry-pick #15535
---
.../java/org/apache/doris/analysis/CreateTableStmt.java | 2 +-
.../org/apache/doris/analysis/DistributionDesc.java | 2 +-
.../org/apache/doris/analysis/HashDistributionDesc.java | 17 +++++++++++------
.../apache/doris/analysis/RandomDistributionDesc.java | 2 +-
.../org/apache/doris/analysis/CreateTableStmtTest.java | 14 +++++++++++---
5 files changed, 25 insertions(+), 12 deletions(-)
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateTableStmt.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateTableStmt.java
index 2a4f3759c7..b09ea77ff3 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateTableStmt.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateTableStmt.java
@@ -435,7 +435,7 @@ public class CreateTableStmt extends DdlStmt {
if (distributionDesc == null) {
throw new AnalysisException("Create olap table should contain distribution desc");
}
- distributionDesc.analyze(columnSet, columnDefs);
+ distributionDesc.analyze(columnSet, columnDefs, keysDesc);
if (distributionDesc.type == DistributionInfo.DistributionInfoType.RANDOM) {
if (keysDesc.getKeysType() == KeysType.UNIQUE_KEYS) {
throw new AnalysisException("Create unique keys table should not contain random distribution desc");
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/DistributionDesc.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/DistributionDesc.java
index 5d5b1320af..3e755c750c 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/DistributionDesc.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/DistributionDesc.java
@@ -40,7 +40,7 @@ public class DistributionDesc implements Writable {
}
- public void analyze(Set<String> colSet, List<ColumnDef> columnDefs) throws AnalysisException {
+ public void analyze(Set<String> colSet, List<ColumnDef> columnDefs, KeysDesc keysDesc) throws AnalysisException {
throw new NotImplementedException();
}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/HashDistributionDesc.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/HashDistributionDesc.java
index 9d9f2905ba..6d14fb3844 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/HashDistributionDesc.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/HashDistributionDesc.java
@@ -17,11 +17,11 @@
package org.apache.doris.analysis;
-import org.apache.doris.catalog.AggregateType;
import org.apache.doris.catalog.Column;
import org.apache.doris.catalog.DistributionInfo;
import org.apache.doris.catalog.DistributionInfo.DistributionInfoType;
import org.apache.doris.catalog.HashDistributionInfo;
+import org.apache.doris.catalog.KeysType;
import org.apache.doris.catalog.PrimitiveType;
import org.apache.doris.common.AnalysisException;
import org.apache.doris.common.DdlException;
@@ -60,7 +60,7 @@ public class HashDistributionDesc extends DistributionDesc {
}
@Override
- public void analyze(Set<String> colSet, List<ColumnDef> columnDefs) throws AnalysisException {
+ public void analyze(Set<String> colSet, List<ColumnDef> columnDefs, KeysDesc keysDesc) throws AnalysisException {
if (numBucket <= 0) {
throw new AnalysisException("Number of hash distribution should be larger than zero.");
}
@@ -75,6 +75,15 @@ public class HashDistributionDesc extends DistributionDesc {
if (!distColSet.add(columnName)) {
throw new AnalysisException("Duplicated distribution column " + columnName);
}
+ for (ColumnDef columnDef : columnDefs) {
+ if (columnDef.getName().equalsIgnoreCase(columnName)) {
+ if (!columnDef.isKey() && (keysDesc.getKeysType() == KeysType.UNIQUE_KEYS
+ || keysDesc.getKeysType() == KeysType.AGG_KEYS)) {
+ throw new AnalysisException("Distribution column[" + columnName + "] is not key column");
+ }
+ break;
+ }
+ }
}
}
@@ -109,10 +118,6 @@ public class HashDistributionDesc extends DistributionDesc {
boolean find = false;
for (Column column : columns) {
if (column.getName().equalsIgnoreCase(colName)) {
- if (!column.isKey() && column.getAggregationType() != AggregateType.NONE) {
- throw new DdlException("Distribution column[" + colName + "] is not key column");
- }
-
if (column.getType().isScalarType(PrimitiveType.STRING)) {
throw new DdlException("String Type should not be used in distribution column["
+ column.getName() + "].");
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/RandomDistributionDesc.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/RandomDistributionDesc.java
index d32af899ed..e445aa5bdf 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/RandomDistributionDesc.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/RandomDistributionDesc.java
@@ -42,7 +42,7 @@ public class RandomDistributionDesc extends DistributionDesc {
}
@Override
- public void analyze(Set<String> colSet, List<ColumnDef> columnDefs) throws AnalysisException {
+ public void analyze(Set<String> colSet, List<ColumnDef> columnDefs, KeysDesc keysDesc) throws AnalysisException {
if (numBucket <= 0) {
throw new AnalysisException("Number of random distribution should be larger than zero.");
}
diff --git a/fe/fe-core/src/test/java/org/apache/doris/analysis/CreateTableStmtTest.java b/fe/fe-core/src/test/java/org/apache/doris/analysis/CreateTableStmtTest.java
index ec8e8d8811..1f357b2a8d 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/analysis/CreateTableStmtTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/analysis/CreateTableStmtTest.java
@@ -158,10 +158,18 @@ public class CreateTableStmtTest {
col4.setIsKey(false);
cols.add(col4);
// test merge-on-write
- CreateTableStmt stmt = new CreateTableStmt(false, false, tblName, cols, "olap",
+ CreateTableStmt stmt1 = new CreateTableStmt(false, false, tblName, cols, "olap",
new KeysDesc(KeysType.UNIQUE_KEYS, colsName), null,
- new HashDistributionDesc(10, Lists.newArrayList("col1")), properties, null, "");
- stmt.analyze(analyzer);
+ new HashDistributionDesc(10, Lists.newArrayList("col3")), properties, null, "");
+ expectedEx.expect(AnalysisException.class);
+ expectedEx.expectMessage("Distribution column[col3] is not key column");
+ stmt1.analyze(analyzer);
+
+ CreateTableStmt stmt2 = new CreateTableStmt(false, false, tblName, cols, "olap",
+ new KeysDesc(KeysType.UNIQUE_KEYS, colsName), null,
+ new HashDistributionDesc(10, Lists.newArrayList("col3")), properties, null, "");
+ stmt2.analyze(analyzer);
+
Assert.assertEquals(col3.getAggregateType(), AggregateType.NONE);
Assert.assertEquals(col4.getAggregateType(), AggregateType.NONE);
// clear
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org