You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by ha...@apache.org on 2014/05/27 03:35:17 UTC

svn commit: r1597694 [1/3] - in /hive/trunk/ql/src: java/org/apache/hadoop/hive/ql/exec/ java/org/apache/hadoop/hive/ql/optimizer/ java/org/apache/hadoop/hive/ql/optimizer/ppr/ java/org/apache/hadoop/hive/ql/parse/ java/org/apache/hadoop/hive/ql/plan/ ...

Author: hashutosh
Date: Tue May 27 01:35:16 2014
New Revision: 1597694

URL: http://svn.apache.org/r1597694
Log:
HIVE-6910 : Invalid column access info for partitioned table (Navis via Ashutosh Chauhan)

Modified:
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/TableScanOperator.java
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/ColumnPrunerProcFactory.java
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRTableScan1.java
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMapRedUtils.java
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/ppr/PartitionPruner.java
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/ColumnAccessAnalyzer.java
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/ProcessAnalyzeTable.java
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/PrunedPartitionList.java
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/QBParseInfo.java
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/plan/TableScanDesc.java
    hive/trunk/ql/src/test/queries/clientpositive/column_access_stats.q
    hive/trunk/ql/src/test/results/clientpositive/column_access_stats.q.out
    hive/trunk/ql/src/test/results/compiler/plan/case_sensitivity.q.xml
    hive/trunk/ql/src/test/results/compiler/plan/cast1.q.xml
    hive/trunk/ql/src/test/results/compiler/plan/groupby1.q.xml
    hive/trunk/ql/src/test/results/compiler/plan/groupby2.q.xml
    hive/trunk/ql/src/test/results/compiler/plan/groupby3.q.xml
    hive/trunk/ql/src/test/results/compiler/plan/groupby4.q.xml
    hive/trunk/ql/src/test/results/compiler/plan/groupby5.q.xml
    hive/trunk/ql/src/test/results/compiler/plan/groupby6.q.xml
    hive/trunk/ql/src/test/results/compiler/plan/input1.q.xml
    hive/trunk/ql/src/test/results/compiler/plan/input2.q.xml
    hive/trunk/ql/src/test/results/compiler/plan/input20.q.xml
    hive/trunk/ql/src/test/results/compiler/plan/input3.q.xml
    hive/trunk/ql/src/test/results/compiler/plan/input4.q.xml
    hive/trunk/ql/src/test/results/compiler/plan/input5.q.xml
    hive/trunk/ql/src/test/results/compiler/plan/input6.q.xml
    hive/trunk/ql/src/test/results/compiler/plan/input7.q.xml
    hive/trunk/ql/src/test/results/compiler/plan/input8.q.xml
    hive/trunk/ql/src/test/results/compiler/plan/input9.q.xml
    hive/trunk/ql/src/test/results/compiler/plan/input_part1.q.xml
    hive/trunk/ql/src/test/results/compiler/plan/input_testsequencefile.q.xml
    hive/trunk/ql/src/test/results/compiler/plan/input_testxpath.q.xml
    hive/trunk/ql/src/test/results/compiler/plan/input_testxpath2.q.xml
    hive/trunk/ql/src/test/results/compiler/plan/join1.q.xml
    hive/trunk/ql/src/test/results/compiler/plan/join2.q.xml
    hive/trunk/ql/src/test/results/compiler/plan/join3.q.xml
    hive/trunk/ql/src/test/results/compiler/plan/join4.q.xml
    hive/trunk/ql/src/test/results/compiler/plan/join5.q.xml
    hive/trunk/ql/src/test/results/compiler/plan/join6.q.xml
    hive/trunk/ql/src/test/results/compiler/plan/join7.q.xml
    hive/trunk/ql/src/test/results/compiler/plan/join8.q.xml
    hive/trunk/ql/src/test/results/compiler/plan/sample1.q.xml
    hive/trunk/ql/src/test/results/compiler/plan/sample2.q.xml
    hive/trunk/ql/src/test/results/compiler/plan/sample3.q.xml
    hive/trunk/ql/src/test/results/compiler/plan/sample4.q.xml
    hive/trunk/ql/src/test/results/compiler/plan/sample5.q.xml
    hive/trunk/ql/src/test/results/compiler/plan/sample6.q.xml
    hive/trunk/ql/src/test/results/compiler/plan/sample7.q.xml
    hive/trunk/ql/src/test/results/compiler/plan/subq.q.xml
    hive/trunk/ql/src/test/results/compiler/plan/udf1.q.xml
    hive/trunk/ql/src/test/results/compiler/plan/udf4.q.xml
    hive/trunk/ql/src/test/results/compiler/plan/udf6.q.xml
    hive/trunk/ql/src/test/results/compiler/plan/udf_case.q.xml
    hive/trunk/ql/src/test/results/compiler/plan/udf_when.q.xml
    hive/trunk/ql/src/test/results/compiler/plan/union.q.xml

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/TableScanOperator.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/TableScanOperator.java?rev=1597694&r1=1597693&r2=1597694&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/TableScanOperator.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/TableScanOperator.java Tue May 27 01:35:16 2014
@@ -243,31 +243,28 @@ public class TableScanOperator extends O
     return "TS";
   }
 
-  // This 'neededColumnIDs' field is included in this operator class instead of
-  // its desc class.The reason is that 1)tableScanDesc can not be instantiated,
-  // and 2) it will fail some join and union queries if this is added forcibly
-  // into tableScanDesc.
-  // Both neededColumnIDs and neededColumns should never be null.
-  // When neededColumnIDs is an empty list,
-  // it means no needed column (e.g. we do not need any column to evaluate
-  // SELECT count(*) FROM t).
-  List<Integer> neededColumnIDs;
-  List<String> neededColumns;
-
   public void setNeededColumnIDs(List<Integer> orign_columns) {
-    neededColumnIDs = orign_columns;
+    conf.setNeededColumnIDs(orign_columns);
   }
 
   public List<Integer> getNeededColumnIDs() {
-    return neededColumnIDs;
+    return conf.getNeededColumnIDs();
   }
 
   public void setNeededColumns(List<String> columnNames) {
-    neededColumns = columnNames;
+    conf.setNeededColumns(columnNames);
   }
 
   public List<String> getNeededColumns() {
-    return neededColumns;
+    return conf.getNeededColumns();
+  }
+
+  public void setReferencedColumns(List<String> referencedColumns) {
+    conf.setReferencedColumns(referencedColumns);
+  }
+
+  public List<String> getReferencedColumns() {
+    return conf.getReferencedColumns();
   }
 
   @Override
@@ -335,6 +332,7 @@ public class TableScanOperator extends O
     TableScanOperator ts = (TableScanOperator) super.clone();
     ts.setNeededColumnIDs(new ArrayList<Integer>(getNeededColumnIDs()));
     ts.setNeededColumns(new ArrayList<String>(getNeededColumns()));
+    ts.setReferencedColumns(new ArrayList<String>(getReferencedColumns()));
     return ts;
   }
 

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/ColumnPrunerProcFactory.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/ColumnPrunerProcFactory.java?rev=1597694&r1=1597693&r2=1597694&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/ColumnPrunerProcFactory.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/ColumnPrunerProcFactory.java Tue May 27 01:35:16 2014
@@ -312,6 +312,7 @@ public final class ColumnPrunerProcFacto
           cols);
       List<Integer> neededColumnIds = new ArrayList<Integer>();
       List<String> neededColumnNames = new ArrayList<String>();
+      List<String> referencedColumnNames = new ArrayList<String>();
       RowResolver inputRR = cppCtx.getOpToParseCtxMap().get(scanOp).getRowResolver();
       TableScanDesc desc = scanOp.getConf();
       List<VirtualColumn> virtualCols = desc.getVirtualCols();
@@ -322,11 +323,12 @@ public final class ColumnPrunerProcFacto
         cols.add(VirtualColumn.RAWDATASIZE.getName());
       }
 
-      for (int i = 0; i < cols.size(); i++) {
-        String[] tabCol = inputRR.reverseLookup(cols.get(i));
-        if(tabCol == null) {
+      for (String column : cols) {
+        String[] tabCol = inputRR.reverseLookup(column);
+        if (tabCol == null) {
           continue;
         }
+        referencedColumnNames.add(column);
         ColumnInfo colInfo = inputRR.get(tabCol[0], tabCol[1]);
         if (colInfo.getIsVirtualCol()) {
           // part is also a virtual column, but part col should not in this
@@ -340,17 +342,18 @@ public final class ColumnPrunerProcFacto
           //no need to pass virtual columns to reader.
           continue;
         }
-        int position = inputRR.getPosition(cols.get(i));
+        int position = inputRR.getPosition(column);
         if (position >= 0) {
           // get the needed columns by id and name
           neededColumnIds.add(position);
-          neededColumnNames.add(cols.get(i));
+          neededColumnNames.add(column);
         }
       }
 
       desc.setVirtualCols(newVirtualCols);
       scanOp.setNeededColumnIDs(neededColumnIds);
       scanOp.setNeededColumns(neededColumnNames);
+      scanOp.setReferencedColumns(referencedColumnNames);
       return null;
     }
   }

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRTableScan1.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRTableScan1.java?rev=1597694&r1=1597693&r2=1597694&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRTableScan1.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMRTableScan1.java Tue May 27 01:35:16 2014
@@ -147,7 +147,8 @@ public class GenMRTableScan1 implements 
                 .getConfirmedPartitionsForScan(parseInfo);
             if (confirmedPartns.size() > 0) {
               Table source = parseCtx.getQB().getMetaData().getTableForAlias(alias);
-              PrunedPartitionList partList = new PrunedPartitionList(source, confirmedPartns, false);
+              List<String> partCols = GenMapRedUtils.getPartitionColumns(parseInfo);
+              PrunedPartitionList partList = new PrunedPartitionList(source, confirmedPartns, partCols, false);
               GenMapRedUtils.setTaskPlan(currAliasId, currTopOp, currTask, false, ctx, partList);
             } else { // non-partitioned table
               GenMapRedUtils.setTaskPlan(currAliasId, currTopOp, currTask, false, ctx);

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMapRedUtils.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMapRedUtils.java?rev=1597694&r1=1597693&r2=1597694&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMapRedUtils.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/GenMapRedUtils.java Tue May 27 01:35:16 2014
@@ -20,6 +20,7 @@ package org.apache.hadoop.hive.ql.optimi
 
 import java.io.Serializable;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -927,6 +928,7 @@ public final class GenMapRedUtils {
     }
     tableScanOp.setNeededColumnIDs(neededColumnIds);
     tableScanOp.setNeededColumns(neededColumnNames);
+    tableScanOp.setReferencedColumns(neededColumnNames);
     return tableScanOp;
   }
 
