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 60af62b41e [enhancement](Nereids) remove deriveStats jobs for some 
groupExpression  (#24835)
60af62b41e is described below

commit 60af62b41e13c8f63adcacc22ae50a135fae3c38
Author: 谢健 <jianx...@gmail.com>
AuthorDate: Mon Sep 25 17:14:16 2023 +0800

    [enhancement](Nereids) remove deriveStats jobs for some groupExpression  
(#24835)
    
    Don't call DeriveStatJob for follow group expressions:
    
    - the group expression that is generated by the joinCommute rule
    - the group expression that is generated by the implementation rule without 
creating a new group
---
 .../doris/nereids/jobs/cascades/ApplyRuleJob.java   | 21 +++++++++++++++++++--
 1 file changed, 19 insertions(+), 2 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/cascades/ApplyRuleJob.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/cascades/ApplyRuleJob.java
index 0c366907a5..edf8a48afb 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/cascades/ApplyRuleJob.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/cascades/ApplyRuleJob.java
@@ -30,6 +30,7 @@ import org.apache.doris.nereids.metrics.event.TransformEvent;
 import org.apache.doris.nereids.minidump.NereidsTracer;
 import org.apache.doris.nereids.pattern.GroupExpressionMatching;
 import org.apache.doris.nereids.rules.Rule;
+import org.apache.doris.nereids.rules.RuleType;
 import org.apache.doris.nereids.trees.plans.Plan;
 import org.apache.doris.nereids.trees.plans.logical.LogicalPlan;
 
@@ -82,11 +83,27 @@ public class ApplyRuleJob extends Job {
                 newGroupExpression.setFromRule(rule);
                 if (newPlan instanceof LogicalPlan) {
                     pushJob(new OptimizeGroupExpressionJob(newGroupExpression, 
context));
+                    if 
(!rule.getRuleType().equals(RuleType.LOGICAL_JOIN_COMMUTE)) {
+                        pushJob(new DeriveStatsJob(newGroupExpression, 
context));
+                    } else {
+                        // The Join Commute rule preserves the operator's 
expression and children,
+                        // thereby not altering the statistics. Hence, there 
is no need to derive statistics for it.
+                        groupExpression.setStatDerived(true);
+                    }
                 } else {
                     pushJob(new CostAndEnforcerJob(newGroupExpression, 
context));
+                    if (newGroupExpression.children().stream().anyMatch(g -> 
g.getLogicalExpressions().isEmpty())) {
+                        // If a rule creates a new group when generating a 
physical plan,
+                        // then we need to derive statistics for it, e.g., 
logicalTopToPhysicalTopN rule:
+                        // logicalTopN ==> GlobalPhysicalTopN
+                        //                   -> localPhysicalTopN
+                        // These implementation rules integrate rules for plan 
shape transformation.
+                        pushJob(new DeriveStatsJob(newGroupExpression, 
context));
+                    } else {
+                        groupExpression.setStatDerived(true);
+                    }
                 }
-                // we should derive stats for new logical/physical plan if the 
plan missing the stats
-                pushJob(new DeriveStatsJob(newGroupExpression, context));
+
                 NereidsTracer.logApplyRuleEvent(rule.toString(), plan, 
newGroupExpression.getPlan());
                 APPLY_RULE_TRACER.log(TransformEvent.of(groupExpression, plan, 
newPlans, rule.getRuleType()),
                         rule::isRewrite);


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to