public String dump(int level, HashSet<Integer> seenOpts) {
    Integer idObj = Integer.valueOf(id);
    if (seenOpts.contains(idObj)) {
      return null;
    }
    seenOpts.add(idObj);

    StringBuilder s = new StringBuilder();
    String ls = getLevelString(level);
    s.append(ls);
    s.append("<" + getName() + ">");
    s.append("Id =" + id);

    if (childOperators != null) {
      s.append(ls);
      s.append("  <Children>");
      for (Operator<? extends OperatorDesc> o : childOperators) {
        s.append(o.dump(level + 2, seenOpts));
      }
      s.append(ls);
      s.append("  <\\Children>");
    }

    if (parentOperators != null) {
      s.append(ls);
      s.append("  <Parent>");
      for (Operator<? extends OperatorDesc> o : parentOperators) {
        s.append("Id = " + o.id + " ");
        s.append(o.dump(level, seenOpts));
      }
      s.append("<\\Parent>");
    }

    s.append(ls);
    s.append("<\\" + getName() + ">");
    return s.toString();
  }
Returns a map of output column name to input expression map Note that
currently it returns only key columns for ReduceSink and GroupBy operators.

@return null if the operator doesn't change columns
ql/src/java/org/apache/hadoop/hive/ql/exec/Operator.java