This is an automated email from the ASF dual-hosted git repository. jakevin pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push: new 17ca75f8340 [chore](Nereids): add eager aggregate into rules (#27505) 17ca75f8340 is described below commit 17ca75f83400fdf66153de7946b39946de1cacc3 Author: jakevin <jakevin...@gmail.com> AuthorDate: Fri Nov 24 10:06:04 2023 +0800 [chore](Nereids): add eager aggregate into rules (#27505) Add `Eager Aggregate` rules into Rewrite rules. --- .../doris/nereids/jobs/executor/Rewriter.java | 18 ++++++----- .../rewrite/PushDownCountThroughJoinTest.java | 36 ++++------------------ .../rewrite/PushDownDistinctThroughJoinTest.java | 18 ++++------- .../rewrite/PushDownMinMaxThroughJoinTest.java | 36 ++++------------------ .../rules/rewrite/PushDownSumThroughJoinTest.java | 24 ++++----------- .../apache/doris/utframe/TestWithFeService.java | 11 +++++++ 6 files changed, 45 insertions(+), 98 deletions(-) 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 15e08d052e9..183bfc3c91a 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 @@ -91,9 +91,12 @@ import org.apache.doris.nereids.rules.rewrite.PullUpProjectUnderLimit; import org.apache.doris.nereids.rules.rewrite.PullUpProjectUnderTopN; import org.apache.doris.nereids.rules.rewrite.PushConjunctsIntoEsScan; import org.apache.doris.nereids.rules.rewrite.PushConjunctsIntoJdbcScan; +import org.apache.doris.nereids.rules.rewrite.PushDownCountThroughJoin; import org.apache.doris.nereids.rules.rewrite.PushDownFilterThroughProject; import org.apache.doris.nereids.rules.rewrite.PushDownLimit; import org.apache.doris.nereids.rules.rewrite.PushDownLimitDistinctThroughJoin; +import org.apache.doris.nereids.rules.rewrite.PushDownMinMaxThroughJoin; +import org.apache.doris.nereids.rules.rewrite.PushDownSumThroughJoin; import org.apache.doris.nereids.rules.rewrite.PushDownTopNThroughJoin; import org.apache.doris.nereids.rules.rewrite.PushDownTopNThroughWindow; import org.apache.doris.nereids.rules.rewrite.PushFilterInsideJoin; @@ -272,14 +275,13 @@ public class Rewriter extends AbstractBatchJobExecutor { topDown(new BuildAggForUnion()) ), - // topic("Eager aggregation", - // topDown( - // new PushDownSumThroughJoin(), - // new PushDownMinMaxThroughJoin(), - // new PushDownCountThroughJoin() - // ), - // custom(RuleType.PUSH_DOWN_DISTINCT_THROUGH_JOIN, PushDownDistinctThroughJoin::new) - // ), + topic("Eager aggregation", + topDown( + new PushDownSumThroughJoin(), + new PushDownMinMaxThroughJoin(), + new PushDownCountThroughJoin() + ) + ), topic("Limit optimization", // TODO: the logical plan should not contains any phase information, diff --git a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/PushDownCountThroughJoinTest.java b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/PushDownCountThroughJoinTest.java index 21eebe1b375..34ccfe70f70 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/PushDownCountThroughJoinTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/PushDownCountThroughJoinTest.java @@ -42,15 +42,15 @@ import java.util.Set; class PushDownCountThroughJoinTest implements MemoPatternMatchSupported { private static final LogicalOlapScan scan1 = PlanConstructor.newLogicalOlapScan(0, "t1", 0); private static final LogicalOlapScan scan2 = PlanConstructor.newLogicalOlapScan(1, "t2", 0); + private MockUp<SessionVariable> mockUp = new MockUp<SessionVariable>() { + @Mock + public Set<Integer> getEnableNereidsRules() { + return ImmutableSet.of(RuleType.PUSH_DOWN_COUNT_THROUGH_JOIN.type()); + } + }; @Test void testSingleCount() { - new MockUp<SessionVariable>() { - @Mock - public Set<Integer> getEnableNereidsRules() { - return ImmutableSet.of(RuleType.PUSH_DOWN_COUNT_THROUGH_JOIN.type()); - } - }; Alias count = new Count(scan1.getOutput().get(0)).alias("count"); LogicalPlan plan = new LogicalPlanBuilder(scan1) .join(scan2, JoinType.INNER_JOIN, Pair.of(0, 0)) @@ -71,12 +71,6 @@ class PushDownCountThroughJoinTest implements MemoPatternMatchSupported { @Test void testMultiCount() { - new MockUp<SessionVariable>() { - @Mock - public Set<Integer> getEnableNereidsRules() { - return ImmutableSet.of(RuleType.PUSH_DOWN_COUNT_THROUGH_JOIN.type()); - } - }; Alias leftCnt1 = new Count(scan1.getOutput().get(0)).alias("leftCnt1"); Alias leftCnt2 = new Count(scan1.getOutput().get(1)).alias("leftCnt2"); Alias rightCnt1 = new Count(scan2.getOutput().get(1)).alias("rightCnt1"); @@ -100,12 +94,6 @@ class PushDownCountThroughJoinTest implements MemoPatternMatchSupported { @Test void testSingleCountStar() { - new MockUp<SessionVariable>() { - @Mock - public Set<Integer> getEnableNereidsRules() { - return ImmutableSet.of(RuleType.PUSH_DOWN_COUNT_THROUGH_JOIN.type()); - } - }; Alias count = new Count().alias("countStar"); LogicalPlan plan = new LogicalPlanBuilder(scan1) .join(scan2, JoinType.INNER_JOIN, Pair.of(0, 0)) @@ -126,12 +114,6 @@ class PushDownCountThroughJoinTest implements MemoPatternMatchSupported { @Test void testSingleCountStarEmptyGroupBy() { - new MockUp<SessionVariable>() { - @Mock - public Set<Integer> getEnableNereidsRules() { - return ImmutableSet.of(RuleType.PUSH_DOWN_COUNT_THROUGH_JOIN.type()); - } - }; Alias count = new Count().alias("countStar"); LogicalPlan plan = new LogicalPlanBuilder(scan1) .join(scan2, JoinType.INNER_JOIN, Pair.of(0, 0)) @@ -153,12 +135,6 @@ class PushDownCountThroughJoinTest implements MemoPatternMatchSupported { @Test void testBothSideCountAndCountStar() { - new MockUp<SessionVariable>() { - @Mock - public Set<Integer> getEnableNereidsRules() { - return ImmutableSet.of(RuleType.PUSH_DOWN_COUNT_THROUGH_JOIN.type()); - } - }; Alias leftCnt = new Count(scan1.getOutput().get(0)).alias("leftCnt"); Alias rightCnt = new Count(scan2.getOutput().get(0)).alias("rightCnt"); Alias countStar = new Count().alias("countStar"); diff --git a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/PushDownDistinctThroughJoinTest.java b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/PushDownDistinctThroughJoinTest.java index aac1bf2c7d4..1ce91d1c7c3 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/PushDownDistinctThroughJoinTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/PushDownDistinctThroughJoinTest.java @@ -42,15 +42,15 @@ class PushDownDistinctThroughJoinTest implements MemoPatternMatchSupported { private static final LogicalOlapScan scan2 = PlanConstructor.newLogicalOlapScan(1, "t2", 0); private static final LogicalOlapScan scan3 = PlanConstructor.newLogicalOlapScan(2, "t3", 0); private static final LogicalOlapScan scan4 = PlanConstructor.newLogicalOlapScan(3, "t4", 0); + private MockUp<SessionVariable> mockUp = new MockUp<SessionVariable>() { + @Mock + public Set<Integer> getEnableNereidsRules() { + return ImmutableSet.of(RuleType.PUSH_DOWN_DISTINCT_THROUGH_JOIN.type()); + } + }; @Test void testPushdownJoin() { - new MockUp<SessionVariable>() { - @Mock - public Set<Integer> getEnableNereidsRules() { - return ImmutableSet.of(RuleType.PUSH_DOWN_DISTINCT_THROUGH_JOIN.type()); - } - }; LogicalPlan plan = new LogicalPlanBuilder(scan1) .join(scan2, JoinType.INNER_JOIN, Pair.of(0, 0)) .join(scan3, JoinType.INNER_JOIN, Pair.of(0, 0)) @@ -73,12 +73,6 @@ class PushDownDistinctThroughJoinTest implements MemoPatternMatchSupported { @Test void testPushdownProjectJoin() { - new MockUp<SessionVariable>() { - @Mock - public Set<Integer> getEnableNereidsRules() { - return ImmutableSet.of(RuleType.PUSH_DOWN_DISTINCT_THROUGH_JOIN.type()); - } - }; LogicalPlan plan = new LogicalPlanBuilder(scan1) .join(scan2, JoinType.INNER_JOIN, Pair.of(0, 0)) .project(ImmutableList.of(0, 2)) diff --git a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/PushDownMinMaxThroughJoinTest.java b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/PushDownMinMaxThroughJoinTest.java index dafef59100a..cf28954a47c 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/PushDownMinMaxThroughJoinTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/PushDownMinMaxThroughJoinTest.java @@ -45,15 +45,15 @@ class PushDownMinMaxThroughJoinTest implements MemoPatternMatchSupported { private static final LogicalOlapScan scan2 = PlanConstructor.newLogicalOlapScan(1, "t2", 0); private static final LogicalOlapScan scan3 = PlanConstructor.newLogicalOlapScan(2, "t3", 0); private static final LogicalOlapScan scan4 = PlanConstructor.newLogicalOlapScan(3, "t4", 0); + private MockUp<SessionVariable> mockUp = new MockUp<SessionVariable>() { + @Mock + public Set<Integer> getEnableNereidsRules() { + return ImmutableSet.of(RuleType.PUSH_DOWN_MIN_MAX_THROUGH_JOIN.type()); + } + }; @Test void testSingleJoin() { - new MockUp<SessionVariable>() { - @Mock - public Set<Integer> getEnableNereidsRules() { - return ImmutableSet.of(RuleType.PUSH_DOWN_MIN_MAX_THROUGH_JOIN.type()); - } - }; Alias min = new Min(scan1.getOutput().get(0)).alias("min"); LogicalPlan plan = new LogicalPlanBuilder(scan1) .join(scan2, JoinType.INNER_JOIN, Pair.of(0, 0)) @@ -74,12 +74,6 @@ class PushDownMinMaxThroughJoinTest implements MemoPatternMatchSupported { @Test void testMultiJoin() { - new MockUp<SessionVariable>() { - @Mock - public Set<Integer> getEnableNereidsRules() { - return ImmutableSet.of(RuleType.PUSH_DOWN_MIN_MAX_THROUGH_JOIN.type()); - } - }; Alias min = new Min(scan1.getOutput().get(0)).alias("min"); LogicalPlan plan = new LogicalPlanBuilder(scan1) .join(scan2, JoinType.INNER_JOIN, Pair.of(0, 0)) @@ -113,12 +107,6 @@ class PushDownMinMaxThroughJoinTest implements MemoPatternMatchSupported { @Test void testAggNotOutputGroupBy() { - new MockUp<SessionVariable>() { - @Mock - public Set<Integer> getEnableNereidsRules() { - return ImmutableSet.of(RuleType.PUSH_DOWN_MIN_MAX_THROUGH_JOIN.type()); - } - }; // agg don't output group by Alias min = new Min(scan1.getOutput().get(0)).alias("min"); LogicalPlan plan = new LogicalPlanBuilder(scan1) @@ -146,12 +134,6 @@ class PushDownMinMaxThroughJoinTest implements MemoPatternMatchSupported { @Test void testBothSideSingleJoin() { - new MockUp<SessionVariable>() { - @Mock - public Set<Integer> getEnableNereidsRules() { - return ImmutableSet.of(RuleType.PUSH_DOWN_MIN_MAX_THROUGH_JOIN.type()); - } - }; Alias min = new Min(scan1.getOutput().get(1)).alias("min"); Alias max = new Max(scan2.getOutput().get(1)).alias("max"); LogicalPlan plan = new LogicalPlanBuilder(scan1) @@ -174,12 +156,6 @@ class PushDownMinMaxThroughJoinTest implements MemoPatternMatchSupported { @Test void testBothSide() { - new MockUp<SessionVariable>() { - @Mock - public Set<Integer> getEnableNereidsRules() { - return ImmutableSet.of(RuleType.PUSH_DOWN_MIN_MAX_THROUGH_JOIN.type()); - } - }; Alias min = new Min(scan1.getOutput().get(1)).alias("min"); Alias max = new Max(scan3.getOutput().get(1)).alias("max"); LogicalPlan plan = new LogicalPlanBuilder(scan1) diff --git a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/PushDownSumThroughJoinTest.java b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/PushDownSumThroughJoinTest.java index 5828d2319f2..088372b0d76 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/PushDownSumThroughJoinTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/PushDownSumThroughJoinTest.java @@ -42,15 +42,15 @@ import java.util.Set; class PushDownSumThroughJoinTest implements MemoPatternMatchSupported { private static final LogicalOlapScan scan1 = PlanConstructor.newLogicalOlapScan(0, "t1", 0); private static final LogicalOlapScan scan2 = PlanConstructor.newLogicalOlapScan(1, "t2", 0); + private MockUp<SessionVariable> mockUp = new MockUp<SessionVariable>() { + @Mock + public Set<Integer> getEnableNereidsRules() { + return ImmutableSet.of(RuleType.PUSH_DOWN_SUM_THROUGH_JOIN.type()); + } + }; @Test void testSingleJoinLeftSum() { - new MockUp<SessionVariable>() { - @Mock - public Set<Integer> getEnableNereidsRules() { - return ImmutableSet.of(RuleType.PUSH_DOWN_SUM_THROUGH_JOIN.type()); - } - }; Alias sum = new Sum(scan1.getOutput().get(1)).alias("sum"); LogicalPlan plan = new LogicalPlanBuilder(scan1) .join(scan2, JoinType.INNER_JOIN, Pair.of(0, 0)) @@ -71,12 +71,6 @@ class PushDownSumThroughJoinTest implements MemoPatternMatchSupported { @Test void testSingleJoinRightSum() { - new MockUp<SessionVariable>() { - @Mock - public Set<Integer> getEnableNereidsRules() { - return ImmutableSet.of(RuleType.PUSH_DOWN_SUM_THROUGH_JOIN.type()); - } - }; Alias sum = new Sum(scan2.getOutput().get(1)).alias("sum"); LogicalPlan plan = new LogicalPlanBuilder(scan1) .join(scan2, JoinType.INNER_JOIN, Pair.of(0, 0)) @@ -97,12 +91,6 @@ class PushDownSumThroughJoinTest implements MemoPatternMatchSupported { @Test void testAggNotOutputGroupBy() { - new MockUp<SessionVariable>() { - @Mock - public Set<Integer> getEnableNereidsRules() { - return ImmutableSet.of(RuleType.PUSH_DOWN_SUM_THROUGH_JOIN.type()); - } - }; // agg don't output group by Alias sum = new Sum(scan1.getOutput().get(1)).alias("sum"); LogicalPlan plan = new LogicalPlanBuilder(scan1) diff --git a/fe/fe-core/src/test/java/org/apache/doris/utframe/TestWithFeService.java b/fe/fe-core/src/test/java/org/apache/doris/utframe/TestWithFeService.java index 911155df7a2..946e159529d 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/utframe/TestWithFeService.java +++ b/fe/fe-core/src/test/java/org/apache/doris/utframe/TestWithFeService.java @@ -69,6 +69,7 @@ import org.apache.doris.planner.Planner; import org.apache.doris.qe.ConnectContext; import org.apache.doris.qe.OriginStatement; import org.apache.doris.qe.QueryState; +import org.apache.doris.qe.SessionVariable; import org.apache.doris.qe.ShowExecutor; import org.apache.doris.qe.ShowResultSet; import org.apache.doris.qe.StmtExecutor; @@ -84,9 +85,12 @@ import org.apache.doris.utframe.MockedFrontend.NotInitException; import com.google.common.base.Strings; import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Sets; +import mockit.Mock; +import mockit.MockUp; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; @@ -129,6 +133,13 @@ public abstract class TestWithFeService { protected static final String DEFAULT_CLUSTER_PREFIX = "default_cluster:"; + private static final MockUp<SessionVariable> mockUp = new MockUp<SessionVariable>() { + @Mock + public Set<Integer> getEnableNereidsRules() { + return ImmutableSet.of(); + } + }; + @BeforeAll public final void beforeAll() throws Exception { FeConstants.enableInternalSchemaDb = false; --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org