diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/HiveGBOpConvUtil.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/HiveGBOpConvUtil.java index 7fbf8cd..cb60f90 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/HiveGBOpConvUtil.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/HiveGBOpConvUtil.java @@ -711,15 +711,29 @@ private static OpAttr genMapSideRS(OpAttr inputOpAf, GBInfo gbInfo) throws Seman // TODO: Why is this needed (doesn't represent any cols) String udafName = SemanticAnalyzer.getColumnInternalName(reduceKeys.size()); outputKeyColumnNames.add(udafName); - for (int i = 0; i < gbInfo.distExprNodes.size(); i++) { - reduceKeys.add(gbInfo.distExprNodes.get(i)); - outputColName = SemanticAnalyzer.getColumnInternalName(i); - String field = Utilities.ReduceField.KEY.toString() + "." + udafName + ":" + i + "." - + outputColName; - ColumnInfo colInfo = new ColumnInfo(field, gbInfo.distExprNodes.get(i).getTypeInfo(), null, - false); - colInfoLst.add(colInfo); - colExprMap.put(field, gbInfo.distExprNodes.get(i)); + int numDistinctUDFs = 0; + + for (int i = 0; i< gbInfo.udafAttrs.size(); i++) { + UDAFAttrs udafAttr = gbInfo.udafAttrs.get(i); + + if (udafAttr.isDistinctUDAF) { + for (int j = 0; j < udafAttr.udafParamsIndxInGBInfoDistExprs.size(); j++) { + int distExprNodeIndex = udafAttr.udafParamsIndxInGBInfoDistExprs.get(j); + ExprNodeDesc distinctUDAFParam = gbInfo.distExprNodes.get(distExprNodeIndex); + + reduceKeys.add(distinctUDAFParam); + outputColName = SemanticAnalyzer.getColumnInternalName(j); + // The naming convention for the Distinct UDAF field is : + // :._col_ + String field = Utilities.ReduceField.KEY.toString() + "." + udafName + + ":" + numDistinctUDFs + "." + outputColName; + ColumnInfo colInfo = new ColumnInfo(field, + gbInfo.distExprNodes.get(distExprNodeIndex).getTypeInfo(), null, false); + colInfoLst.add(colInfo); + colExprMap.put(field, gbInfo.distExprNodes.get(distExprNodeIndex)); + } + numDistinctUDFs++; + } } }