diff --git ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java index a39fd21..11fc3fa 100644 --- ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java +++ ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java @@ -2903,12 +2903,18 @@ private Operator genGroupByPlanGroupByOperator(QBParseInfo parseInfo, assert (aggregationTrees != null); // get the last colName for the reduce KEY // it represents the column name corresponding to distinct aggr, if any + List reduceValues = null; String lastKeyColName = null; - List inputKeyCols = ((ReduceSinkDesc) rs.getConf()).getOutputKeyColumnNames(); - if (inputKeyCols.size() > 0) { - lastKeyColName = inputKeyCols.get(inputKeyCols.size() - 1); + // in case of forward operator, do not compute last key + if (input.getConf() instanceof ReduceSinkDesc) { + List inputKeyCols = ((ReduceSinkDesc) rs.getConf()).getOutputKeyColumnNames(); + if (inputKeyCols.size() > 0) { + lastKeyColName = inputKeyCols.get(inputKeyCols.size() - 1); + } } - List reduceValues = ((ReduceSinkDesc) rs.getConf()).getValueCols(); + + reduceValues = ((ReduceSinkDesc) rs.getConf()).getValueCols(); + int numDistinctUDFs = 0; for (Map.Entry entry : aggregationTrees.entrySet()) { ASTNode value = entry.getValue();