[Bug](partition) fix auto list partition erros of incorrect partition name (#27974)

the partition name need limit it's length and can't have negative "-"
This commit is contained in:
zhangstar333
2023-12-05 12:54:06 +08:00
committed by GitHub
parent 2f63999066
commit ca6949ee3e
2 changed files with 50 additions and 4 deletions

View File

@ -120,8 +120,8 @@ public class PartitionExprUtil {
Map<String, AddPartitionClause> result = Maps.newHashMap();
ArrayList<Expr> partitionExprs = partitionInfo.getPartitionExprs();
PartitionType partitionType = partitionInfo.getType();
List<Column> partiitonColumn = partitionInfo.getPartitionColumns();
Type partitionColumnType = partiitonColumn.get(0).getType();
List<Column> partitionColumn = partitionInfo.getPartitionColumns();
boolean hasStringType = partitionColumn.stream().anyMatch(column -> column.getType().isStringType());
FunctionIntervalInfo intervalInfo = getFunctionIntervalInfo(partitionExprs, partitionType);
Set<String> filterPartitionValues = new HashSet<String>();
@ -141,6 +141,7 @@ public class PartitionExprUtil {
filterPartitionValues.add(filterStr);
if (partitionType == PartitionType.RANGE) {
String beginTime = curPartitionValues.get(0); // have check range type size must be 1
Type partitionColumnType = partitionColumn.get(0).getType();
DateLiteral beginDateTime = new DateLiteral(beginTime, partitionColumnType);
partitionName += String.format(DATETIME_NAME_FORMATTER,
beginDateTime.getYear(), beginDateTime.getMonth(), beginDateTime.getDay(),
@ -157,9 +158,9 @@ public class PartitionExprUtil {
partitionKeyDesc = PartitionKeyDesc.createIn(
listValues);
partitionName += getFormatPartitionValue(filterStr);
if (partitionColumnType.isStringType()) {
if (hasStringType) {
if (partitionName.length() > 50) {
partitionName = partitionName.substring(40) + Objects.hash(partitionName)
partitionName = partitionName.substring(0, 30) + Math.abs(Objects.hash(partitionName))
+ "_" + System.currentTimeMillis();
}
}

View File

@ -270,4 +270,49 @@ suite("test_auto_list_partition") {
result12 = sql "show partitions from test_list_many_column2"
logger.info("${result12}")
assertEquals(result12.size(), 4)
sql "drop table if exists test_list_many_column3"
sql """
CREATE TABLE test_list_many_column3 (
id int not null,
k largeint not null,
str varchar not null,
)
AUTO PARTITION BY LIST (`id`, `k`, `str`)
(
)
DISTRIBUTED BY HASH(`k`) BUCKETS 16
PROPERTIES (
"replication_allocation" = "tag.location.default: 1"
);
"""
sql """ insert into test_list_many_column3 values (1,1,"asd"), (-1,-1,"vdf");"""
sql """ insert into test_list_many_column3 values (2,2,"xxx"), (-3,-3,"qwe");"""
sql """ insert into test_list_many_column3 values (5,5,"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaA")"""
result12 = sql "show partitions from test_list_many_column3"
logger.info("${result12}")
assertEquals(result12.size(), 5)
sql "drop table if exists stream_load_list_test_table_string_key"
sql """
CREATE TABLE `stream_load_list_test_table_string_key`(
`col1` bigint not null,
`col2` varchar(16384) not null
) duplicate KEY(`col1`)
AUTO PARTITION BY list(`col2`)
(
)
DISTRIBUTED BY HASH(`col1`) BUCKETS 10
PROPERTIES (
"replication_num" = "1"
);
"""
sql """ insert into stream_load_list_test_table_string_key values (1,"20"), (2," ");"""
sql """ insert into stream_load_list_test_table_string_key values (3,"!"), (4,"! ");"""
sql """ insert into stream_load_list_test_table_string_key values (5,"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaA")"""
result12 = sql "show partitions from stream_load_list_test_table_string_key"
logger.info("${result12}")
assertEquals(result12.size(), 5)
}