diff --git ql/src/java/org/apache/hadoop/hive/ql/optimizer/ColumnPrunerProcFactory.java ql/src/java/org/apache/hadoop/hive/ql/optimizer/ColumnPrunerProcFactory.java index a2a7f00..71d6280 100644 --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/ColumnPrunerProcFactory.java +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/ColumnPrunerProcFactory.java @@ -798,11 +798,14 @@ public Object process(Node nd, Stack stack, NodeProcessorCtx ctx, ArrayList newOutputColumnNames = new ArrayList(); ArrayList rs_oldsignature = op.getSchema().getSignature(); ArrayList rs_newsignature = new ArrayList(); - for (String col : cols) { - int index = originalOutputColumnNames.indexOf(col); - newOutputColumnNames.add(col); - newColList.add(originalColList.get(index)); - rs_newsignature.add(rs_oldsignature.get(index)); + // The pruning needs to preserve the order of columns in the input schema + for (int i = 0; i < originalOutputColumnNames.size(); i++) { + String col = originalOutputColumnNames.get(i); + if (cols.contains(col)) { + newOutputColumnNames.add(col); + newColList.add(originalColList.get(i)); + rs_newsignature.add(rs_oldsignature.get(i)); + } } op.getSchema().setSignature(rs_newsignature); conf.setColList(newColList);