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) {