diff --git a/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVPartitionUtil.java b/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVPartitionUtil.java index a4f3f4cb53..6657b3d243 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVPartitionUtil.java +++ b/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVPartitionUtil.java @@ -45,9 +45,13 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Objects; import java.util.Set; +import java.util.regex.Matcher; +import java.util.regex.Pattern; public class MTMVPartitionUtil { private static final Logger LOG = LogManager.getLogger(MTMVPartitionUtil.class); + private static final Pattern PARTITION_NAME_PATTERN = Pattern.compile("[^a-zA-Z0-9,]"); + private static final String PARTITION_NAME_PREFIX = "p_"; /** * Determine whether the partition is sync with retated partition and other baseTables @@ -286,9 +290,8 @@ public class MTMVPartitionUtil { * @return */ public static String generatePartitionName(PartitionKeyDesc desc) { - String partitionName = "p_"; - partitionName += desc.toSql().trim().replaceAll("\\(|\\)|\\-|\\[|\\]|'|\\s+", "") - .replaceAll("\\(|\\)|\\,|\\[|\\]", "_"); + Matcher matcher = PARTITION_NAME_PATTERN.matcher(desc.toSql()); + String partitionName = PARTITION_NAME_PREFIX + matcher.replaceAll("").replaceAll("\\,", "_"); if (partitionName.length() > 50) { partitionName = partitionName.substring(0, 30) + Math.abs(Objects.hash(partitionName)) + "_" + System.currentTimeMillis(); diff --git a/fe/fe-core/src/test/java/org/apache/doris/mtmv/MTMVPartitionUtilTest.java b/fe/fe-core/src/test/java/org/apache/doris/mtmv/MTMVPartitionUtilTest.java index 4bb74bfd44..62f2fd5ff5 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/mtmv/MTMVPartitionUtilTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/mtmv/MTMVPartitionUtilTest.java @@ -171,11 +171,11 @@ public class MTMVPartitionUtilTest { @Test public void testGeneratePartitionName() { List> inValues = Lists.newArrayList(); - inValues.add(Lists.newArrayList(new PartitionValue("value11"), new PartitionValue("value12"))); + inValues.add(Lists.newArrayList(new PartitionValue("20201010 01:01:01"), new PartitionValue("value12"))); inValues.add(Lists.newArrayList(new PartitionValue("value21"), new PartitionValue("value22"))); PartitionKeyDesc inDesc = PartitionKeyDesc.createIn(inValues); String inName = MTMVPartitionUtil.generatePartitionName(inDesc); - Assert.assertEquals("p_value11_value12_value21_value22", inName); + Assert.assertEquals("p_20201010010101_value12_value21_value22", inName); PartitionKeyDesc rangeDesc = PartitionKeyDesc.createFixed( Lists.newArrayList(new PartitionValue(1L)),