This is an automated email from the ASF dual-hosted git repository.

englefly 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 bd40767754 [stats](nereids) dump col stats for all physical plan node 
and cost details in memo #21902
bd40767754 is described below

commit bd407677543589512735ee4c603ef5cba1299d96
Author: minghong <engle...@gmail.com>
AuthorDate: Wed Jul 19 14:10:26 2023 +0800

    [stats](nereids) dump col stats for all physical plan node and cost details 
in memo #21902
    
    1. print cost detail
    2. dump col stats in memo
---
 .../main/java/org/apache/doris/nereids/cost/CostV1.java |  2 +-
 .../doris/nereids/jobs/cascades/CostAndEnforcerJob.java |  4 ++--
 .../org/apache/doris/nereids/memo/GroupExpression.java  | 12 ++++++++----
 .../main/java/org/apache/doris/nereids/memo/Memo.java   | 17 ++---------------
 .../properties/EnforceMissingPropertiesHelper.java      |  2 +-
 .../java/org/apache/doris/statistics/Statistics.java    | 11 +++++++++++
 6 files changed, 25 insertions(+), 23 deletions(-)

diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/cost/CostV1.java 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/cost/CostV1.java
index 2747346390..b5c5b50bd2 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/cost/CostV1.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/cost/CostV1.java
@@ -105,7 +105,7 @@ class CostV1 implements Cost {
     @Override
     public String toString() {
         StringBuilder sb = new StringBuilder();
-        sb.append(cost).append("[").append((long) cpuCost).append("/")
+        sb.append("[").append((long) cpuCost).append("/")
                 .append((long) memoryCost).append("/").append((long) 
networkCost)
                 .append("/").append((long) penalty).append("]");
         return sb.toString();
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/cascades/CostAndEnforcerJob.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/cascades/CostAndEnforcerJob.java
index 8ba5554294..1c41a48ecd 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/cascades/CostAndEnforcerJob.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/cascades/CostAndEnforcerJob.java
@@ -141,7 +141,7 @@ public class CostAndEnforcerJob extends Job implements 
Cloneable {
             // Calculate cost
             if (curChildIndex == 0 && prevChildIndex == -1) {
                 curNodeCost = CostCalculator.calculateCost(groupExpression, 
requestChildrenProperties);
-                groupExpression.setCost(curNodeCost.getValue());
+                groupExpression.setCost(curNodeCost);
                 curTotalCost = curNodeCost;
             }
 
@@ -257,7 +257,7 @@ public class CostAndEnforcerJob extends Job implements 
Cloneable {
 
         // recompute cost after adjusting property
         curNodeCost = CostCalculator.calculateCost(groupExpression, 
requestChildrenProperties);
-        groupExpression.setCost(curNodeCost.getValue());
+        groupExpression.setCost(curNodeCost);
         curTotalCost = curNodeCost;
         for (int i = 0; i < outputChildrenProperties.size(); i++) {
             PhysicalProperties childProperties = 
outputChildrenProperties.get(i);
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/memo/GroupExpression.java 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/memo/GroupExpression.java
index 6264dd2ce6..b0da8459f9 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/memo/GroupExpression.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/memo/GroupExpression.java
@@ -53,7 +53,7 @@ public class GroupExpression {
     private static final EventProducer COST_STATE_TRACER = new 
EventProducer(CostStateUpdateEvent.class,
             EventChannel.getDefaultChannel().addConsumers(new 
LogConsumer(CostStateUpdateEvent.class,
                     EventChannel.LOG)));
-    private double cost = 0.0;
+    private Cost cost;
     private Group ownerGroup;
     private final List<Group> children;
     private final Plan plan;
@@ -284,11 +284,11 @@ public class GroupExpression {
         this.ownerGroup = null;
     }
 
-    public double getCost() {
+    public Cost getCost() {
         return cost;
     }
 
-    public void setCost(double cost) {
+    public void setCost(Cost cost) {
         this.cost = cost;
     }
 
@@ -328,7 +328,11 @@ public class GroupExpression {
         } else {
             builder.append("#").append(ownerGroup.getGroupId().asInt());
         }
-        builder.append(" cost=").append(format.format((long) cost));
+        if (cost != null) {
+            builder.append(" cost=").append(format.format((long) 
cost.getValue()) + " " + cost);
+        } else {
+            builder.append(" cost=null");
+        }
         builder.append(" estRows=").append(format.format(estOutputRowCount));
         builder.append(" children=[").append(Joiner.on(", ").join(
                         
children.stream().map(Group::getGroupId).collect(Collectors.toList())))
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/memo/Memo.java 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/memo/Memo.java
index 07984ae165..f3a96af70c 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/memo/Memo.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/memo/Memo.java
@@ -31,14 +31,11 @@ import 
org.apache.doris.nereids.trees.expressions.Expression;
 import org.apache.doris.nereids.trees.plans.GroupPlan;
 import org.apache.doris.nereids.trees.plans.LeafPlan;
 import org.apache.doris.nereids.trees.plans.Plan;
-import org.apache.doris.nereids.trees.plans.logical.LogicalFileScan;
-import org.apache.doris.nereids.trees.plans.logical.LogicalOlapScan;
 import org.apache.doris.nereids.trees.plans.logical.LogicalPlan;
 import org.apache.doris.nereids.trees.plans.logical.LogicalProject;
 import org.apache.doris.nereids.trees.plans.physical.PhysicalDistribute;
 import org.apache.doris.nereids.trees.plans.physical.PhysicalPlan;
 import org.apache.doris.qe.ConnectContext;
-import org.apache.doris.statistics.Statistics;
 
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
@@ -50,7 +47,6 @@ import org.apache.logging.log4j.Logger;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
-import java.util.Map.Entry;
 import java.util.Optional;
 import java.util.PriorityQueue;
 import java.util.stream.Collectors;
@@ -722,17 +718,8 @@ public class Memo {
         builder.append("root:").append(getRoot()).append("\n");
         for (Group group : groups.values()) {
             builder.append("\n\n").append(group);
-            builder.append("  
stats=").append(group.getStatistics()).append("\n");
-            Statistics stats = group.getStatistics();
-            if (stats != null && !group.getLogicalExpressions().isEmpty()) {
-                Plan plan = group.getLogicalExpressions().get(0).getPlan();
-                if (plan instanceof LogicalOlapScan || plan instanceof 
LogicalFileScan) {
-                    for (Entry e : stats.columnStatistics().entrySet()) {
-                        builder.append("    
").append(e.getKey()).append(":").append(e.getValue()).append("\n");
-                    }
-                }
-            }
-
+            builder.append("  stats").append("\n");
+            builder.append(group.getStatistics().detail("    "));
             builder.append("  lowest Plan(cost, properties, plan, 
childrenRequires)");
             group.getAllProperties().forEach(
                     prop -> {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/properties/EnforceMissingPropertiesHelper.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/properties/EnforceMissingPropertiesHelper.java
index bcbfffc0e7..2e9a8ac6bb 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/properties/EnforceMissingPropertiesHelper.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/properties/EnforceMissingPropertiesHelper.java
@@ -156,7 +156,7 @@ public class EnforceMissingPropertiesHelper {
                 oldOutputProperty, newOutputProperty));
         
enforcer.setEstOutputRowCount(enforcer.getOwnerGroup().getStatistics().getRowCount());
         Cost enforcerCost = CostCalculator.calculateCost(enforcer, 
Lists.newArrayList(oldOutputProperty));
-        enforcer.setCost(enforcerCost.getValue());
+        enforcer.setCost(enforcerCost);
         curTotalCost = CostCalculator.addChildCost(enforcer.getPlan(),
             enforcerCost,
             curTotalCost,
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/statistics/Statistics.java 
b/fe/fe-core/src/main/java/org/apache/doris/statistics/Statistics.java
index d1872edddb..5c628aaba3 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/statistics/Statistics.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/Statistics.java
@@ -243,4 +243,15 @@ public class Statistics {
             }
         }
     }
+
+    public String detail(String prefix) {
+        StringBuilder builder = new StringBuilder();
+        builder.append(prefix).append("rows=").append(rowCount).append("\n");
+        
builder.append(prefix).append("tupleSize=").append(computeTupleSize()).append("\n");
+
+        for (Entry<Expression, ColumnStatistic> entry : 
expressionToColumnStats.entrySet()) {
+            builder.append(prefix).append(entry.getKey()).append(" -> 
").append(entry.getValue()).append("\n");
+        }
+        return builder.toString();
+    }
 }


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

Reply via email to