diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/executor/Rewriter.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/executor/Rewriter.java index 447c58311a903d..f65a423886e823 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/executor/Rewriter.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/executor/Rewriter.java @@ -663,7 +663,6 @@ public class Rewriter extends AbstractBatchJobExecutor { cascadesContext -> cascadesContext.rewritePlanContainsTypes(LogicalAggregate.class) || cascadesContext.rewritePlanContainsTypes(LogicalJoin.class) || cascadesContext.rewritePlanContainsTypes(LogicalUnion.class), - custom(RuleType.ELIMINATE_GROUP_BY_KEY_BY_UNIFORM, EliminateGroupByKeyByUniform::new), topDown(new EliminateGroupByKey()), topDown(new PushDownAggThroughJoinOnPkFk()), topDown(new PullUpJoinFromUnionAll()) @@ -877,6 +876,8 @@ private static List getWholeTreeRewriteJobs( ))); rewriteJobs.addAll(jobs(topic("convert outer join to anti", custom(RuleType.CONVERT_OUTER_JOIN_TO_ANTI, ConvertOuterJoinToAntiJoin::new)))); + rewriteJobs.addAll(jobs(topic("eliminate group by key by uniform", + custom(RuleType.ELIMINATE_GROUP_BY_KEY_BY_UNIFORM, EliminateGroupByKeyByUniform::new)))); if (needOrExpansion) { rewriteJobs.addAll(jobs(topic("or expansion", custom(RuleType.OR_EXPANSION, () -> OrExpansion.INSTANCE)))); diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/EliminateGroupByKeyByUniform.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/EliminateGroupByKeyByUniform.java index 5e244513e24ca4..c210c8cca6e622 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/EliminateGroupByKeyByUniform.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/EliminateGroupByKeyByUniform.java @@ -20,7 +20,6 @@ import org.apache.doris.nereids.jobs.JobContext; import org.apache.doris.nereids.properties.DataTrait; import org.apache.doris.nereids.trees.expressions.Alias; -import org.apache.doris.nereids.trees.expressions.CTEId; import org.apache.doris.nereids.trees.expressions.ExprId; import org.apache.doris.nereids.trees.expressions.Expression; import org.apache.doris.nereids.trees.expressions.NamedExpression; @@ -42,7 +41,6 @@ import java.util.LinkedHashSet; import java.util.List; import java.util.Map; -import java.util.Optional; import java.util.Set; /** @@ -61,8 +59,7 @@ public class EliminateGroupByKeyByUniform extends DefaultPlanRewriter cteId = jobContext.getCascadesContext().getCurrentTree(); - if (cteId.isPresent() || !plan.containsType(Aggregate.class)) { + if (!plan.containsType(Aggregate.class)) { return plan; } Map replaceMap = new HashMap<>(); @@ -104,7 +101,7 @@ public Plan visitLogicalAggregate(LogicalAggregate aggregate, Ma if (removedExpression.isEmpty()) { return aggregate; } - /* select 1 c1 from test group by c; -> select 1 c1 from test limit 1 */ + /* select 1 c1 from test group by c1; -> select 1 c1 from test limit 1 */ if (newGroupBy.isEmpty() && aggregate.getAggregateFunctions().isEmpty()) { LogicalProject newProject = new LogicalProject<>( Utils.fastToImmutableList(aggregate.getOutput()), aggregate.child()); diff --git a/regression-test/data/nereids_rules_p0/constant_propagation/constant_propagation.out b/regression-test/data/nereids_rules_p0/constant_propagation/constant_propagation.out index 7a5f82f0f54cb0..daaf9378e502cd 100644 --- a/regression-test/data/nereids_rules_p0/constant_propagation/constant_propagation.out +++ b/regression-test/data/nereids_rules_p0/constant_propagation/constant_propagation.out @@ -621,13 +621,14 @@ PhysicalResultSink -- !union_3_shape -- PhysicalResultSink --PhysicalLimit[GLOBAL] -----PhysicalUnion -------PhysicalProject[-1 AS `k2`, 3 AS `k1`, c AS `k3`] ---------filter((t1.a = 1) and (t1.b = 2) and (t1.c = 3)) -----------PhysicalOlapScan[t1] -------PhysicalProject[-1 AS `k2`, 3 AS `k1`, z AS `k3`] ---------filter((t2.x = 1) and (t2.y = 2) and (t2.z = 3)) -----------PhysicalOlapScan[t2] +----PhysicalProject[-1 AS `k2`, 3 AS `k1`, 3 AS `k3`] +------PhysicalUnion +--------PhysicalProject[1 AS `1`] +----------filter((t1.a = 1) and (t1.b = 2) and (t1.c = 3)) +------------PhysicalOlapScan[t1] +--------PhysicalProject[1 AS `1`] +----------filter((t2.x = 1) and (t2.y = 2) and (t2.z = 3)) +------------PhysicalOlapScan[t2] -- !union_3_result -- 3 -1 3 @@ -780,10 +781,11 @@ PhysicalResultSink -- !union_17_shape -- PhysicalResultSink --PhysicalLimit[GLOBAL] -----PhysicalUnion -------PhysicalProject[3 AS `a + b`, t1.a] ---------filter((t1.a = 1) and (t1.b = 2)) -----------PhysicalOlapScan[t1] +----PhysicalProject[1 AS `1`, 3 AS `3`] +------PhysicalUnion +--------PhysicalProject[1 AS `1`] +----------filter((t1.a = 1) and (t1.b = 2)) +------------PhysicalOlapScan[t1] -- !union_17_result -- 1 3 @@ -792,7 +794,8 @@ PhysicalResultSink PhysicalResultSink --PhysicalUnion ----PhysicalLimit[GLOBAL] -------PhysicalUnion +------PhysicalProject[1 AS `1`, 3 AS `3`] +--------PhysicalUnion ----PhysicalProject[3 AS `a + b`, t1.a] ------filter((t1.a = 1) and (t1.b = 2)) --------PhysicalOlapScan[t1]