[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:
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@ -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)
|
||||
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user