This is an automated email from the ASF dual-hosted git repository.
siddteotia pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pinot.git
The following commit(s) were added to refs/heads/master by this push:
new 0770bb12ea add debug string to query plan [MINOR] (#9497)
0770bb12ea is described below
commit 0770bb12eaaf2979f5bec4e33a11aff6b64dbae3
Author: Almog Gavra <[email protected]>
AuthorDate: Fri Sep 30 12:44:36 2022 -0700
add debug string to query plan [MINOR] (#9497)
* add debug string to query plan
* fix checkstyle
* add server instances
* rename to explain and fix some bugs
* fix more bugs
* oops, remove sout line
---
.../org/apache/pinot/query/planner/QueryPlan.java | 53 ++++++++++++++++++++++
.../pinot/query/planner/stage/AggregateNode.java | 5 ++
.../pinot/query/planner/stage/FilterNode.java | 5 ++
.../apache/pinot/query/planner/stage/JoinNode.java | 5 ++
.../query/planner/stage/MailboxReceiveNode.java | 5 ++
.../pinot/query/planner/stage/MailboxSendNode.java | 5 ++
.../pinot/query/planner/stage/ProjectNode.java | 5 ++
.../apache/pinot/query/planner/stage/SortNode.java | 5 ++
.../pinot/query/planner/stage/StageNode.java | 2 +
.../pinot/query/planner/stage/TableScanNode.java | 5 ++
.../pinot/query/planner/stage/ValueNode.java | 5 ++
11 files changed, 100 insertions(+)
diff --git
a/pinot-query-planner/src/main/java/org/apache/pinot/query/planner/QueryPlan.java
b/pinot-query-planner/src/main/java/org/apache/pinot/query/planner/QueryPlan.java
index b13194f4b8..d8770ed3bf 100644
---
a/pinot-query-planner/src/main/java/org/apache/pinot/query/planner/QueryPlan.java
+++
b/pinot-query-planner/src/main/java/org/apache/pinot/query/planner/QueryPlan.java
@@ -18,11 +18,14 @@
*/
package org.apache.pinot.query.planner;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.calcite.util.Pair;
import org.apache.pinot.query.planner.logical.LogicalPlanner;
+import org.apache.pinot.query.planner.stage.MailboxReceiveNode;
import org.apache.pinot.query.planner.stage.StageNode;
+import org.apache.pinot.query.planner.stage.TableScanNode;
/**
@@ -71,4 +74,54 @@ public class QueryPlan {
public List<Pair<Integer, String>> getQueryResultFields() {
return _queryResultFields;
}
+
+ public String explain() {
+ if (_queryStageMap.isEmpty()) {
+ return "EMPTY";
+ }
+
+ StringBuilder builder = new StringBuilder();
+ explain(
+ builder,
+ _queryStageMap.get(0),
+ "",
+ "");
+ return builder.toString();
+ }
+
+ private void explain(
+ StringBuilder builder,
+ StageNode root,
+ String prefix,
+ String childPrefix
+ ) {
+ int stage = root.getStageId();
+
+ builder
+ .append(prefix)
+ .append("[").append(stage).append("] ")
+ .append(root.explain());
+
+ if (root instanceof TableScanNode) {
+ builder.append(' ');
+
builder.append(_stageMetadataMap.get(root.getStageId()).getServerInstanceToSegmentsMap());
+ }
+
+ builder.append('\n');
+
+ if (root instanceof MailboxReceiveNode) {
+ int senderStage = ((MailboxReceiveNode) root).getSenderStageId();
+ StageNode sender = _queryStageMap.get(senderStage);
+ explain(builder, sender, childPrefix + "└── ", childPrefix + " ");
+ } else {
+ for (Iterator<StageNode> iterator = root.getInputs().iterator();
iterator.hasNext();) {
+ StageNode input = iterator.next();
+ if (iterator.hasNext()) {
+ explain(builder, input, childPrefix + "├── ", childPrefix + "│ ");
+ } else {
+ explain(builder, input, childPrefix + "└── ", childPrefix + " ");
+ }
+ }
+ }
+ }
}
diff --git
a/pinot-query-planner/src/main/java/org/apache/pinot/query/planner/stage/AggregateNode.java
b/pinot-query-planner/src/main/java/org/apache/pinot/query/planner/stage/AggregateNode.java
index b67c5a9500..70174df265 100644
---
a/pinot-query-planner/src/main/java/org/apache/pinot/query/planner/stage/AggregateNode.java
+++
b/pinot-query-planner/src/main/java/org/apache/pinot/query/planner/stage/AggregateNode.java
@@ -54,4 +54,9 @@ public class AggregateNode extends AbstractStageNode {
public List<RexExpression> getGroupSet() {
return _groupSet;
}
+
+ @Override
+ public String explain() {
+ return "AGGREGATE";
+ }
}
diff --git
a/pinot-query-planner/src/main/java/org/apache/pinot/query/planner/stage/FilterNode.java
b/pinot-query-planner/src/main/java/org/apache/pinot/query/planner/stage/FilterNode.java
index 2281d4e712..0d960e951a 100644
---
a/pinot-query-planner/src/main/java/org/apache/pinot/query/planner/stage/FilterNode.java
+++
b/pinot-query-planner/src/main/java/org/apache/pinot/query/planner/stage/FilterNode.java
@@ -40,4 +40,9 @@ public class FilterNode extends AbstractStageNode {
public RexExpression getCondition() {
return _condition;
}
+
+ @Override
+ public String explain() {
+ return "FILTER";
+ }
}
diff --git
a/pinot-query-planner/src/main/java/org/apache/pinot/query/planner/stage/JoinNode.java
b/pinot-query-planner/src/main/java/org/apache/pinot/query/planner/stage/JoinNode.java
index 222d04d9ca..b34d74d574 100644
---
a/pinot-query-planner/src/main/java/org/apache/pinot/query/planner/stage/JoinNode.java
+++
b/pinot-query-planner/src/main/java/org/apache/pinot/query/planner/stage/JoinNode.java
@@ -59,6 +59,11 @@ public class JoinNode extends AbstractStageNode {
return _joinClause;
}
+ @Override
+ public String explain() {
+ return "JOIN";
+ }
+
public static class JoinKeys {
@ProtoProperties
private KeySelector<Object[], Object[]> _leftJoinKeySelector;
diff --git
a/pinot-query-planner/src/main/java/org/apache/pinot/query/planner/stage/MailboxReceiveNode.java
b/pinot-query-planner/src/main/java/org/apache/pinot/query/planner/stage/MailboxReceiveNode.java
index 3fa3a55acd..e358c2cb13 100644
---
a/pinot-query-planner/src/main/java/org/apache/pinot/query/planner/stage/MailboxReceiveNode.java
+++
b/pinot-query-planner/src/main/java/org/apache/pinot/query/planner/stage/MailboxReceiveNode.java
@@ -56,4 +56,9 @@ public class MailboxReceiveNode extends AbstractStageNode {
public KeySelector<Object[], Object[]> getPartitionKeySelector() {
return _partitionKeySelector;
}
+
+ @Override
+ public String explain() {
+ return "MAIL_RECEIVE";
+ }
}
diff --git
a/pinot-query-planner/src/main/java/org/apache/pinot/query/planner/stage/MailboxSendNode.java
b/pinot-query-planner/src/main/java/org/apache/pinot/query/planner/stage/MailboxSendNode.java
index f67f85e573..05459b5634 100644
---
a/pinot-query-planner/src/main/java/org/apache/pinot/query/planner/stage/MailboxSendNode.java
+++
b/pinot-query-planner/src/main/java/org/apache/pinot/query/planner/stage/MailboxSendNode.java
@@ -56,4 +56,9 @@ public class MailboxSendNode extends AbstractStageNode {
public KeySelector<Object[], Object[]> getPartitionKeySelector() {
return _partitionKeySelector;
}
+
+ @Override
+ public String explain() {
+ return "MAIL_SEND";
+ }
}
diff --git
a/pinot-query-planner/src/main/java/org/apache/pinot/query/planner/stage/ProjectNode.java
b/pinot-query-planner/src/main/java/org/apache/pinot/query/planner/stage/ProjectNode.java
index 1b1f88b6d0..250a38885f 100644
---
a/pinot-query-planner/src/main/java/org/apache/pinot/query/planner/stage/ProjectNode.java
+++
b/pinot-query-planner/src/main/java/org/apache/pinot/query/planner/stage/ProjectNode.java
@@ -41,4 +41,9 @@ public class ProjectNode extends AbstractStageNode {
public List<RexExpression> getProjects() {
return _projects;
}
+
+ @Override
+ public String explain() {
+ return "PROJECT";
+ }
}
diff --git
a/pinot-query-planner/src/main/java/org/apache/pinot/query/planner/stage/SortNode.java
b/pinot-query-planner/src/main/java/org/apache/pinot/query/planner/stage/SortNode.java
index 6dc27ce12e..4df23e7325 100644
---
a/pinot-query-planner/src/main/java/org/apache/pinot/query/planner/stage/SortNode.java
+++
b/pinot-query-planner/src/main/java/org/apache/pinot/query/planner/stage/SortNode.java
@@ -67,4 +67,9 @@ public class SortNode extends AbstractStageNode {
public int getOffset() {
return _offset;
}
+
+ @Override
+ public String explain() {
+ return "SORT" + (_fetch > 0 ? " (LIMIT " + _fetch + ")" : "");
+ }
}
diff --git
a/pinot-query-planner/src/main/java/org/apache/pinot/query/planner/stage/StageNode.java
b/pinot-query-planner/src/main/java/org/apache/pinot/query/planner/stage/StageNode.java
index bd69371484..8f170a065c 100644
---
a/pinot-query-planner/src/main/java/org/apache/pinot/query/planner/stage/StageNode.java
+++
b/pinot-query-planner/src/main/java/org/apache/pinot/query/planner/stage/StageNode.java
@@ -48,4 +48,6 @@ public interface StageNode extends Serializable {
Set<Integer> getPartitionKeys();
void setPartitionKeys(Collection<Integer> partitionKeys);
+
+ String explain();
}
diff --git
a/pinot-query-planner/src/main/java/org/apache/pinot/query/planner/stage/TableScanNode.java
b/pinot-query-planner/src/main/java/org/apache/pinot/query/planner/stage/TableScanNode.java
index 01dda45d3a..bcd8493cc7 100644
---
a/pinot-query-planner/src/main/java/org/apache/pinot/query/planner/stage/TableScanNode.java
+++
b/pinot-query-planner/src/main/java/org/apache/pinot/query/planner/stage/TableScanNode.java
@@ -46,4 +46,9 @@ public class TableScanNode extends AbstractStageNode {
public List<String> getTableScanColumns() {
return _tableScanColumns;
}
+
+ @Override
+ public String explain() {
+ return "TABLE SCAN (" + _tableName + ")";
+ }
}
diff --git
a/pinot-query-planner/src/main/java/org/apache/pinot/query/planner/stage/ValueNode.java
b/pinot-query-planner/src/main/java/org/apache/pinot/query/planner/stage/ValueNode.java
index 082a4d3b36..3918338d19 100644
---
a/pinot-query-planner/src/main/java/org/apache/pinot/query/planner/stage/ValueNode.java
+++
b/pinot-query-planner/src/main/java/org/apache/pinot/query/planner/stage/ValueNode.java
@@ -51,4 +51,9 @@ public class ValueNode extends AbstractStageNode {
public List<List<RexExpression>> getLiteralRows() {
return _literalRows;
}
+
+ @Override
+ public String explain() {
+ return "LITERAL";
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]