From a50b334803b9258c4b33038a3f6bb2f23f3a3ac8 Mon Sep 17 00:00:00 2001 From: Mingyu Chen Date: Sat, 31 Dec 2022 13:10:39 +0800 Subject: [PATCH] [fix](create-table) wrong judgement about partition column type (#15542) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The following stmt should be success, but return error: `complex type cannt be partition column:ARRAY` ``` create table test_array( task_insert_time BIGINT NOT NULL DEFAULT "0" COMMENT "" , task_project ARRAY DEFAULT NULL COMMENT "" , route_key DATEV2 NOT NULL COMMENT "range分区键" ) DUPLICATE KEY(`task_insert_time`) COMMENT "" PARTITION BY RANGE(route_key) (PARTITION `p202209` VALUES LESS THAN ("2022-10-01"), PARTITION `p202210` VALUES LESS THAN ("2022-11-01"), PARTITION `p202211` VALUES LESS THAN ("2022-12-01")) DISTRIBUTED BY HASH(`task_insert_time` ) BUCKETS 32 PROPERTIES ( "replication_num" = "1", "light_schema_change" = "true" ); ``` This PR fix this --- .../apache/doris/analysis/PartitionDesc.java | 4 ++ .../doris/analysis/RangePartitionDesc.java | 8 ++-- .../apache/doris/catalog/CreateTableTest.java | 41 +++++++++++++++++++ 3 files changed, 49 insertions(+), 4 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/PartitionDesc.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/PartitionDesc.java index 8bb42657ae6fa8..86a4782cc22129 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/PartitionDesc.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/PartitionDesc.java @@ -106,6 +106,10 @@ public void analyze(List columnDefs, Map otherPropert throw new AnalysisException("String Type should not be used in partition column[" + columnDef.getName() + "]."); } + if (columnDef.getType().isComplexType()) { + throw new AnalysisException("Complex type column can't be partition column: " + + columnDef.getType().toString()); + } if (!ConnectContext.get().getSessionVariable().isAllowPartitionColumnNullable() && columnDef.isAllowNull()) { throw new AnalysisException("The partition column must be NOT NULL"); diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/RangePartitionDesc.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/RangePartitionDesc.java index 3d9cae60e5bfe1..cc18df6299e418 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/RangePartitionDesc.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/RangePartitionDesc.java @@ -84,6 +84,10 @@ public PartitionInfo toPartitionInfo(List schema, Map part boolean find = false; for (Column column : schema) { if (column.getName().equalsIgnoreCase(colName)) { + if (column.getType().isComplexType()) { + throw new DdlException("Complex type column can't be partition column: " + + column.getType().toString()); + } try { RangePartitionInfo.checkPartitionColumn(column); } catch (AnalysisException e) { @@ -94,10 +98,6 @@ public PartitionInfo toPartitionInfo(List schema, Map part find = true; break; } - if (column.getType().isComplexType()) { - throw new DdlException("Complex type column can't be partition column: " - + column.getType().toString()); - } } if (!find) { throw new DdlException("Partition column[" + colName + "] does not found"); diff --git a/fe/fe-core/src/test/java/org/apache/doris/catalog/CreateTableTest.java b/fe/fe-core/src/test/java/org/apache/doris/catalog/CreateTableTest.java index b12f09bea8ed44..347299c82a7487 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/catalog/CreateTableTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/catalog/CreateTableTest.java @@ -644,5 +644,46 @@ public void testCreateTableWithArrayType() throws Exception { + ") distributed by hash(k1) buckets 1\n" + "properties(\"replication_num\" = \"1\");"); }); + + ExceptionChecker.expectThrowsNoException(() -> { + createTable("create table test.test_array( \n" + + "task_insert_time BIGINT NOT NULL DEFAULT \"0\" COMMENT \"\" , \n" + + "task_project ARRAY DEFAULT NULL COMMENT \"\" ,\n" + + "route_key DATEV2 NOT NULL COMMENT \"range分区键\"\n" + + ") \n" + + "DUPLICATE KEY(`task_insert_time`) \n" + + " COMMENT \"\"\n" + + "PARTITION BY RANGE(route_key) \n" + + "(PARTITION `p202209` VALUES LESS THAN (\"2022-10-01\"),\n" + + "PARTITION `p202210` VALUES LESS THAN (\"2022-11-01\"),\n" + + "PARTITION `p202211` VALUES LESS THAN (\"2022-12-01\")) \n" + + "DISTRIBUTED BY HASH(`task_insert_time` ) BUCKETS 32 \n" + + "PROPERTIES\n" + + "(\n" + + " \"replication_num\" = \"1\", \n" + + " \"light_schema_change\" = \"true\" \n" + + ");"); + }); + + ExceptionChecker.expectThrowsWithMsg(AnalysisException.class, "Complex type column can't be partition column", + () -> { + createTable("create table test.test_array2( \n" + + "task_insert_time BIGINT NOT NULL DEFAULT \"0\" COMMENT \"\" , \n" + + "task_project ARRAY DEFAULT NULL COMMENT \"\" ,\n" + + "route_key DATEV2 NOT NULL COMMENT \"range分区键\"\n" + + ") \n" + + "DUPLICATE KEY(`task_insert_time`) \n" + + " COMMENT \"\"\n" + + "PARTITION BY RANGE(task_project) \n" + + "(PARTITION `p202209` VALUES LESS THAN (\"2022-10-01\"),\n" + + "PARTITION `p202210` VALUES LESS THAN (\"2022-11-01\"),\n" + + "PARTITION `p202211` VALUES LESS THAN (\"2022-12-01\")) \n" + + "DISTRIBUTED BY HASH(`task_insert_time` ) BUCKETS 32 \n" + + "PROPERTIES\n" + + "(\n" + + " \"replication_num\" = \"1\", \n" + + " \"light_schema_change\" = \"true\" \n" + + ");"); + }); } }