You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by na...@apache.org on 2013/03/29 17:56:06 UTC

svn commit: r1462531 - in /hive/trunk/ql/src/java/org/apache/hadoop/hive/ql: exec/Operator.java parse/SemanticAnalyzer.java

Author: namit
Date: Fri Mar 29 16:56:06 2013
New Revision: 1462531

URL: http://svn.apache.org/r1462531
Log:
HIVE-4258 Log logical plan tree for debugging
(Navis via namit)


Modified:
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/Operator.java
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/Operator.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/Operator.java?rev=1462531&r1=1462530&r2=1462531&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/Operator.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/Operator.java Fri Mar 29 16:56:06 2013
@@ -21,10 +21,12 @@ package org.apache.hadoop.hive.ql.exec;
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -1522,4 +1524,46 @@ public abstract class Operator<T extends
   public boolean opAllowedConvertMapJoin() {
     return true;
   }
+
+  public String toString() {
+    return getName() + "[" + getIdentifier() + "]";
+  }
+
+  public static String toString(Collection<Operator<? extends OperatorDesc>> top) {
+    StringBuilder builder = new StringBuilder();
+    Set<String> visited = new HashSet<String>();
+    for (Operator<?> op : top) {
+      if (builder.length() > 0) {
+        builder.append('\n');
+      }
+      toString(builder, visited, op, 0);
+    }
+    return builder.toString();
+  }
+
+  static boolean toString(StringBuilder builder, Set<String> visited, Operator<?> op, int start) {
+    String name = op.toString();
+    boolean added = visited.add(name);
+    if (start > 0) {
+      builder.append("-");
+      start++;
+    }
+    builder.append(name);
+    if (added) {
+      if (op.getNumChild() > 0) {
+        List<Operator<?>> children = op.getChildOperators();
+        for (int i = 0; i < children.size(); i++) {
+          if (i > 0) {
+            builder.append('\n');
+            for (int j = 0; j < start; j++) {
+              builder.append(' ');
+            }
+          }
+          toString(builder, visited, children.get(i), start += name.length());
+        }
+      }
+      return true;
+    }
+    return false;
+  }
 }

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java?rev=1462531&r1=1462530&r2=1462531&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java Fri Mar 29 16:56:06 2013
@@ -8527,11 +8527,19 @@ public class SemanticAnalyzer extends Ba
       setTableAccessInfo(tableAccessAnalyzer.analyzeTableAccess());
     }
 
+    if (LOG.isDebugEnabled()) {
+      LOG.debug("\n" + Operator.toString(pCtx.getTopOps().values()));
+    }
+
     Optimizer optm = new Optimizer();
     optm.setPctx(pCtx);
     optm.initialize(conf);
     pCtx = optm.optimize();
 
+    if (LOG.isDebugEnabled()) {
+      LOG.debug("\n" + Operator.toString(pCtx.getTopOps().values()));
+    }
+
     // Generate column access stats if required - wait until column pruning takes place
     // during optimization
     if (HiveConf.getBoolVar(this.conf, HiveConf.ConfVars.HIVE_STATS_COLLECT_SCANCOLS) == true) {