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