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]

Reply via email to