@@ -1747,6 +1749,14 @@ public final class GenMapRedUtils {
     return confirmedPartns;
   }
 
+  public static List<String> getPartitionColumns(QBParseInfo parseInfo) {
+    tableSpec tblSpec = parseInfo.getTableSpec();
+    if (tblSpec.tableHandle.isPartitioned()) {
+      return new ArrayList<String>(tblSpec.getPartSpec().keySet());
+    }
+    return Collections.emptyList();
+  }
+
   public static List<Path> getInputPathsForPartialScan(QBParseInfo parseInfo, StringBuffer aggregationKey) 
     throws SemanticException {
     List<Path> inputPaths = new ArrayList<Path>();

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/ppr/PartitionPruner.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/ppr/PartitionPruner.java?rev=1597694&r1=1597693&r2=1597694&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/ppr/PartitionPruner.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/ppr/PartitionPruner.java Tue May 27 01:35:16 2014
@@ -212,9 +212,9 @@ public class PartitionPruner implements 
           return isAnd ? children.get(0) : null;
         }
       }
-      return (ExprNodeGenericFuncDesc)expr;
+      return expr;
     } else {
-        throw new IllegalStateException("Unexpected type of ExprNodeDesc: " + expr.getExprString());
+      throw new IllegalStateException("Unexpected type of ExprNodeDesc: " + expr.getExprString());
     }
   }
 
@@ -225,18 +225,23 @@ public class PartitionPruner implements 
    * The expression is only used to prune by partition name, so we have no business with VCs.
    * @param expr original partition pruning expression.
    * @param partCols list of partition columns for the table.
+   * @param referred partition columns referred by expr
    * @return partition pruning expression that only contains partition columns from the list.
    */
