[fix](mtmv) Choose a valid partition column when there are both valid and invalid expressions (#38367) (#38684)

## Proposed changes
pick #38367 

<!--Describe your changes.-->
This commit is contained in:
Lijia Liu
2024-08-01 19:00:28 +08:00
committed by GitHub
parent e59a866d6a
commit 2562cf33a7
2 changed files with 57 additions and 6 deletions

View File

@ -522,7 +522,8 @@ public class MaterializedViewUtils {
private static boolean checkPartition(Collection<? extends Expression> expressionsToCheck, Plan plan,
IncrementCheckerContext context) {
NamedExpression partitionColumn = context.getMvPartitionColumn();
for (Expression projectSlot : expressionsToCheck) {
OUTER_CHECK: for (Expression projectSlot : expressionsToCheck) {
if (projectSlot.isColumnFromTable() && projectSlot.equals(partitionColumn.toSlot())) {
continue;
}
@ -554,7 +555,7 @@ public class MaterializedViewUtils {
String.format("partition expression use more than one slot reference, invalid "
+ "expressionToCheckColumns is %s, partitionColumnDateColumns is %s",
expressionToCheckColumns, partitionColumns));
return false;
continue;
}
List<Expression> expressions = expressionToCheck.collectToList(Expression.class::isInstance);
for (Expression expression : expressions) {
@ -563,7 +564,7 @@ public class MaterializedViewUtils {
context.addFailReason(
String.format("column to check use invalid implicit expression, invalid "
+ "expression is %s", expression));
return false;
continue OUTER_CHECK;
}
}
List<Expression> partitionExpressions = partitionExpression.collectToList(
@ -574,7 +575,7 @@ public class MaterializedViewUtils {
context.addFailReason(
String.format("partition column use invalid implicit expression, invalid "
+ "expression is %s", expression));
return false;
continue OUTER_CHECK;
}
}
List<DateTrunc> expressionToCheckDataTruncList =
@ -585,7 +586,7 @@ public class MaterializedViewUtils {
// mv time unit level is little then query
context.addFailReason("partition column time unit level should be "
+ "greater than sql select column");
return false;
continue;
}
if (!partitionColumn.isColumnFromTable()) {
context.setMvPartitionColumn(partitionColumns.iterator().next());
@ -593,8 +594,9 @@ public class MaterializedViewUtils {
if (!context.getPartitionExpression().isPresent()) {
context.setPartitionExpression(partitionExpression);
}
return true;
}
return true;
return context.getMvPartitionColumn().isColumnFromTable();
}
}