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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]