-  static private ExprNodeDesc removeNonPartCols(ExprNodeDesc expr, List<String> partCols) {
-    if (expr instanceof ExprNodeColumnDesc
-        && !partCols.contains(((ExprNodeColumnDesc) expr).getColumn())) {
-      // Column doesn't appear to be a partition column for the table.
-      return new ExprNodeConstantDesc(expr.getTypeInfo(), null);
+  static private ExprNodeDesc removeNonPartCols(ExprNodeDesc expr, List<String> partCols,
+      Set<String> referred) {
+    if (expr instanceof ExprNodeColumnDesc) {
+      String column = ((ExprNodeColumnDesc) expr).getColumn();
+      if (!partCols.contains(column)) {
+        // Column doesn't appear to be a partition column for the table.
+        return new ExprNodeConstantDesc(expr.getTypeInfo(), null);
+      }
+      referred.add(column);
     }
     if (expr instanceof ExprNodeGenericFuncDesc) {
       List<ExprNodeDesc> children = expr.getChildren();
       for (int i = 0; i < children.size(); ++i) {
-        children.set(i, removeNonPartCols(children.get(i), partCols));
+        children.set(i, removeNonPartCols(children.get(i), partCols, referred));
       }
     }
     return expr;
@@ -266,7 +271,7 @@ public class PartitionPruner implements 
     try {
       if (!tab.isPartitioned()) {
         // If the table is not partitioned, return everything.
-        return new PrunedPartitionList(tab, getAllPartitions(tab), false);
+        return new PrunedPartitionList(tab, getAllPartitions(tab), null, false);
       }
       LOG.debug("tabname = " + tab.getTableName() + " is partitioned");
 
@@ -279,18 +284,19 @@ public class PartitionPruner implements 
 
       if (prunerExpr == null) {
         // Non-strict mode, and there is no predicates at all - get everything.
-        return new PrunedPartitionList(tab, getAllPartitions(tab), false);
+        return new PrunedPartitionList(tab, getAllPartitions(tab), null, false);
       }
 
+      Set<String> referred = new LinkedHashSet<String>();
       // Replace virtual columns with nulls. See javadoc for details.
-      prunerExpr = removeNonPartCols(prunerExpr, extractPartColNames(tab));
+      prunerExpr = removeNonPartCols(prunerExpr, extractPartColNames(tab), referred);
       // Remove all parts that are not partition columns. See javadoc for details.
       ExprNodeGenericFuncDesc compactExpr = (ExprNodeGenericFuncDesc)compactExpr(prunerExpr.clone());
       String oldFilter = prunerExpr.getExprString();
       if (compactExpr == null) {
         // Non-strict mode, and all the predicates are on non-partition columns - get everything.
         LOG.debug("Filter " + oldFilter + " was null after compacting");
-        return new PrunedPartitionList(tab, getAllPartitions(tab), true);
+        return new PrunedPartitionList(tab, getAllPartitions(tab), null, true);
       }
 
       LOG.debug("Filter w/ compacting: " + compactExpr.getExprString()
@@ -326,6 +332,7 @@ public class PartitionPruner implements 
       // metastore and so some partitions may have no data based on other filters.
       boolean isPruningByExactFilter = oldFilter.equals(compactExpr.getExprString());
       return new PrunedPartitionList(tab, new LinkedHashSet<Partition>(partitions),
+          new ArrayList<String>(referred),
           hasUnknownPartitions || !isPruningByExactFilter);
     } catch (HiveException e) {
       throw e;

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/ColumnAccessAnalyzer.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/ColumnAccessAnalyzer.java?rev=1597694&r1=1597693&r2=1597694&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/ColumnAccessAnalyzer.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/ColumnAccessAnalyzer.java Tue May 27 01:35:16 2014
@@ -22,8 +22,8 @@ import java.util.Map;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.hadoop.hive.metastore.api.FieldSchema;
 import org.apache.hadoop.hive.ql.exec.TableScanOperator;
+import org.apache.hadoop.hive.ql.metadata.HiveException;
 import org.apache.hadoop.hive.ql.metadata.Table;
 
 public class ColumnAccessAnalyzer {
@@ -44,9 +44,23 @@ public class ColumnAccessAnalyzer {
     for (TableScanOperator op : topOps.keySet()) {
       Table table = topOps.get(op);
       String tableName = table.getCompleteName();
-      List<FieldSchema> tableCols = table.getCols();
-      for (int i : op.getNeededColumnIDs()) {
-        columnAccessInfo.add(tableName, tableCols.get(i).getName());
+      List<String> referenced = op.getReferencedColumns();
+      for (String column : referenced) {
+        columnAccessInfo.add(tableName, column);
+      }
+      if (table.isPartitioned()) {
+        PrunedPartitionList parts;
+        try {
+          parts = pGraphContext.getPrunedPartitions(table.getTableName(), op);
+        } catch (HiveException e) {
+          LOG.error(org.apache.hadoop.util.StringUtils.stringifyException(e));
+          throw new SemanticException(e.getMessage(), e);
+        }
+        if (parts.getReferredPartCols() != null) {
+          for (String partKey : parts.getReferredPartCols()) {
+            columnAccessInfo.add(tableName, partKey);
+          }
+        }
       }
     }
     return columnAccessInfo;

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/ProcessAnalyzeTable.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/ProcessAnalyzeTable.java?rev=1597694&r1=1597693&r2=1597694&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/ProcessAnalyzeTable.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/ProcessAnalyzeTable.java Tue May 27 01:35:16 2014
@@ -28,7 +28,6 @@ import org.apache.commons.logging.LogFac
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.hadoop.hive.ql.DriverContext;
-import org.apache.hadoop.hive.ql.ErrorMsg;
 import org.apache.hadoop.hive.ql.exec.TableScanOperator;
 import org.apache.hadoop.hive.ql.exec.Task;
 import org.apache.hadoop.hive.ql.exec.TaskFactory;
@@ -40,12 +39,6 @@ import org.apache.hadoop.hive.ql.lib.Nod
 import org.apache.hadoop.hive.ql.metadata.Partition;
 import org.apache.hadoop.hive.ql.metadata.Table;
 import org.apache.hadoop.hive.ql.optimizer.GenMapRedUtils;
-import org.apache.hadoop.hive.ql.parse.BaseSemanticAnalyzer.tableSpec;
-import org.apache.hadoop.hive.ql.parse.GenTezWork;
-import org.apache.hadoop.hive.ql.parse.ParseContext;
-import org.apache.hadoop.hive.ql.parse.PrunedPartitionList;
-import org.apache.hadoop.hive.ql.parse.QBParseInfo;
-import org.apache.hadoop.hive.ql.parse.SemanticException;
 import org.apache.hadoop.hive.ql.plan.MapWork;
 import org.apache.hadoop.hive.ql.plan.StatsNoJobWork;
 import org.apache.hadoop.hive.ql.plan.TezWork;
@@ -150,7 +143,8 @@ public class ProcessAnalyzeTable impleme
       PrunedPartitionList partitions = null;
       if (confirmedPartns.size() > 0) {
         Table source = queryBlock.getMetaData().getTableForAlias(alias);
-        partitions = new PrunedPartitionList(source, confirmedPartns, false);
+        List<String> partCols = GenMapRedUtils.getPartitionColumns(parseInfo);
+        partitions = new PrunedPartitionList(source, confirmedPartns, partCols, false);
       }
 
       MapWork w = utils.createMapWork(context, tableScan, tezWork, partitions);

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/PrunedPartitionList.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/PrunedPartitionList.java?rev=1597694&r1=1597693&r2=1597694&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/PrunedPartitionList.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/PrunedPartitionList.java Tue May 27 01:35:16 2014
@@ -36,11 +36,16 @@ public class PrunedPartitionList {
   /** Partitions that either satisfy the partition criteria, or may satisfy it. */
   private Set<Partition> partitions;
 
+  /** partition columns referred by pruner expr */
+  private List<String> referred;
+
   /** Whether there are partitions in the list that may or may not satisfy the criteria. */
   private boolean hasUnknowns;
 
-  public PrunedPartitionList(Table source, Set<Partition> partitions, boolean hasUnknowns) {
+  public PrunedPartitionList(Table source, Set<Partition> partitions, List<String> referred,
+      boolean hasUnknowns) {
     this.source = source;
+    this.referred = referred;
     this.partitions = partitions;
     this.hasUnknowns = hasUnknowns;
   }
@@ -70,4 +75,8 @@ public class PrunedPartitionList {
   public boolean hasUnknownPartitions() {
     return hasUnknowns;
   }
+
+  public List<String> getReferredPartCols() {
+    return referred;
+  }
 }

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/QBParseInfo.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/QBParseInfo.java?rev=1597694&r1=1597693&r2=1597694&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/QBParseInfo.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/QBParseInfo.java Tue May 27 01:35:16 2014
@@ -531,7 +531,7 @@ public class QBParseInfo {
   }
 
   /**
-   * This method is used only for the anlayze command to get the partition specs
+   * This method is used only for the analyze command to get the partition specs
    */
   public tableSpec getTableSpec() {
 

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/plan/TableScanDesc.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/plan/TableScanDesc.java?rev=1597694&r1=1597693&r2=1597694&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/plan/TableScanDesc.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/plan/TableScanDesc.java Tue May 27 01:35:16 2014
@@ -23,6 +23,7 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.hadoop.hive.ql.exec.PTFUtils;
 import org.apache.hadoop.hive.ql.metadata.VirtualColumn;
 
 /**
@@ -34,6 +35,10 @@ import org.apache.hadoop.hive.ql.metadat
 public class TableScanDesc extends AbstractOperatorDesc {
   private static final long serialVersionUID = 1L;
 
+  static {
+    PTFUtils.makeTransient(TableScanDesc.class, "filterObject", "referencedColumns");
+  }
+
   private String alias;
 
   private List<VirtualColumn> virtualCols;
@@ -64,6 +69,16 @@ public class TableScanDesc extends Abstr
   private ExprNodeGenericFuncDesc filterExpr;
   private transient Serializable filterObject;
 
+  // Both neededColumnIDs and neededColumns should never be null.
+  // When neededColumnIDs is an empty list,
+  // it means no needed column (e.g. we do not need any column to evaluate
+  // SELECT count(*) FROM t).
+  private List<Integer> neededColumnIDs;
+  private List<String> neededColumns;
+
+  // all column names referenced including virtual columns. used in ColumnAccessAnalyzer
+  private transient List<String> referencedColumns;
+
   public static final String FILTER_EXPR_CONF_STR =
     "hive.io.filter.expr.serialized";
 
@@ -125,6 +140,30 @@ public class TableScanDesc extends Abstr
     this.filterObject = filterObject;
   }
 
+  public void setNeededColumnIDs(List<Integer> neededColumnIDs) {
+    this.neededColumnIDs = neededColumnIDs;
+  }
+
+  public List<Integer> getNeededColumnIDs() {
+    return neededColumnIDs;
+  }
+
+  public void setNeededColumns(List<String> neededColumns) {
+    this.neededColumns = neededColumns;
+  }
+
+  public List<String> getNeededColumns() {
+    return neededColumns;
+  }
+
+  public void setReferencedColumns(List<String> referencedColumns) {
+    this.referencedColumns = referencedColumns;
+  }
+
+  public List<String> getReferencedColumns() {
+    return referencedColumns;
+  }
+
   public void setAlias(String alias) {
     this.alias = alias;
   }

Modified: hive/trunk/ql/src/test/queries/clientpositive/column_access_stats.q
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/queries/clientpositive/column_access_stats.q?rev=1597694&r1=1597693&r2=1597694&view=diff
==============================================================================
--- hive/trunk/ql/src/test/queries/clientpositive/column_access_stats.q (original)
+++ hive/trunk/ql/src/test/queries/clientpositive/column_access_stats.q Tue May 27 01:35:16 2014
@@ -160,3 +160,8 @@ FROM
 JOIN T3
 ON T3.key = T4.key
 ORDER BY T3.key, T4.key;
+
+-- for partitioned table
+SELECT * FROM srcpart TABLESAMPLE (10 ROWS);
+SELECT key,ds FROM srcpart TABLESAMPLE (10 ROWS) WHERE hr='11';
+SELECT value FROM srcpart TABLESAMPLE (10 ROWS) WHERE ds='2008-04-08';

Modified: hive/trunk/ql/src/test/results/clientpositive/column_access_stats.q.out
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/clientpositive/column_access_stats.q.out?rev=1597694&r1=1597693&r2=1597694&view=diff
==============================================================================
--- hive/trunk/ql/src/test/results/clientpositive/column_access_stats.q.out (original)
+++ hive/trunk/ql/src/test/results/clientpositive/column_access_stats.q.out Tue May 27 01:35:16 2014
@@ -58,21 +58,21 @@ PREHOOK: type: QUERY
 PREHOOK: Input: default@t4
 #### A masked pattern was here ####
 Table:default@t4
-Columns:key,val
+Columns:key,p,val
 
 PREHOOK: query: SELECT val FROM T4 where p=1
 PREHOOK: type: QUERY
 PREHOOK: Input: default@t4
 #### A masked pattern was here ####
 Table:default@t4
-Columns:val
+Columns:p,val
 
 PREHOOK: query: SELECT p, val FROM T4 where p=1
 PREHOOK: type: QUERY
 PREHOOK: Input: default@t4
 #### A masked pattern was here ####
 Table:default@t4
-Columns:val
+Columns:p,val
 
 PREHOOK: query: -- More complicated select queries
 EXPLAIN SELECT key FROM (SELECT key, val FROM T1) subq1 ORDER BY key
@@ -950,3 +950,63 @@ Columns:key,val
 7	7	17.0
 8	8	46.0
 8	8	46.0
+PREHOOK: query: -- for partitioned table
+SELECT * FROM srcpart TABLESAMPLE (10 ROWS)
+PREHOOK: type: QUERY
+PREHOOK: Input: default@srcpart
+PREHOOK: Input: default@srcpart@ds=2008-04-08/hr=11
+PREHOOK: Input: default@srcpart@ds=2008-04-08/hr=12
+PREHOOK: Input: default@srcpart@ds=2008-04-09/hr=11
+PREHOOK: Input: default@srcpart@ds=2008-04-09/hr=12
+#### A masked pattern was here ####
+Table:default@srcpart
+Columns:ds,hr,key,value
+
+238	val_238	2008-04-08	11
+86	val_86	2008-04-08	11
+311	val_311	2008-04-08	11
+27	val_27	2008-04-08	11
+165	val_165	2008-04-08	11
+409	val_409	2008-04-08	11
+255	val_255	2008-04-08	11
+278	val_278	2008-04-08	11
+98	val_98	2008-04-08	11
+484	val_484	2008-04-08	11
+PREHOOK: query: SELECT key,ds FROM srcpart TABLESAMPLE (10 ROWS) WHERE hr='11'
+PREHOOK: type: QUERY
+PREHOOK: Input: default@srcpart
+PREHOOK: Input: default@srcpart@ds=2008-04-08/hr=11
+PREHOOK: Input: default@srcpart@ds=2008-04-09/hr=11
+#### A masked pattern was here ####
+Table:default@srcpart
+Columns:ds,hr,key
+
+238	2008-04-08
+86	2008-04-08
+311	2008-04-08
+27	2008-04-08
+165	2008-04-08
+409	2008-04-08
+255	2008-04-08
+278	2008-04-08
+98	2008-04-08
+484	2008-04-08
+PREHOOK: query: SELECT value FROM srcpart TABLESAMPLE (10 ROWS) WHERE ds='2008-04-08'
+PREHOOK: type: QUERY
+PREHOOK: Input: default@srcpart
+PREHOOK: Input: default@srcpart@ds=2008-04-08/hr=11
+PREHOOK: Input: default@srcpart@ds=2008-04-08/hr=12
+#### A masked pattern was here ####
+Table:default@srcpart
+Columns:ds,value
+
+val_238
+val_86
+val_311
+val_27
+val_165
+val_409
+val_255
+val_278
+val_98
+val_484

Modified: hive/trunk/ql/src/test/results/compiler/plan/case_sensitivity.q.xml
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/compiler/plan/case_sensitivity.q.xml?rev=1597694&r1=1597693&r2=1597694&view=diff
==============================================================================
--- hive/trunk/ql/src/test/results/compiler/plan/case_sensitivity.q.xml (original)
+++ hive/trunk/ql/src/test/results/compiler/plan/case_sensitivity.q.xml Tue May 27 01:35:16 2014
@@ -219,31 +219,35 @@
                          </void> 
                         </void> 
                         <void property="conf"> 
-                         <object class="org.apache.hadoop.hive.ql.plan.TableScanDesc"/> 
-                        </void> 
-                        <void property="neededColumnIDs"> 
-                         <object class="java.util.ArrayList"> 
-                          <void method="add"> 
-                           <int>0</int> 
-                          </void> 
-                          <void method="add"> 
-                           <int>1</int> 
-                          </void> 
-                         </object> 
-                        </void> 
-                        <void property="neededColumns"> 
-                         <object class="java.util.ArrayList"> 
-                          <void method="add"> 
-                           <string>key</string> 
+                         <object class="org.apache.hadoop.hive.ql.plan.TableScanDesc"> 
+                          <void property="neededColumnIDs"> 
+                           <object class="java.util.ArrayList"> 
+                            <void method="add"> 
+                             <int>0</int> 
+                            </void> 
+                            <void method="add"> 
+                             <int>1</int> 
+                            </void> 
+                           </object> 
                           </void> 
-                          <void method="add"> 
-                           <string>value</string> 
+                          <void property="neededColumns"> 
+                           <object id="ArrayList1" class="java.util.ArrayList"> 
+                            <void method="add"> 
+                             <string>key</string> 
+                            </void> 
+                            <void method="add"> 
+                             <string>value</string> 
+                            </void> 
+                           </object> 
                           </void> 
                          </object> 
                         </void> 
                         <void property="operatorId"> 
                          <string>TS_5</string> 
                         </void> 
+                        <void property="referencedColumns"> 
+                         <object idref="ArrayList1"/> 
+                        </void> 
                         <void property="schema"> 
                          <object idref="RowSchema0"/> 
                         </void> 
@@ -1052,22 +1056,35 @@
           <void property="alias"> 
            <string>src_thrift</string> 
           </void> 
+          <void property="neededColumnIDs"> 
+           <object class="java.util.ArrayList"> 
+            <void method="add"> 
+             <int>2</int> 
+            </void> 
+            <void method="add"> 
+             <int>4</int> 
+            </void> 
+           </object> 
+          </void> 
+          <void property="neededColumns"> 
+           <object class="java.util.ArrayList"> 
+            <void method="add"> 
+             <string>lint</string> 
+            </void> 
+            <void method="add"> 
+             <string>lintstring</string> 
+            </void> 
+           </object> 
+          </void> 
           <void property="virtualCols"> 
            <object class="java.util.ArrayList"/> 
           </void> 
          </object> 
         </void> 
-        <void property="neededColumnIDs"> 
-         <object class="java.util.ArrayList"> 
-          <void method="add"> 
-           <int>2</int> 
-          </void> 
-          <void method="add"> 
-           <int>4</int> 
-          </void> 
-         </object> 
+        <void property="operatorId"> 
+         <string>TS_0</string> 
         </void> 
-        <void property="neededColumns"> 
+        <void property="referencedColumns"> 
          <object class="java.util.ArrayList"> 
           <void method="add"> 
            <string>lint</string> 
@@ -1077,9 +1094,6 @@
           </void> 
          </object> 
         </void> 
-        <void property="operatorId"> 
-         <string>TS_0</string> 
-        </void> 
         <void property="schema"> 
          <object class="org.apache.hadoop.hive.ql.exec.RowSchema"> 
           <void property="signature"> 

Modified: hive/trunk/ql/src/test/results/compiler/plan/cast1.q.xml
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/compiler/plan/cast1.q.xml?rev=1597694&r1=1597693&r2=1597694&view=diff
==============================================================================
--- hive/trunk/ql/src/test/results/compiler/plan/cast1.q.xml (original)
+++ hive/trunk/ql/src/test/results/compiler/plan/cast1.q.xml Tue May 27 01:35:16 2014
@@ -930,28 +930,35 @@
           <void property="alias"> 
            <string>src</string> 
           </void> 
+          <void property="neededColumnIDs"> 
+           <object class="java.util.ArrayList"> 
+            <void method="add"> 
+             <int>0</int> 
+            </void> 
+           </object> 
+          </void> 
+          <void property="neededColumns"> 
+           <object class="java.util.ArrayList"> 
+            <void method="add"> 
+             <string>key</string> 
+            </void> 
+           </object> 
+          </void> 
           <void property="virtualCols"> 
            <object class="java.util.ArrayList"/> 
           </void> 
          </object> 
         </void> 
-        <void property="neededColumnIDs"> 
-         <object class="java.util.ArrayList"> 
-          <void method="add"> 
-           <int>0</int> 
-          </void> 
-         </object> 
+        <void property="operatorId"> 
+         <string>TS_0</string> 
         </void> 
-        <void property="neededColumns"> 
+        <void property="referencedColumns"> 
          <object class="java.util.ArrayList"> 
           <void method="add"> 
            <string>key</string> 
           </void> 
          </object> 
         </void> 
-        <void property="operatorId"> 
-         <string>TS_0</string> 
-        </void> 
         <void property="schema"> 
          <object class="org.apache.hadoop.hive.ql.exec.RowSchema"> 
           <void property="signature"> 

Modified: hive/trunk/ql/src/test/results/compiler/plan/groupby1.q.xml
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/compiler/plan/groupby1.q.xml?rev=1597694&r1=1597693&r2=1597694&view=diff
==============================================================================
--- hive/trunk/ql/src/test/results/compiler/plan/groupby1.q.xml (original)
+++ hive/trunk/ql/src/test/results/compiler/plan/groupby1.q.xml Tue May 27 01:35:16 2014
@@ -863,22 +863,35 @@
           <void property="alias"> 
            <string>src</string> 
           </void> 
+          <void property="neededColumnIDs"> 
+           <object class="java.util.ArrayList"> 
+            <void method="add"> 
+             <int>0</int> 
+            </void> 
+            <void method="add"> 
+             <int>1</int> 
+            </void> 
+           </object> 
+          </void> 
+          <void property="neededColumns"> 
+           <object class="java.util.ArrayList"> 
+            <void method="add"> 
+             <string>key</string> 
+            </void> 
+            <void method="add"> 
+             <string>value</string> 
+            </void> 
+           </object> 
+          </void> 
           <void property="virtualCols"> 
            <object class="java.util.ArrayList"/> 
           </void> 
          </object> 
         </void> 
-        <void property="neededColumnIDs"> 
-         <object class="java.util.ArrayList"> 
-          <void method="add"> 
-           <int>0</int> 
-          </void> 
-          <void method="add"> 
-           <int>1</int> 
-          </void> 
-         </object> 
+        <void property="operatorId"> 
+         <string>TS_0</string> 
         </void> 
-        <void property="neededColumns"> 
+        <void property="referencedColumns"> 
          <object class="java.util.ArrayList"> 
           <void method="add"> 
            <string>key</string> 
@@ -888,9 +901,6 @@
           </void> 
          </object> 
         </void> 
-        <void property="operatorId"> 
-         <string>TS_0</string> 
-        </void> 
         <void property="schema"> 
          <object class="org.apache.hadoop.hive.ql.exec.RowSchema"> 
           <void property="signature"> 

Modified: hive/trunk/ql/src/test/results/compiler/plan/groupby2.q.xml
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/compiler/plan/groupby2.q.xml?rev=1597694&r1=1597693&r2=1597694&view=diff
==============================================================================
--- hive/trunk/ql/src/test/results/compiler/plan/groupby2.q.xml (original)
+++ hive/trunk/ql/src/test/results/compiler/plan/groupby2.q.xml Tue May 27 01:35:16 2014
@@ -954,22 +954,35 @@
           <void property="alias"> 
            <string>src</string> 
           </void> 
+          <void property="neededColumnIDs"> 
+           <object class="java.util.ArrayList"> 
+            <void method="add"> 
+             <int>0</int> 
+            </void> 
+            <void method="add"> 
+             <int>1</int> 
+            </void> 
+           </object> 
+          </void> 
+          <void property="neededColumns"> 
+           <object class="java.util.ArrayList"> 
+            <void method="add"> 
+             <string>key</string> 
+            </void> 
+            <void method="add"> 
+             <string>value</string> 
+            </void> 
+           </object> 
+          </void> 
           <void property="virtualCols"> 
            <object class="java.util.ArrayList"/> 
           </void> 
          </object> 
         </void> 
-        <void property="neededColumnIDs"> 
-         <object class="java.util.ArrayList"> 
-          <void method="add"> 
-           <int>0</int> 
-          </void> 
-          <void method="add"> 
-           <int>1</int> 
-          </void> 
-         </object> 
+        <void property="operatorId"> 
+         <string>TS_0</string> 
         </void> 
-        <void property="neededColumns"> 
+        <void property="referencedColumns"> 
          <object class="java.util.ArrayList"> 
           <void method="add"> 
            <string>key</string> 
@@ -979,9 +992,6 @@
           </void> 
          </object> 
         </void> 
-        <void property="operatorId"> 
-         <string>TS_0</string> 
-        </void> 
         <void property="schema"> 
          <object class="org.apache.hadoop.hive.ql.exec.RowSchema"> 
           <void property="signature"> 

Modified: hive/trunk/ql/src/test/results/compiler/plan/groupby3.q.xml
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/compiler/plan/groupby3.q.xml?rev=1597694&r1=1597693&r2=1597694&view=diff
==============================================================================
--- hive/trunk/ql/src/test/results/compiler/plan/groupby3.q.xml (original)
+++ hive/trunk/ql/src/test/results/compiler/plan/groupby3.q.xml Tue May 27 01:35:16 2014
@@ -1168,28 +1168,35 @@
           <void property="alias"> 
            <string>src</string> 
           </void> 
+          <void property="neededColumnIDs"> 
+           <object class="java.util.ArrayList"> 
+            <void method="add"> 
+             <int>1</int> 
+            </void> 
+           </object> 
+          </void> 
+          <void property="neededColumns"> 
+           <object class="java.util.ArrayList"> 
+            <void method="add"> 
+             <string>value</string> 
+            </void> 
+           </object> 
+          </void> 
           <void property="virtualCols"> 
            <object class="java.util.ArrayList"/> 
           </void> 
          </object> 
         </void> 
-        <void property="neededColumnIDs"> 
-         <object class="java.util.ArrayList"> 
-          <void method="add"> 
-           <int>1</int> 
-          </void> 
-         </object> 
+        <void property="operatorId"> 
+         <string>TS_0</string> 
         </void> 
-        <void property="neededColumns"> 
+        <void property="referencedColumns"> 
          <object class="java.util.ArrayList"> 
           <void method="add"> 
            <string>value</string> 
           </void> 
          </object> 
         </void> 
-        <void property="operatorId"> 
-         <string>TS_0</string> 
-        </void> 
         <void property="schema"> 
          <object class="org.apache.hadoop.hive.ql.exec.RowSchema"> 
           <void property="signature"> 

Modified: hive/trunk/ql/src/test/results/compiler/plan/groupby4.q.xml
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/compiler/plan/groupby4.q.xml?rev=1597694&r1=1597693&r2=1597694&view=diff
==============================================================================
--- hive/trunk/ql/src/test/results/compiler/plan/groupby4.q.xml (original)
+++ hive/trunk/ql/src/test/results/compiler/plan/groupby4.q.xml Tue May 27 01:35:16 2014
@@ -602,28 +602,35 @@
           <void property="alias"> 
            <string>src</string> 
           </void> 
+          <void property="neededColumnIDs"> 
+           <object class="java.util.ArrayList"> 
+            <void method="add"> 
+             <int>0</int> 
+            </void> 
+           </object> 
+          </void> 
+          <void property="neededColumns"> 
+           <object class="java.util.ArrayList"> 
+            <void method="add"> 
+             <string>key</string> 
+            </void> 
+           </object> 
+          </void> 
           <void property="virtualCols"> 
            <object class="java.util.ArrayList"/> 
           </void> 
          </object> 
         </void> 
-        <void property="neededColumnIDs"> 
-         <object class="java.util.ArrayList"> 
-          <void method="add"> 
-           <int>0</int> 
-          </void> 
-         </object> 
+        <void property="operatorId"> 
+         <string>TS_0</string> 
         </void> 
-        <void property="neededColumns"> 
+        <void property="referencedColumns"> 
          <object class="java.util.ArrayList"> 
           <void method="add"> 
            <string>key</string> 
           </void> 
          </object> 
         </void> 
-        <void property="operatorId"> 
-         <string>TS_0</string> 
-        </void> 
         <void property="schema"> 
          <object class="org.apache.hadoop.hive.ql.exec.RowSchema"> 
           <void property="signature"> 

Modified: hive/trunk/ql/src/test/results/compiler/plan/groupby5.q.xml
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/compiler/plan/groupby5.q.xml?rev=1597694&r1=1597693&r2=1597694&view=diff
==============================================================================
--- hive/trunk/ql/src/test/results/compiler/plan/groupby5.q.xml (original)
+++ hive/trunk/ql/src/test/results/compiler/plan/groupby5.q.xml Tue May 27 01:35:16 2014
@@ -715,22 +715,35 @@
           <void property="alias"> 
            <string>src</string> 
           </void> 
+          <void property="neededColumnIDs"> 
+           <object class="java.util.ArrayList"> 
+            <void method="add"> 
+             <int>0</int> 
+            </void> 
+            <void method="add"> 
+             <int>1</int> 
+            </void> 
+           </object> 
+          </void> 
+          <void property="neededColumns"> 
+           <object class="java.util.ArrayList"> 
+            <void method="add"> 
+             <string>key</string> 
+            </void> 
+            <void method="add"> 
+             <string>value</string> 
+            </void> 
+           </object> 
+          </void> 
           <void property="virtualCols"> 
            <object class="java.util.ArrayList"/> 
           </void> 
          </object> 
         </void> 
-        <void property="neededColumnIDs"> 
-         <object class="java.util.ArrayList"> 
-          <void method="add"> 
-           <int>0</int> 
-          </void> 
-          <void method="add"> 
-           <int>1</int> 
-          </void> 
-         </object> 
+        <void property="operatorId"> 
+         <string>TS_0</string> 
         </void> 
-        <void property="neededColumns"> 
+        <void property="referencedColumns"> 
          <object class="java.util.ArrayList"> 
           <void method="add"> 
            <string>key</string> 
@@ -740,9 +753,6 @@
           </void> 
          </object> 
         </void> 
-        <void property="operatorId"> 
-         <string>TS_0</string> 
-        </void> 
         <void property="schema"> 
          <object class="org.apache.hadoop.hive.ql.exec.RowSchema"> 
           <void property="signature"> 

Modified: hive/trunk/ql/src/test/results/compiler/plan/groupby6.q.xml
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/compiler/plan/groupby6.q.xml?rev=1597694&r1=1597693&r2=1597694&view=diff
==============================================================================
--- hive/trunk/ql/src/test/results/compiler/plan/groupby6.q.xml (original)
+++ hive/trunk/ql/src/test/results/compiler/plan/groupby6.q.xml Tue May 27 01:35:16 2014
@@ -602,28 +602,35 @@
           <void property="alias"> 
            <string>src</string> 
           </void> 
+          <void property="neededColumnIDs"> 
+           <object class="java.util.ArrayList"> 
+            <void method="add"> 
+             <int>1</int> 
+            </void> 
+           </object> 
+          </void> 
+          <void property="neededColumns"> 
+           <object class="java.util.ArrayList"> 
+            <void method="add"> 
+             <string>value</string> 
+            </void> 
+           </object> 
+          </void> 
           <void property="virtualCols"> 
            <object class="java.util.ArrayList"/> 
           </void> 
          </object> 
         </void> 
-        <void property="neededColumnIDs"> 
-         <object class="java.util.ArrayList"> 
-          <void method="add"> 
-           <int>1</int> 
-          </void> 
-         </object> 
+        <void property="operatorId"> 
+         <string>TS_0</string> 
         </void> 
-        <void property="neededColumns"> 
+        <void property="referencedColumns"> 
          <object class="java.util.ArrayList"> 
           <void method="add"> 
            <string>value</string> 
           </void> 
          </object> 
         </void> 
-        <void property="operatorId"> 
-         <string>TS_0</string> 
-        </void> 
         <void property="schema"> 
          <object class="org.apache.hadoop.hive.ql.exec.RowSchema"> 
           <void property="signature"> 

Modified: hive/trunk/ql/src/test/results/compiler/plan/input1.q.xml
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/compiler/plan/input1.q.xml?rev=1597694&r1=1597693&r2=1597694&view=diff
==============================================================================
--- hive/trunk/ql/src/test/results/compiler/plan/input1.q.xml (original)
+++ hive/trunk/ql/src/test/results/compiler/plan/input1.q.xml Tue May 27 01:35:16 2014
@@ -219,31 +219,35 @@
                          </void> 
                         </void> 
                         <void property="conf"> 
-                         <object class="org.apache.hadoop.hive.ql.plan.TableScanDesc"/> 
-                        </void> 
-                        <void property="neededColumnIDs"> 
-                         <object class="java.util.ArrayList"> 
-                          <void method="add"> 
-                           <int>0</int> 
-                          </void> 
-                          <void method="add"> 
-                           <int>1</int> 
-                          </void> 
-                         </object> 
-                        </void> 
-                        <void property="neededColumns"> 
-                         <object class="java.util.ArrayList"> 
-                          <void method="add"> 
-                           <string>key</string> 
-                          </void> 
-                          <void method="add"> 
-                           <string>value</string> 
+                         <object class="org.apache.hadoop.hive.ql.plan.TableScanDesc"> 
+                          <void property="neededColumnIDs"> 
+                           <object class="java.util.ArrayList"> 
+                            <void method="add"> 
+                             <int>0</int> 
+                            </void> 
+                            <void method="add"> 
+                             <int>1</int> 
+                            </void> 
+                           </object> 
+                          </void> 
+                          <void property="neededColumns"> 
+                           <object id="ArrayList1" class="java.util.ArrayList"> 
+                            <void method="add"> 
+                             <string>key</string> 
+                            </void> 
+                            <void method="add"> 
+                             <string>value</string> 
+                            </void> 
+                           </object> 
                           </void> 
                          </object> 
                         </void> 
                         <void property="operatorId"> 
                          <string>TS_5</string> 
                         </void> 
+                        <void property="referencedColumns"> 
+                         <object idref="ArrayList1"/> 
+                        </void> 
                         <void property="schema"> 
                          <object idref="RowSchema0"/> 
                         </void> 
@@ -989,22 +993,35 @@
           <void property="alias"> 
            <string>src</string> 
           </void> 
+          <void property="neededColumnIDs"> 
+           <object class="java.util.ArrayList"> 
+            <void method="add"> 
+             <int>0</int> 
+            </void> 
+            <void method="add"> 
+             <int>1</int> 
+            </void> 
+           </object> 
+          </void> 
+          <void property="neededColumns"> 
+           <object class="java.util.ArrayList"> 
+            <void method="add"> 
+             <string>key</string> 
+            </void> 
+            <void method="add"> 
+             <string>value</string> 
+            </void> 
+           </object> 
+          </void> 
           <void property="virtualCols"> 
            <object class="java.util.ArrayList"/> 
           </void> 
          </object> 
         </void> 
-        <void property="neededColumnIDs"> 
-         <object class="java.util.ArrayList"> 
-          <void method="add"> 
-           <int>0</int> 
-          </void> 
-          <void method="add"> 
-           <int>1</int> 
-          </void> 
-         </object> 
+        <void property="operatorId"> 
+         <string>TS_0</string> 
         </void> 
-        <void property="neededColumns"> 
+        <void property="referencedColumns"> 
          <object class="java.util.ArrayList"> 
           <void method="add"> 
            <string>key</string> 
@@ -1014,9 +1031,6 @@
           </void> 
          </object> 
         </void> 
-        <void property="operatorId"> 
-         <string>TS_0</string> 
-        </void> 
         <void property="schema"> 
          <object class="org.apache.hadoop.hive.ql.exec.RowSchema"> 
           <void property="signature"> 

Modified: hive/trunk/ql/src/test/results/compiler/plan/input2.q.xml
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/compiler/plan/input2.q.xml?rev=1597694&r1=1597693&r2=1597694&view=diff
==============================================================================
--- hive/trunk/ql/src/test/results/compiler/plan/input2.q.xml (original)
+++ hive/trunk/ql/src/test/results/compiler/plan/input2.q.xml Tue May 27 01:35:16 2014
@@ -219,31 +219,35 @@
                          </void> 
                         </void> 
                         <void property="conf"> 
-                         <object class="org.apache.hadoop.hive.ql.plan.TableScanDesc"/> 
-                        </void> 
-                        <void property="neededColumnIDs"> 
-                         <object class="java.util.ArrayList"> 
-                          <void method="add"> 
-                           <int>0</int> 
-                          </void> 
-                          <void method="add"> 
-                           <int>1</int> 
-                          </void> 
-                         </object> 
-                        </void> 
-                        <void property="neededColumns"> 
-                         <object class="java.util.ArrayList"> 
-                          <void method="add"> 
-                           <string>key</string> 
+                         <object class="org.apache.hadoop.hive.ql.plan.TableScanDesc"> 
+                          <void property="neededColumnIDs"> 
+                           <object class="java.util.ArrayList"> 
+                            <void method="add"> 
+                             <int>0</int> 
+                            </void> 
+                            <void method="add"> 
+                             <int>1</int> 
+                            </void> 
+                           </object> 
                           </void> 
-                          <void method="add"> 
-                           <string>value</string> 
+                          <void property="neededColumns"> 
+                           <object id="ArrayList1" class="java.util.ArrayList"> 
+                            <void method="add"> 
+                             <string>key</string> 
+                            </void> 
+                            <void method="add"> 
+                             <string>value</string> 
+                            </void> 
+                           </object> 
                           </void> 
                          </object> 
                         </void> 
                         <void property="operatorId"> 
                          <string>TS_10</string> 
                         </void> 
+                        <void property="referencedColumns"> 
+                         <object idref="ArrayList1"/> 
+                        </void> 
                         <void property="schema"> 
                          <object idref="RowSchema0"/> 
                         </void> 
@@ -560,7 +564,7 @@
        <string>Stage-15</string> 
       </void> 
       <void property="listTasks"> 
-       <object id="ArrayList1" class="java.util.ArrayList"> 
+       <object id="ArrayList2" class="java.util.ArrayList"> 
         <void method="add"> 
          <object id="MoveTask3" class="org.apache.hadoop.hive.ql.exec.MoveTask"> 
           <void property="childTasks"> 
@@ -764,31 +768,35 @@
                          </void> 
                         </void> 
                         <void property="conf"> 
-                         <object class="org.apache.hadoop.hive.ql.plan.TableScanDesc"/> 
-                        </void> 
-                        <void property="neededColumnIDs"> 
-                         <object class="java.util.ArrayList"> 
-                          <void method="add"> 
-                           <int>0</int> 
-                          </void> 
-                          <void method="add"> 
-                           <int>1</int> 
-                          </void> 
-                         </object> 
-                        </void> 
-                        <void property="neededColumns"> 
-                         <object class="java.util.ArrayList"> 
-                          <void method="add"> 
-                           <string>key</string> 
+                         <object class="org.apache.hadoop.hive.ql.plan.TableScanDesc"> 
+                          <void property="neededColumnIDs"> 
+                           <object class="java.util.ArrayList"> 
+                            <void method="add"> 
+                             <int>0</int> 
+                            </void> 
+                            <void method="add"> 
+                             <int>1</int> 
+                            </void> 
+                           </object> 
                           </void> 
-                          <void method="add"> 
-                           <string>value</string> 
+                          <void property="neededColumns"> 
+                           <object id="ArrayList3" class="java.util.ArrayList"> 
+                            <void method="add"> 
+                             <string>key</string> 
+                            </void> 
+                            <void method="add"> 
+                             <string>value</string> 
+                            </void> 
+                           </object> 
                           </void> 
                          </object> 
                         </void> 
                         <void property="operatorId"> 
                          <string>TS_12</string> 
                         </void> 
+                        <void property="referencedColumns"> 
+                         <object idref="ArrayList3"/> 
+                        </void> 
                         <void property="schema"> 
                          <object idref="RowSchema1"/> 
                         </void> 
@@ -1020,7 +1028,7 @@
          <object idref="ListBucketingCtx1"/> 
         </void> 
         <void property="listTasks"> 
-         <object idref="ArrayList1"/> 
+         <object idref="ArrayList2"/> 
         </void> 
        </object> 
       </void> 
@@ -1046,7 +1054,7 @@
        <string>Stage-21</string> 
       </void> 
       <void property="listTasks"> 
-       <object id="ArrayList2" class="java.util.ArrayList"> 
+       <object id="ArrayList4" class="java.util.ArrayList"> 
         <void method="add"> 
          <object id="MoveTask6" class="org.apache.hadoop.hive.ql.exec.MoveTask"> 
           <void property="childTasks"> 
@@ -1258,31 +1266,35 @@
                          </void> 
                         </void> 
                         <void property="conf"> 
-                         <object class="org.apache.hadoop.hive.ql.plan.TableScanDesc"/> 
-                        </void> 
-                        <void property="neededColumnIDs"> 
-                         <object class="java.util.ArrayList"> 
-                          <void method="add"> 
-                           <int>0</int> 
-                          </void> 
-                          <void method="add"> 
-                           <int>1</int> 
-                          </void> 
-                         </object> 
-                        </void> 
-                        <void property="neededColumns"> 
-                         <object class="java.util.ArrayList"> 
-                          <void method="add"> 
-                           <string>key</string> 
+                         <object class="org.apache.hadoop.hive.ql.plan.TableScanDesc"> 
+                          <void property="neededColumnIDs"> 
+                           <object class="java.util.ArrayList"> 
+                            <void method="add"> 
+                             <int>0</int> 
+                            </void> 
+                            <void method="add"> 
+                             <int>1</int> 
+                            </void> 
+                           </object> 
                           </void> 
-                          <void method="add"> 
-                           <string>value</string> 
+                          <void property="neededColumns"> 
+                           <object id="ArrayList5" class="java.util.ArrayList"> 
+                            <void method="add"> 
+                             <string>key</string> 
+                            </void> 
+                            <void method="add"> 
+                             <string>value</string> 
+                            </void> 
+                           </object> 
                           </void> 
                          </object> 
                         </void> 
                         <void property="operatorId"> 
                          <string>TS_14</string> 
                         </void> 
+                        <void property="referencedColumns"> 
+                         <object idref="ArrayList5"/> 
+                        </void> 
                         <void property="schema"> 
                          <object idref="RowSchema2"/> 
                         </void> 
@@ -1527,7 +1539,7 @@
          <object idref="ListBucketingCtx2"/> 
         </void> 
         <void property="listTasks"> 
-         <object idref="ArrayList2"/> 
+         <object idref="ArrayList4"/> 
         </void> 
        </object> 
       </void> 
@@ -2496,22 +2508,35 @@
           <void property="alias"> 
            <string>src</string> 
           </void> 
+          <void property="neededColumnIDs"> 
+           <object class="java.util.ArrayList"> 
+            <void method="add"> 
+             <int>0</int> 
+            </void> 
+            <void method="add"> 
+             <int>1</int> 
+            </void> 
+           </object> 
+          </void> 
+          <void property="neededColumns"> 
+           <object class="java.util.ArrayList"> 
+            <void method="add"> 
+             <string>key</string> 
+            </void> 
+            <void method="add"> 
+             <string>value</string> 
+            </void> 
+           </object> 
+          </void> 
           <void property="virtualCols"> 
            <object class="java.util.ArrayList"/> 
           </void> 
          </object> 
         </void> 
-        <void property="neededColumnIDs"> 
-         <object class="java.util.ArrayList"> 
-          <void method="add"> 
-           <int>0</int> 
-          </void> 
-          <void method="add"> 
-           <int>1</int> 
-          </void> 
-         </object> 
+        <void property="operatorId"> 
+         <string>TS_0</string> 
         </void> 
-        <void property="neededColumns"> 
+        <void property="referencedColumns"> 
          <object class="java.util.ArrayList"> 
           <void method="add"> 
            <string>key</string> 
@@ -2521,9 +2546,6 @@
           </void> 
          </object> 
         </void> 
-        <void property="operatorId"> 
-         <string>TS_0</string> 
-        </void> 
         <void property="schema"> 
          <object class="org.apache.hadoop.hive.ql.exec.RowSchema"> 
           <void property="signature"> 

Modified: hive/trunk/ql/src/test/results/compiler/plan/input20.q.xml
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/compiler/plan/input20.q.xml?rev=1597694&r1=1597693&r2=1597694&view=diff
==============================================================================
--- hive/trunk/ql/src/test/results/compiler/plan/input20.q.xml (original)
+++ hive/trunk/ql/src/test/results/compiler/plan/input20.q.xml Tue May 27 01:35:16 2014
@@ -693,28 +693,35 @@
           <void property="alias">
            <string>src</string>
           </void>
+          <void property="neededColumnIDs">
+           <object class="java.util.ArrayList">
+            <void method="add">
+             <int>0</int>
+            </void>
+           </object>
+          </void>
+          <void property="neededColumns">
+           <object class="java.util.ArrayList">
+            <void method="add">
+             <string>key</string>
+            </void>
+           </object>
+          </void>
           <void property="virtualCols">
            <object class="java.util.ArrayList"/>
           </void>
          </object>
         </void>
-        <void property="neededColumnIDs">
-         <object class="java.util.ArrayList">
-          <void method="add">
-           <int>0</int>
-          </void>
-         </object>
+        <void property="operatorId">
+         <string>TS_0</string>
         </void>
-        <void property="neededColumns">
+        <void property="referencedColumns">
          <object class="java.util.ArrayList">
           <void method="add">
            <string>key</string>
           </void>
          </object>
         </void>
-        <void property="operatorId">
-         <string>TS_0</string>
-        </void>
         <void property="schema">
          <object class="org.apache.hadoop.hive.ql.exec.RowSchema">
           <void property="signature">

Modified: hive/trunk/ql/src/test/results/compiler/plan/input3.q.xml
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/compiler/plan/input3.q.xml?rev=1597694&r1=1597693&r2=1597694&view=diff
==============================================================================
--- hive/trunk/ql/src/test/results/compiler/plan/input3.q.xml (original)
+++ hive/trunk/ql/src/test/results/compiler/plan/input3.q.xml Tue May 27 01:35:16 2014
@@ -219,31 +219,35 @@
                          </void> 
                         </void> 
                         <void property="conf"> 
-                         <object class="org.apache.hadoop.hive.ql.plan.TableScanDesc"/> 
-                        </void> 
-                        <void property="neededColumnIDs"> 
-                         <object class="java.util.ArrayList"> 
-                          <void method="add"> 
-                           <int>0</int> 
-                          </void> 
-                          <void method="add"> 
-                           <int>1</int> 
-                          </void> 
-                         </object> 
-                        </void> 
-                        <void property="neededColumns"> 
-                         <object class="java.util.ArrayList"> 
-                          <void method="add"> 
-                           <string>key</string> 
+                         <object class="org.apache.hadoop.hive.ql.plan.TableScanDesc"> 
+                          <void property="neededColumnIDs"> 
+                           <object class="java.util.ArrayList"> 
+                            <void method="add"> 
+                             <int>0</int> 
+                            </void> 
+                            <void method="add"> 
+                             <int>1</int> 
+                            </void> 
+                           </object> 
                           </void> 
-                          <void method="add"> 
-                           <string>value</string> 
+                          <void property="neededColumns"> 
+                           <object id="ArrayList1" class="java.util.ArrayList"> 
+                            <void method="add"> 
+                             <string>key</string> 
+                            </void> 
+                            <void method="add"> 
+                             <string>value</string> 
+                            </void> 
+                           </object> 
                           </void> 
                          </object> 
                         </void> 
                         <void property="operatorId"> 
                          <string>TS_13</string> 
                         </void> 
+                        <void property="referencedColumns"> 
+                         <object idref="ArrayList1"/> 
+                        </void> 
                         <void property="schema"> 
                          <object idref="RowSchema0"/> 
                         </void> 
@@ -560,7 +564,7 @@
        <string>Stage-16</string> 
       </void> 
       <void property="listTasks"> 
-       <object id="ArrayList1" class="java.util.ArrayList"> 
+       <object id="ArrayList2" class="java.util.ArrayList"> 
         <void method="add"> 
          <object id="MoveTask3" class="org.apache.hadoop.hive.ql.exec.MoveTask"> 
           <void property="childTasks"> 
@@ -764,31 +768,35 @@
                          </void> 
                         </void> 
                         <void property="conf"> 
-                         <object class="org.apache.hadoop.hive.ql.plan.TableScanDesc"/> 
-                        </void> 
-                        <void property="neededColumnIDs"> 
-                         <object class="java.util.ArrayList"> 
-                          <void method="add"> 
-                           <int>0</int> 
-                          </void> 
-                          <void method="add"> 
-                           <int>1</int> 
-                          </void> 
-                         </object> 
-                        </void> 
-                        <void property="neededColumns"> 
-                         <object class="java.util.ArrayList"> 
-                          <void method="add"> 
-                           <string>key</string> 
+                         <object class="org.apache.hadoop.hive.ql.plan.TableScanDesc"> 
+                          <void property="neededColumnIDs"> 
+                           <object class="java.util.ArrayList"> 
+                            <void method="add"> 
+                             <int>0</int> 
+                            </void> 
+                            <void method="add"> 
+                             <int>1</int> 
+                            </void> 
+                           </object> 
                           </void> 
-                          <void method="add"> 
-                           <string>value</string> 
+                          <void property="neededColumns"> 
+                           <object id="ArrayList3" class="java.util.ArrayList"> 
+                            <void method="add"> 
+                             <string>key</string> 
+                            </void> 
+                            <void method="add"> 
+                             <string>value</string> 
+                            </void> 
+                           </object> 
                           </void> 
                          </object> 
                         </void> 
                         <void property="operatorId"> 
                          <string>TS_15</string> 
                         </void> 
+                        <void property="referencedColumns"> 
+                         <object idref="ArrayList3"/> 
+                        </void> 
                         <void property="schema"> 
                          <object idref="RowSchema1"/> 
                         </void> 
@@ -1079,7 +1087,7 @@
          <object idref="ListBucketingCtx1"/> 
         </void> 
         <void property="listTasks"> 
-         <object idref="ArrayList1"/> 
+         <object idref="ArrayList2"/> 
         </void> 
        </object> 
       </void> 
@@ -1105,7 +1113,7 @@
        <string>Stage-22</string> 
       </void> 
       <void property="listTasks"> 
-       <object id="ArrayList2" class="java.util.ArrayList"> 
+       <object id="ArrayList4" class="java.util.ArrayList"> 
         <void method="add"> 
          <object id="MoveTask6" class="org.apache.hadoop.hive.ql.exec.MoveTask"> 
           <void property="childTasks"> 
@@ -1317,31 +1325,35 @@
                          </void> 
                         </void> 
                         <void property="conf"> 
-                         <object class="org.apache.hadoop.hive.ql.plan.TableScanDesc"/> 
-                        </void> 
-                        <void property="neededColumnIDs"> 
-                         <object class="java.util.ArrayList"> 
-                          <void method="add"> 
-                           <int>0</int> 
-                          </void> 
-                          <void method="add"> 
-                           <int>1</int> 
-                          </void> 
-                         </object> 
-                        </void> 
-                        <void property="neededColumns"> 
-                         <object class="java.util.ArrayList"> 
-                          <void method="add"> 
-                           <string>key</string> 
+                         <object class="org.apache.hadoop.hive.ql.plan.TableScanDesc"> 
+                          <void property="neededColumnIDs"> 
+                           <object class="java.util.ArrayList"> 
+                            <void method="add"> 
+                             <int>0</int> 
+                            </void> 
+                            <void method="add"> 
+                             <int>1</int> 
+                            </void> 
+                           </object> 
                           </void> 
-                          <void method="add"> 
-                           <string>value</string> 
+                          <void property="neededColumns"> 
+                           <object id="ArrayList5" class="java.util.ArrayList"> 
+                            <void method="add"> 
+                             <string>key</string> 
+                            </void> 
+                            <void method="add"> 
+                             <string>value</string> 
+                            </void> 
+                           </object> 
                           </void> 
                          </object> 
                         </void> 
                         <void property="operatorId"> 
                          <string>TS_17</string> 
                         </void> 
+                        <void property="referencedColumns"> 
+                         <object idref="ArrayList5"/> 
+                        </void> 
                         <void property="schema"> 
                          <object idref="RowSchema2"/> 
                         </void> 
@@ -1649,7 +1661,7 @@
          <object idref="ListBucketingCtx2"/> 
         </void> 
         <void property="listTasks"> 
-         <object idref="ArrayList2"/> 
+         <object idref="ArrayList4"/> 
         </void> 
        </object> 
       </void> 
@@ -1675,7 +1687,7 @@
        <string>Stage-27</string> 
       </void> 
       <void property="listTasks"> 
-       <object id="ArrayList3" class="java.util.ArrayList"> 
+       <object id="ArrayList6" class="java.util.ArrayList"> 
         <void method="add"> 
          <object id="MoveTask9" class="org.apache.hadoop.hive.ql.exec.MoveTask"> 
           <void property="childTasks"> 
@@ -1796,25 +1808,29 @@
                          </void> 
                         </void> 
                         <void property="conf"> 
-                         <object class="org.apache.hadoop.hive.ql.plan.TableScanDesc"/> 
-                        </void> 
-                        <void property="neededColumnIDs"> 
-                         <object class="java.util.ArrayList"> 
-                          <void method="add"> 
-                           <int>0</int> 
+                         <object class="org.apache.hadoop.hive.ql.plan.TableScanDesc"> 
+                          <void property="neededColumnIDs"> 
+                           <object class="java.util.ArrayList"> 
+                            <void method="add"> 
+                             <int>0</int> 
+                            </void> 
+                           </object> 
                           </void> 
-                         </object> 
-                        </void> 
-                        <void property="neededColumns"> 
-                         <object class="java.util.ArrayList"> 
-                          <void method="add"> 
-                           <string>_col0</string> 
+                          <void property="neededColumns"> 
+                           <object id="ArrayList7" class="java.util.ArrayList"> 
+                            <void method="add"> 
+                             <string>_col0</string> 
+                            </void> 
+                           </object> 
                           </void> 
                          </object> 
                         </void> 
                         <void property="operatorId"> 
                          <string>TS_19</string> 
                         </void> 
+                        <void property="referencedColumns"> 
+                         <object idref="ArrayList7"/> 
+                        </void> 
                         <void property="schema"> 
                          <object idref="RowSchema3"/> 
                         </void> 
@@ -1992,7 +2008,7 @@
          #### A masked pattern was here #### 
         </void> 
         <void property="listTasks"> 
-         <object idref="ArrayList3"/> 
+         <object idref="ArrayList6"/> 
         </void> 
        </object> 
       </void> 
@@ -3203,22 +3219,35 @@
           <void property="alias"> 
            <string>src</string> 
           </void> 
+          <void property="neededColumnIDs"> 
+           <object class="java.util.ArrayList"> 
+            <void method="add"> 
+             <int>0</int> 
+            </void> 
+            <void method="add"> 
+             <int>1</int> 
+            </void> 
+           </object> 
+          </void> 
+          <void property="neededColumns"> 
+           <object class="java.util.ArrayList"> 
+            <void method="add"> 
+             <string>key</string> 
+            </void> 
+            <void method="add"> 
+             <string>value</string> 
+            </void> 
+           </object> 
+          </void> 
           <void property="virtualCols"> 
            <object class="java.util.ArrayList"/> 
           </void> 
          </object> 
         </void> 
-        <void property="neededColumnIDs"> 
-         <object class="java.util.ArrayList"> 
-          <void method="add"> 
-           <int>0</int> 
-          </void> 
-          <void method="add"> 
-           <int>1</int> 
-          </void> 
-         </object> 
+        <void property="operatorId"> 
+         <string>TS_0</string> 
         </void> 
-        <void property="neededColumns"> 
+        <void property="referencedColumns"> 
          <object class="java.util.ArrayList"> 
           <void method="add"> 
            <string>key</string> 
@@ -3228,9 +3257,6 @@
           </void> 
          </object> 
         </void> 
-        <void property="operatorId"> 
-         <string>TS_0</string> 
-        </void> 
         <void property="schema"> 
          <object class="org.apache.hadoop.hive.ql.exec.RowSchema"> 
           <void property="signature"> 

Modified: hive/trunk/ql/src/test/results/compiler/plan/input4.q.xml
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/compiler/plan/input4.q.xml?rev=1597694&r1=1597693&r2=1597694&view=diff
==============================================================================
--- hive/trunk/ql/src/test/results/compiler/plan/input4.q.xml (original)
+++ hive/trunk/ql/src/test/results/compiler/plan/input4.q.xml Tue May 27 01:35:16 2014
@@ -833,22 +833,35 @@
           <void property="alias">
            <string>src</string>
           </void>
+          <void property="neededColumnIDs">
+           <object class="java.util.ArrayList">
+            <void method="add">
+             <int>0</int>
+            </void>
+            <void method="add">
+             <int>1</int>
+            </void>
+           </object>
+          </void>
+          <void property="neededColumns">
+           <object class="java.util.ArrayList">
+            <void method="add">
+             <string>key</string>
+            </void>
+            <void method="add">
+             <string>value</string>
+            </void>
+           </object>
+          </void>
           <void property="virtualCols">
            <object class="java.util.ArrayList"/>
           </void>
          </object>
         </void>
-        <void property="neededColumnIDs">
-         <object class="java.util.ArrayList">
-          <void method="add">
-           <int>0</int>
-          </void>
-          <void method="add">
-           <int>1</int>
-          </void>
-         </object>
+        <void property="operatorId">
+         <string>TS_0</string>
         </void>
-        <void property="neededColumns">
+        <void property="referencedColumns">
          <object class="java.util.ArrayList">
           <void method="add">
            <string>key</string>
@@ -858,9 +871,6 @@
           </void>
          </object>
         </void>
-        <void property="operatorId">
-         <string>TS_0</string>
-        </void>
         <void property="schema">
          <object class="org.apache.hadoop.hive.ql.exec.RowSchema">
           <void property="signature">

Modified: hive/trunk/ql/src/test/results/compiler/plan/input5.q.xml
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/compiler/plan/input5.q.xml?rev=1597694&r1=1597693&r2=1597694&view=diff
==============================================================================
--- hive/trunk/ql/src/test/results/compiler/plan/input5.q.xml (original)
+++ hive/trunk/ql/src/test/results/compiler/plan/input5.q.xml Tue May 27 01:35:16 2014
@@ -820,22 +820,35 @@
           <void property="alias">
            <string>src_thrift</string>
           </void>
+          <void property="neededColumnIDs">
+           <object class="java.util.ArrayList">
+            <void method="add">
+             <int>2</int>
+            </void>
+            <void method="add">
+             <int>4</int>
+            </void>
+           </object>
+          </void>
+          <void property="neededColumns">
+           <object class="java.util.ArrayList">
+            <void method="add">
+             <string>lint</string>
+            </void>
+            <void method="add">
+             <string>lintstring</string>
+            </void>
+           </object>
+          </void>
           <void property="virtualCols">
            <object class="java.util.ArrayList"/>
           </void>
          </object>
         </void>
-        <void property="neededColumnIDs">
-         <object class="java.util.ArrayList">
-          <void method="add">
-           <int>2</int>
-          </void>
-          <void method="add">
-           <int>4</int>
-          </void>
-         </object>
+        <void property="operatorId">
+         <string>TS_0</string>
         </void>
-        <void property="neededColumns">
+        <void property="referencedColumns">
          <object class="java.util.ArrayList">
           <void method="add">
            <string>lint</string>
@@ -845,9 +858,6 @@
           </void>
          </object>
         </void>
-        <void property="operatorId">
-         <string>TS_0</string>
-        </void>
         <void property="schema">
          <object class="org.apache.hadoop.hive.ql.exec.RowSchema">
           <void property="signature">

Modified: hive/trunk/ql/src/test/results/compiler/plan/input6.q.xml
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/compiler/plan/input6.q.xml?rev=1597694&r1=1597693&r2=1597694&view=diff
==============================================================================
--- hive/trunk/ql/src/test/results/compiler/plan/input6.q.xml (original)
+++ hive/trunk/ql/src/test/results/compiler/plan/input6.q.xml Tue May 27 01:35:16 2014
@@ -219,31 +219,35 @@
                          </void> 
                         </void> 
                         <void property="conf"> 
-                         <object class="org.apache.hadoop.hive.ql.plan.TableScanDesc"/> 
-                        </void> 
-                        <void property="neededColumnIDs"> 
-                         <object class="java.util.ArrayList"> 
-                          <void method="add"> 
-                           <int>0</int> 
-                          </void> 
-                          <void method="add"> 
-                           <int>1</int> 
-                          </void> 
-                         </object> 
-                        </void> 
-                        <void property="neededColumns"> 
-                         <object class="java.util.ArrayList"> 
-                          <void method="add"> 
-                           <string>key</string> 
-                          </void> 
-                          <void method="add"> 
-                           <string>value</string> 
+                         <object class="org.apache.hadoop.hive.ql.plan.TableScanDesc"> 
+                          <void property="neededColumnIDs"> 
+                           <object class="java.util.ArrayList"> 
+                            <void method="add"> 
+                             <int>0</int> 
+                            </void> 
+                            <void method="add"> 
+                             <int>1</int> 
+                            </void> 
+                           </object> 
+                          </void> 
+                          <void property="neededColumns"> 
+                           <object id="ArrayList1" class="java.util.ArrayList"> 
+                            <void method="add"> 
+                             <string>key</string> 
+                            </void> 
+                            <void method="add"> 
+                             <string>value</string> 
+                            </void> 
+                           </object> 
                           </void> 
                          </object> 
                         </void> 
                         <void property="operatorId"> 
                          <string>TS_5</string> 
                         </void> 
+                        <void property="referencedColumns"> 
+                         <object idref="ArrayList1"/> 
+                        </void> 
                         <void property="schema"> 
                          <object idref="RowSchema0"/> 
                         </void> 
@@ -975,22 +979,35 @@
           <void property="alias"> 
            <string>src1</string> 
           </void> 
+          <void property="neededColumnIDs"> 
+           <object class="java.util.ArrayList"> 
+            <void method="add"> 
+             <int>0</int> 
+            </void> 
+            <void method="add"> 
+             <int>1</int> 
+            </void> 
+           </object> 
+          </void> 
+          <void property="neededColumns"> 
+           <object class="java.util.ArrayList"> 
+            <void method="add"> 
+             <string>key</string> 
+            </void> 
+            <void method="add"> 
+             <string>value</string> 
+            </void> 
+           </object> 
+          </void> 
           <void property="virtualCols"> 
            <object class="java.util.ArrayList"/> 
           </void> 
          </object> 
         </void> 
-        <void property="neededColumnIDs"> 
-         <object class="java.util.ArrayList"> 
-          <void method="add"> 
-           <int>0</int> 
-          </void> 
-          <void method="add"> 
-           <int>1</int> 
-          </void> 
-         </object> 
+        <void property="operatorId"> 
+         <string>TS_0</string> 
         </void> 
-        <void property="neededColumns"> 
+        <void property="referencedColumns"> 
          <object class="java.util.ArrayList"> 
           <void method="add"> 
            <string>key</string> 
@@ -1000,9 +1017,6 @@
           </void> 
          </object> 
         </void> 
-        <void property="operatorId"> 
-         <string>TS_0</string> 
-        </void> 
         <void property="schema"> 
          <object class="org.apache.hadoop.hive.ql.exec.RowSchema"> 
           <void property="signature">