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..ec6b4e5 100644 --- ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java +++ ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java @@ -7024,12 +7024,16 @@ private Operator createCommonReduceSink(QB qb, Operator input) List> inputOperators = new ArrayList>(ks.size()); List> sprayKeyLists = new ArrayList>(ks.size()); + List> distinctKeyLists = new ArrayList>(ks.size()); // Iterate over each clause for (String dest : ks) { Operator input = inputs.get(dest); RowResolver inputRR = opParseCtx.get(input).getRowResolver(); - List sprayKeys = getDistinctExprs(qbp, dest, inputRR); + + List distinctKeys = getDistinctExprs(qbp, dest, inputRR); + List sprayKeys = new ArrayList(); + // Add the group by expressions List grpByExprs = getGroupByForClause(qbp, dest); @@ -7050,6 +7054,10 @@ private Operator createCommonReduceSink(QB qb, Operator input) continue; } + if (!matchExprLists(distinctKeyLists.get(i), distinctKeys)) { + continue; + } + // A match was found, so add the clause to the corresponding list commonGroupByDestGroups.get(i).add(dest); found = true; @@ -7060,6 +7068,7 @@ private Operator createCommonReduceSink(QB qb, Operator input) if (!found) { inputOperators.add(input); sprayKeyLists.add(sprayKeys); + distinctKeyLists.add(distinctKeys); List destGroup = new ArrayList(); destGroup.add(dest); commonGroupByDestGroups.add(destGroup);