This is an automated email from the ASF dual-hosted git repository.
kxiao pushed a commit to branch branch-2.0
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-2.0 by this push:
new 7503842a348 [fix](nereids)pick part of "[opt](nereids) enable runtime
filter prune by default #24717" (#25642)
7503842a348 is described below
commit 7503842a348c3c84e7bcd51440bc8881d2ef360e
Author: minghong <[email protected]>
AuthorDate: Mon Oct 23 23:11:01 2023 +0800
[fix](nereids)pick part of "[opt](nereids) enable runtime filter prune by
default #24717" (#25642)
---
.../nereids/processor/post/MergeProjectPostProcessor.java | 8 ++++++--
.../doris/nereids/processor/post/PlanPostProcessors.java | 2 +-
.../nereids/processor/post/PushdownFilterThroughProject.java | 12 ++++++++++--
.../processor/post/RecomputeLogicalPropertiesProcessor.java | 11 ++++-------
.../org/apache/doris/nereids/processor/post/TopNScanOpt.java | 6 +++---
.../nereids/trees/plans/physical/AbstractPhysicalPlan.java | 8 ++++++++
.../java/org/apache/doris/nereids/util/MutableState.java | 1 +
7 files changed, 33 insertions(+), 15 deletions(-)
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/MergeProjectPostProcessor.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/MergeProjectPostProcessor.java
index 4a5ad492435..1c465cb790d 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/MergeProjectPostProcessor.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/MergeProjectPostProcessor.java
@@ -37,8 +37,12 @@ public class MergeProjectPostProcessor extends
PlanPostProcessor {
Plan newChild = child.accept(this, ctx);
if (newChild instanceof PhysicalProject) {
List<NamedExpression> projections =
project.mergeProjections((PhysicalProject) newChild);
- return project.withProjectionsAndChild(projections,
newChild.child(0));
+ return (PhysicalProject) project
+ .withProjectionsAndChild(projections, newChild.child(0))
+ .copyStatsAndGroupIdFrom(project);
}
- return child != newChild ?
project.withChildren(Lists.newArrayList(newChild)) : project;
+ return child != newChild
+ ? (PhysicalProject)
project.withChildren(Lists.newArrayList(newChild)).copyStatsAndGroupIdFrom(project)
+ : project;
}
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/PlanPostProcessors.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/PlanPostProcessors.java
index 787be605db1..9ae4c55608b 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/PlanPostProcessors.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/PlanPostProcessors.java
@@ -61,6 +61,7 @@ public class PlanPostProcessors {
builder.add(new PushdownFilterThroughProject());
builder.add(new MergeProjectPostProcessor());
builder.add(new RecomputeLogicalPropertiesProcessor());
+ builder.add(new TopNScanOpt());
// after generate rf, DO NOT replace PLAN NODE
builder.add(new FragmentProcessor());
if
(!cascadesContext.getConnectContext().getSessionVariable().getRuntimeFilterMode()
@@ -71,7 +72,6 @@ public class PlanPostProcessors {
}
}
builder.add(new Validator());
- builder.add(new TopNScanOpt());
return builder.build();
}
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/PushdownFilterThroughProject.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/PushdownFilterThroughProject.java
index 3eba798acbf..31ea757a036 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/PushdownFilterThroughProject.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/PushdownFilterThroughProject.java
@@ -19,6 +19,7 @@ package org.apache.doris.nereids.processor.post;
import org.apache.doris.nereids.CascadesContext;
import org.apache.doris.nereids.trees.plans.Plan;
+import org.apache.doris.nereids.trees.plans.physical.AbstractPhysicalPlan;
import org.apache.doris.nereids.trees.plans.physical.PhysicalFilter;
import org.apache.doris.nereids.trees.plans.physical.PhysicalProject;
import org.apache.doris.nereids.util.ExpressionUtils;
@@ -31,7 +32,13 @@ public class PushdownFilterThroughProject extends
PlanPostProcessor {
public Plan visitPhysicalFilter(PhysicalFilter<? extends Plan> filter,
CascadesContext context) {
Plan child = filter.child();
if (!(child instanceof PhysicalProject)) {
- return filter.withChildren(child.accept(this, context));
+ Plan newChild = child.accept(this, context);
+ if (newChild == child) {
+ return filter;
+ } else {
+ return ((AbstractPhysicalPlan)
filter.withChildren(child.accept(this, context)))
+ .copyStatsAndGroupIdFrom(filter);
+ }
}
PhysicalProject<? extends Plan> project = (PhysicalProject<? extends
Plan>) child;
@@ -39,6 +46,7 @@ public class PushdownFilterThroughProject extends
PlanPostProcessor {
ExpressionUtils.replace(filter.getConjuncts(),
project.getAliasToProducer()),
project.child());
- return project.withChildren(newFilter.accept(this, context));
+ return ((PhysicalProject) project.withChildren(newFilter.accept(this,
context)))
+ .copyStatsAndGroupIdFrom(project);
}
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/RecomputeLogicalPropertiesProcessor.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/RecomputeLogicalPropertiesProcessor.java
index 37a858c1a3d..97786684de0 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/RecomputeLogicalPropertiesProcessor.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/RecomputeLogicalPropertiesProcessor.java
@@ -18,9 +18,8 @@
package org.apache.doris.nereids.processor.post;
import org.apache.doris.nereids.CascadesContext;
-import org.apache.doris.nereids.trees.plans.AbstractPlan;
import org.apache.doris.nereids.trees.plans.Plan;
-import org.apache.doris.nereids.trees.plans.physical.PhysicalPlan;
+import org.apache.doris.nereids.trees.plans.physical.AbstractPhysicalPlan;
/**
* merge consecutive projects
@@ -28,10 +27,8 @@ import
org.apache.doris.nereids.trees.plans.physical.PhysicalPlan;
public class RecomputeLogicalPropertiesProcessor extends PlanPostProcessor {
@Override
public Plan visit(Plan plan, CascadesContext ctx) {
- PhysicalPlan physicalPlan = (PhysicalPlan) visitChildren(this, plan,
ctx);
- physicalPlan = physicalPlan.resetLogicalProperties();
- physicalPlan =
physicalPlan.withPhysicalPropertiesAndStats(physicalPlan.getPhysicalProperties(),
- ((AbstractPlan) plan).getStats());
- return physicalPlan;
+ AbstractPhysicalPlan newPlan = (AbstractPhysicalPlan)
visitChildren(this, plan, ctx);
+ return ((AbstractPhysicalPlan) newPlan.resetLogicalProperties())
+ .copyStatsAndGroupIdFrom((AbstractPhysicalPlan) plan);
}
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/TopNScanOpt.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/TopNScanOpt.java
index b221570edf1..1a0dddfe5c2 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/TopNScanOpt.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/TopNScanOpt.java
@@ -44,7 +44,7 @@ public class TopNScanOpt extends PlanPostProcessor {
Plan child = topN.child().accept(this, ctx);
topN = rewriteTopN(topN);
if (child != topN.child()) {
- topN.withChildren(child);
+ topN = ((PhysicalTopN)
topN.withChildren(child)).copyStatsAndGroupIdFrom(topN);
}
return topN;
}
@@ -54,11 +54,11 @@ public class TopNScanOpt extends PlanPostProcessor {
CascadesContext context) {
Plan child = topN.child().accept(this, context);
if (child != topN.child()) {
- topN = topN.withChildren(ImmutableList.of(child));
+ topN =
topN.withChildren(ImmutableList.of(child)).copyStatsAndGroupIdFrom(topN);
}
PhysicalTopN<? extends Plan> rewrittenTopN =
rewriteTopN(topN.getPhysicalTopN());
if (topN.getPhysicalTopN() != rewrittenTopN) {
- topN = topN.withPhysicalTopN(rewrittenTopN);
+ topN =
topN.withPhysicalTopN(rewrittenTopN).copyStatsAndGroupIdFrom(topN);
}
return topN;
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/AbstractPhysicalPlan.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/AbstractPhysicalPlan.java
index 53593eed64c..6a0ccd09341 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/AbstractPhysicalPlan.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/AbstractPhysicalPlan.java
@@ -24,6 +24,7 @@ import org.apache.doris.nereids.trees.plans.AbstractPlan;
import org.apache.doris.nereids.trees.plans.Explainable;
import org.apache.doris.nereids.trees.plans.Plan;
import org.apache.doris.nereids.trees.plans.PlanType;
+import org.apache.doris.nereids.util.MutableState;
import org.apache.doris.qe.ConnectContext;
import org.apache.doris.statistics.Statistics;
@@ -64,4 +65,11 @@ public abstract class AbstractPhysicalPlan extends
AbstractPlan implements Physi
public Plan getExplainPlan(ConnectContext ctx) {
return this;
}
+
+ public <T extends AbstractPhysicalPlan> T copyStatsAndGroupIdFrom(T from) {
+ T newPlan = (T) withPhysicalPropertiesAndStats(
+ from.getPhysicalProperties(), from.getStats());
+ newPlan.setMutableState(MutableState.KEY_GROUP,
from.getGroupIdAsString());
+ return newPlan;
+ }
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/util/MutableState.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/util/MutableState.java
index 95ba886e3f6..278a6ce894e 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/util/MutableState.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/util/MutableState.java
@@ -23,6 +23,7 @@ import java.util.Optional;
/** MutableState */
public interface MutableState {
+ String KEY_GROUP = "group";
<T> Optional<T> get(String key);
MutableState set(String key, Object value);
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]