This is an automated email from the ASF dual-hosted git repository. morningman pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push: new fc3728c6ab [fix](dynamic-partition) create HOUR unit partition with DATEV2 throw exception (#19213) fc3728c6ab is described below commit fc3728c6ab766f28f2105cf5df5d0fe4021d05b6 Author: Mingyu Chen <morning...@163.com> AuthorDate: Sat Apr 29 08:23:06 2023 +0800 [fix](dynamic-partition) create HOUR unit partition with DATEV2 throw exception (#19213) Need to forbid create HOUR unit partition with partition column type DATEV2 ``` Unexpected exception: String index out of range: 10 ``` --- .github/actions/paths-filter | 2 +- .../doris/common/util/DynamicPartitionUtil.java | 9 ++-- .../apache/doris/datasource/InternalCatalog.java | 1 - .../doris/catalog/DynamicPartitionTableTest.java | 53 ++++++++++++++++++++++ 4 files changed, 59 insertions(+), 6 deletions(-) diff --git a/.github/actions/paths-filter b/.github/actions/paths-filter index 4067d88573..4512585405 160000 --- a/.github/actions/paths-filter +++ b/.github/actions/paths-filter @@ -1 +1 @@ -Subproject commit 4067d885736b84de7c414f582ac45897079b0a78 +Subproject commit 4512585405083f25c027a35db413c2b3b9006d50 diff --git a/fe/fe-core/src/main/java/org/apache/doris/common/util/DynamicPartitionUtil.java b/fe/fe-core/src/main/java/org/apache/doris/common/util/DynamicPartitionUtil.java index d196d92135..39d581680f 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/common/util/DynamicPartitionUtil.java +++ b/fe/fe-core/src/main/java/org/apache/doris/common/util/DynamicPartitionUtil.java @@ -87,11 +87,12 @@ public class DynamicPartitionUtil { RangePartitionInfo rangePartitionInfo = (RangePartitionInfo) partitionInfo; Preconditions.checkState(!rangePartitionInfo.isMultiColumnPartition()); Column partitionColumn = rangePartitionInfo.getPartitionColumns().get(0); - if ((partitionColumn.getDataType() == PrimitiveType.DATE) + if ((partitionColumn.getDataType() == PrimitiveType.DATE + || partitionColumn.getDataType() == PrimitiveType.DATEV2) && (timeUnit.equalsIgnoreCase(TimeUnit.HOUR.toString()))) { ErrorReport.reportDdlException(DynamicPartitionProperty.TIME_UNIT + " could not be " - + TimeUnit.HOUR.toString() + " when type of partition column " - + partitionColumn.getDisplayName() + " is " + PrimitiveType.DATE.toString()); + + TimeUnit.HOUR + " when type of partition column " + + partitionColumn.getDisplayName() + " is " + PrimitiveType.DATE + " or " + PrimitiveType.DATEV2); } else if (PrimitiveType.getIntegerTypes().contains(partitionColumn.getDataType()) && timeUnit.equalsIgnoreCase(TimeUnit.HOUR.toString())) { // The partition column's type is INT, not support HOUR @@ -462,7 +463,7 @@ public class DynamicPartitionUtil { } if (Strings.isNullOrEmpty(reservedHistoryPeriods)) { properties.put(DynamicPartitionProperty.RESERVED_HISTORY_PERIODS, - String.valueOf(DynamicPartitionProperty.NOT_SET_RESERVED_HISTORY_PERIODS)); + DynamicPartitionProperty.NOT_SET_RESERVED_HISTORY_PERIODS); } } return true; 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 250cda5cce..72edcbd4e5 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 @@ -2237,7 +2237,6 @@ public class InternalCatalog implements CatalogIf<Database> { new DataProperty(DataProperty.DEFAULT_STORAGE_MEDIUM)); if (partitionInfo.getType() == PartitionType.RANGE) { DynamicPartitionUtil.checkAndSetDynamicPartitionProperty(olapTable, properties, db); - } else if (partitionInfo.getType() == PartitionType.LIST) { if (DynamicPartitionUtil.checkDynamicPartitionPropertiesExist(properties)) { throw new DdlException( diff --git a/fe/fe-core/src/test/java/org/apache/doris/catalog/DynamicPartitionTableTest.java b/fe/fe-core/src/test/java/org/apache/doris/catalog/DynamicPartitionTableTest.java index ff6d1f687d..84270649fb 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/catalog/DynamicPartitionTableTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/catalog/DynamicPartitionTableTest.java @@ -1570,4 +1570,57 @@ public class DynamicPartitionTableTest { partitions = copiedTable.getPartitions(); Assert.assertTrue(partitions.isEmpty()); } + + @Test + public void testHourUnitWithDateType() throws AnalysisException { + String createOlapTblStmt = "CREATE TABLE if not exists test.hour_with_date (\n" + + " `days` DATEV2 NOT NULL,\n" + + " `hours` char(2) NOT NULL,\n" + + " `positionID` char(20)\n" + + " )\n" + + "UNIQUE KEY(`days`,`hours`,`positionID`)\n" + + "PARTITION BY RANGE(`days`) ()\n" + + "DISTRIBUTED BY HASH(`positionID`) BUCKETS AUTO\n" + + "PROPERTIES (\n" + + "\"replication_num\" = \"1\",\n" + + "\"compression\" = \"zstd\",\n" + + "\"enable_unique_key_merge_on_write\" = \"true\",\n" + + "\"light_schema_change\" = \"true\",\n" + + "\"dynamic_partition.enable\" = \"true\",\n" + + "\"dynamic_partition.time_zone\" = \"+00:00\",\n" + + "\"dynamic_partition.time_unit\" = \"HOUR\",\n" + + "\"dynamic_partition.start\" = \"-24\",\n" + + "\"dynamic_partition.end\" = \"24\",\n" + + "\"dynamic_partition.prefix\" = \"p\",\n" + + "\"dynamic_partition.buckets\" = \"2\",\n" + + "\"dynamic_partition.create_history_partition\" = \"true\"\n" + + ");"; + ExceptionChecker.expectThrowsWithMsg(DdlException.class, + "could not be HOUR when type of partition column days is DATE or DATEV2", + () -> createTable(createOlapTblStmt)); + + String createOlapTblStmt2 = "CREATE TABLE if not exists test.hour_with_date (\n" + + " `days` DATETIMEV2 NOT NULL,\n" + + " `hours` char(2) NOT NULL,\n" + + " `positionID` char(20)\n" + + " )\n" + + "UNIQUE KEY(`days`,`hours`,`positionID`)\n" + + "PARTITION BY RANGE(`days`) ()\n" + + "DISTRIBUTED BY HASH(`positionID`) BUCKETS AUTO\n" + + "PROPERTIES (\n" + + "\"replication_num\" = \"1\",\n" + + "\"compression\" = \"zstd\",\n" + + "\"enable_unique_key_merge_on_write\" = \"true\",\n" + + "\"light_schema_change\" = \"true\",\n" + + "\"dynamic_partition.enable\" = \"true\",\n" + + "\"dynamic_partition.time_zone\" = \"+00:00\",\n" + + "\"dynamic_partition.time_unit\" = \"HOUR\",\n" + + "\"dynamic_partition.start\" = \"-24\",\n" + + "\"dynamic_partition.end\" = \"24\",\n" + + "\"dynamic_partition.prefix\" = \"p\",\n" + + "\"dynamic_partition.buckets\" = \"2\",\n" + + "\"dynamic_partition.create_history_partition\" = \"true\"\n" + + ");"; + ExceptionChecker.expectThrowsNoException(() -> createTable(createOlapTblStmt2)); + } } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org