branch-2.1: [fix](Nereids) not process must shuffle when regulate cannot be banned agg #52827 (#53265)

picked from #52827
This commit is contained in:
morrySnow
2025-07-17 11:34:05 +08:00
committed by GitHub
parent 70b7a0d795
commit eb6a5f884e
5 changed files with 33 additions and 13 deletions

View File

@ -109,7 +109,7 @@ public class ChildrenPropertiesRegulator extends PlanVisitor<Boolean, Void> {
return false;
}
if (!agg.getAggregateParam().canBeBanned) {
return true;
return visit(agg, context);
}
// forbid one phase agg on distribute
if (agg.getAggMode() == AggMode.INPUT_TO_RESULT && children.get(0).getPlan() instanceof PhysicalDistribute) {
@ -175,9 +175,7 @@ public class ChildrenPropertiesRegulator extends PlanVisitor<Boolean, Void> {
}
}
// process must shuffle
visit(agg, context);
// process agg
return true;
return visit(agg, context);
}
@Override

View File

@ -24,6 +24,7 @@ import org.apache.doris.nereids.trees.expressions.Expression;
import org.apache.doris.nereids.trees.expressions.OrderExpression;
import org.apache.doris.nereids.trees.expressions.WindowExpression;
import org.apache.doris.nereids.trees.expressions.functions.agg.AggregateFunction;
import org.apache.doris.nereids.trees.expressions.functions.agg.Count;
import org.apache.doris.nereids.trees.expressions.functions.generator.TableGeneratingFunction;
import org.apache.doris.nereids.trees.expressions.functions.scalar.GroupingScalarFunction;
import org.apache.doris.nereids.trees.expressions.typecoercion.TypeCheckResult;
@ -148,11 +149,13 @@ public class CheckAnalysis implements AnalysisRuleFactory {
if (func.arity() <= 1) {
continue;
}
for (int i = 1; i < func.arity(); i++) {
if (!func.child(i).getInputSlots().isEmpty() && !(func.child(i) instanceof OrderExpression)) {
// think about group_concat(distinct col_1, ',')
distinctMultiColumns = true;
break;
if (func instanceof Count) {
for (int i = 1; i < func.arity(); i++) {
if (!func.child(i).getInputSlots().isEmpty() && !(func.child(i) instanceof OrderExpression)) {
// think about group_concat(distinct col_1, ',')
distinctMultiColumns = true;
break;
}
}
}
if (distinctMultiColumns) {

View File

@ -2048,10 +2048,12 @@ public class AggregateStrategies implements ImplementationRuleFactory {
if (func.arity() <= 1) {
continue;
}
for (int i = 1; i < func.arity(); i++) {
// think about group_concat(distinct col_1, ',')
if (!(func.child(i) instanceof OrderExpression) && !func.child(i).getInputSlots().isEmpty()) {
return false;
if (func instanceof Count) {
for (int i = 1; i < func.arity(); i++) {
// think about group_concat(distinct col_1, ',')
if (!(func.child(i) instanceof OrderExpression) && !func.child(i).getInputSlots().isEmpty()) {
return false;
}
}
}
}