You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by mo...@apache.org on 2022/10/10 05:05:38 UTC
[doris] branch master updated: [feature](nereids) dump physical tree and memo (#13091)
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 <mi...@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-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org