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 d60ba09..ce73e84 100644 --- ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java +++ ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java @@ -119,6 +119,7 @@ import org.apache.hadoop.hive.ql.plan.DynamicPartitionCtx; import org.apache.hadoop.hive.ql.plan.ExprNodeColumnDesc; import org.apache.hadoop.hive.ql.plan.ExprNodeConstantDesc; import org.apache.hadoop.hive.ql.plan.ExprNodeDesc; +import org.apache.hadoop.hive.ql.plan.ExprNodeFieldDesc; import org.apache.hadoop.hive.ql.plan.ExprNodeGenericFuncDesc; import org.apache.hadoop.hive.ql.plan.ExprNodeNullDesc; import org.apache.hadoop.hive.ql.plan.ExtractDesc; @@ -2954,6 +2955,14 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer { reduceSinkOutputRowResolver.putExpression(entry.getValue(), new ColumnInfo(field, type, null, false)); } + int deficiency = reduceKeys.size() - outputKeyColumnNames.size(); + if (deficiency < 0) { + ExprNodeFieldDesc field = new ExprNodeFieldDesc(); + field.setDesc(new ExprNodeNullDesc()); + for (; deficiency < 0; deficiency++) { + reduceKeys.add(field); + } + } } ReduceSinkOperator rsOp = (ReduceSinkOperator) putOpInsertMap( diff --git ql/src/test/queries/clientpositive/groupby_distinct_samekey.q ql/src/test/queries/clientpositive/groupby_distinct_samekey.q new file mode 100644 index 0000000..4df1b09 --- /dev/null +++ ql/src/test/queries/clientpositive/groupby_distinct_samekey.q @@ -0,0 +1,5 @@ +create table t1( key_int1 int, key_int2 int, key_string1 string, key_string2 string); + +select key_int1, sum(distinct key_int1) from t1 group by key_int1; + +DROP TABLE t1; \ No newline at end of file diff --git ql/src/test/results/clientpositive/groupby_distinct_samekey.q.out ql/src/test/results/clientpositive/groupby_distinct_samekey.q.out new file mode 100644 index 0000000..6cb814a --- /dev/null +++ ql/src/test/results/clientpositive/groupby_distinct_samekey.q.out @@ -0,0 +1,21 @@ +PREHOOK: query: create table t1( key_int1 int, key_int2 int, key_string1 string, key_string2 string) +PREHOOK: type: CREATETABLE +POSTHOOK: query: create table t1( key_int1 int, key_int2 int, key_string1 string, key_string2 string) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: default@t1 +PREHOOK: query: select key_int1, sum(distinct key_int1) from t1 group by key_int1 +PREHOOK: type: QUERY +PREHOOK: Input: default@t1 +PREHOOK: Output: file:/tmp/navis/hive_2011-11-27_23-45-35_991_1651666471689457026/-mr-10000 +POSTHOOK: query: select key_int1, sum(distinct key_int1) from t1 group by key_int1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@t1 +POSTHOOK: Output: file:/tmp/navis/hive_2011-11-27_23-45-35_991_1651666471689457026/-mr-10000 +PREHOOK: query: DROP TABLE t1 +PREHOOK: type: DROPTABLE +PREHOOK: Input: default@t1 +PREHOOK: Output: default@t1 +POSTHOOK: query: DROP TABLE t1 +POSTHOOK: type: DROPTABLE +POSTHOOK: Input: default@t1 +POSTHOOK: Output: default@t1