This is an automated email from the ASF dual-hosted git repository. morrysnow 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 375dfedd83 [feature](nereids) dump physical tree and memo (#13091) 375dfedd83 is described below commit 375dfedd8366224b5cd0b2bee5ad5c8f40d521a4 Author: minghong <minghong.z...@163.com> AuthorDate: Mon Oct 10 13:05:28 2022 +0800 [feature](nereids) dump physical tree and memo (#13091) dump memo info and physical plan in stdout and log set `enable_nereids_trace` variable true/false to open/close this dump. following is a fragment of memo: ``` Group[GroupId#8] GroupId#8(plan=PhysicalHashJoin ( type=INNER_JOIN, hashJoinCondition=[(r_regionkey#250 = n_regionkey#255)], otherJoinCondition=Optional.empty, stats=null )) children=[GroupId#6 GroupId#7 ] stats=(rows=25, isReduced=false, width=2) GroupId#8(plan=PhysicalHashJoin ( type=INNER_JOIN, hashJoinCondition=[(r_regionkey#250 = n_regionkey#255)], otherJoinCondition=Optional.empty, stats=null )) children=[GroupId#7 GroupId#6 ] stats=(rows=25, isReduced=false, width=2) ``` --- .../java/org/apache/doris/nereids/NereidsPlanner.java | 12 ++++++++++++ .../org/apache/doris/nereids/memo/GroupExpression.java | 10 +++++++++- .../main/java/org/apache/doris/nereids/memo/Memo.java | 13 +++++++++++++ .../doris/nereids/properties/DistributionSpec.java | 2 +- .../trees/plans/physical/PhysicalDistribute.java | 2 +- .../nereids/trees/plans/physical/PhysicalFilter.java | 3 ++- .../nereids/trees/plans/physical/PhysicalHashJoin.java | 3 ++- .../main/java/org/apache/doris/qe/SessionVariable.java | 9 +++++++++ .../org/apache/doris/statistics/StatsDeriveResult.java | 17 +++++++++++++++++ 9 files changed, 66 insertions(+), 5 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/NereidsPlanner.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/NereidsPlanner.java index e545c4fb06..ff1ec80890 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/NereidsPlanner.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/NereidsPlanner.java @@ -40,9 +40,12 @@ import org.apache.doris.planner.PlanFragment; import org.apache.doris.planner.Planner; import org.apache.doris.planner.RuntimeFilter; import org.apache.doris.planner.ScanNode; +import org.apache.doris.qe.ConnectContext; import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.Lists; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import java.util.ArrayList; import java.util.List; @@ -52,6 +55,7 @@ import java.util.stream.Collectors; * Planner to do query plan in Nereids. */ public class NereidsPlanner extends Planner { + public static final Logger LOG = LogManager.getLogger(NereidsPlanner.class); private CascadesContext cascadesContext; private final StatementContext statementContext; @@ -72,6 +76,14 @@ public class NereidsPlanner extends Planner { PhysicalPlan physicalPlan = plan(logicalPlanAdapter.getLogicalPlan(), PhysicalProperties.ANY); PhysicalPlanTranslator physicalPlanTranslator = new PhysicalPlanTranslator(); PlanTranslatorContext planTranslatorContext = new PlanTranslatorContext(cascadesContext); + if (ConnectContext.get().getSessionVariable().isEnableNereidsTrace()) { + String tree = physicalPlan.treeString(); + System.out.println(tree); + LOG.info(tree); + String memo = cascadesContext.getMemo().toString(); + System.out.println(memo); + LOG.info(memo); + } PlanFragment root = physicalPlanTranslator.translatePlan(physicalPlan, planTranslatorContext); scanNodeList = planTranslatorContext.getScanNodes(); 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 045eb7971a..dddfc29392 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 @@ -227,6 +227,14 @@ public class GroupExpression { @Override public String toString() { - return "GroupExpression(plan=" + plan.toString() + ")"; + StringBuilder builder = new StringBuilder(); + builder.append(ownerGroup.getGroupId()) + .append("(plan=" + plan.toString() + ") children=["); + for (Group group : children) { + builder.append(group.getGroupId()).append(" "); + } + builder.append("] stats="); + builder.append(ownerGroup.getStatistics()); + return builder.toString(); } } 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 d28914c041..3ab7601b2d 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 @@ -552,4 +552,17 @@ public class Memo { } } } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("root:").append(getRoot()).append("\n"); + for (Group group : groups.values()) { + builder.append(group.toString()).append("\n"); + for (GroupExpression groupExpression : group.getPhysicalExpressions()) { + builder.append(" ").append(groupExpression.toString()).append("\n"); + } + } + return builder.toString(); + } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/properties/DistributionSpec.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/properties/DistributionSpec.java index ab7609f1d7..f748d6e9e1 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/properties/DistributionSpec.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/properties/DistributionSpec.java @@ -51,7 +51,7 @@ public abstract class DistributionSpec { @Override public String toString() { - return this.getClass().toString(); + return this.getClass().getSimpleName(); } @Override diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalDistribute.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalDistribute.java index 3b32cb4f9e..3163036665 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalDistribute.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalDistribute.java @@ -63,7 +63,7 @@ public class PhysicalDistribute<CHILD_TYPE extends Plan> extends PhysicalUnary<C public String toString() { return Utils.toSqlString("PhysicalDistribute", "distributionSpec", distributionSpec, - "level", statsDeriveResult.width + "stats", statsDeriveResult ); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalFilter.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalFilter.java index 5eccccfaa1..6d6e01ef16 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalFilter.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalFilter.java @@ -67,7 +67,8 @@ public class PhysicalFilter<CHILD_TYPE extends Plan> extends PhysicalUnary<CHILD @Override public String toString() { return Utils.toSqlString("PhysicalFilter", - "predicates", predicates + "predicates", predicates, + "stats", statsDeriveResult ); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalHashJoin.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalHashJoin.java index f45877c268..949d33a11d 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalHashJoin.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalHashJoin.java @@ -91,7 +91,8 @@ public class PhysicalHashJoin< return Utils.toSqlString("PhysicalHashJoin", "type", joinType, "hashJoinCondition", hashJoinConjuncts, - "otherJoinCondition", otherJoinCondition); + "otherJoinCondition", otherJoinCondition, + "stats", statsDeriveResult); } @Override diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java b/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java index f3e5979f86..3c2ed82131 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java +++ b/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java @@ -200,6 +200,7 @@ public class SessionVariable implements Serializable, Writable { public static final String ENABLE_NEREIDS_RUNTIME_FILTER = "enable_nereids_runtime_filter"; public static final String NEREIDS_STAR_SCHEMA_SUPPORT = "nereids_star_schema_support"; + public static final String ENABLE_NEREIDS_TRACE = "enable_nereids_trace"; public static final String ENABLE_NEREIDS_REORDER_TO_ELIMINATE_CROSS_JOIN = "enable_nereids_reorder_to_eliminate_cross_join"; @@ -524,6 +525,10 @@ public class SessionVariable implements Serializable, Writable { @VariableMgr.VarAttr(name = NEREIDS_STAR_SCHEMA_SUPPORT) private boolean nereidsStarSchemaSupport = true; + + @VariableMgr.VarAttr(name = ENABLE_NEREIDS_TRACE) + private boolean enableNereidsTrace = true; + @VariableMgr.VarAttr(name = ENABLE_NEREIDS_RUNTIME_FILTER) private boolean enableNereidsRuntimeFilter = true; @@ -1114,6 +1119,10 @@ public class SessionVariable implements Serializable, Writable { return isEnableNereidsPlanner() && nereidsStarSchemaSupport; } + public boolean isEnableNereidsTrace() { + return isEnableNereidsPlanner() && enableNereidsTrace; + } + public boolean isEnableNereidsRuntimeFilter() { return enableNereidsRuntimeFilter; } diff --git a/fe/fe-core/src/main/java/org/apache/doris/statistics/StatsDeriveResult.java b/fe/fe-core/src/main/java/org/apache/doris/statistics/StatsDeriveResult.java index 9ce156be6c..6b392d4296 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/statistics/StatsDeriveResult.java +++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/StatsDeriveResult.java @@ -146,4 +146,21 @@ public class StatsDeriveResult { public StatsDeriveResult copy() { return new StatsDeriveResult(this); } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("(rows=").append(rowCount) + .append(", isReduced=").append(isReduced) + .append(", width=").append(width).append(")"); + return builder.toString(); + } + + public static String toString(StatsDeriveResult stats) { + if (stats == null) { + return "null"; + } else { + return stats.toString(); + } + } } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org