diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java index ab9271f732dbb92455f951af6de4d2cc2bf005e5..e1278d59efd19ab499b620be8a751c2c1f719c3a 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java @@ -4643,8 +4643,8 @@ private Operator genGroupByPlanMapGroupByOperator(QB qb, ExprNodeDesc grpByExprNode = genExprNodeDesc(grpbyExpr, groupByInputRowResolver); - if (ExprNodeDescUtils.indexOf(grpByExprNode, groupByKeys) >= 0) { - // Skip duplicated grouping keys + if ((grpByExprNode instanceof ExprNodeColumnDesc) && ExprNodeDescUtils.indexOf(grpByExprNode, groupByKeys) >= 0) { + // Skip duplicated grouping keys, it happens when define column alias. grpByExprs.remove(i--); continue; } diff --git a/ql/src/test/queries/clientpositive/groupby_constcolval.q b/ql/src/test/queries/clientpositive/groupby_constcolval.q new file mode 100644 index 0000000000000000000000000000000000000000..e0ad694b839bcba686029d09b699ce1a6104803e --- /dev/null +++ b/ql/src/test/queries/clientpositive/groupby_constcolval.q @@ -0,0 +1,4 @@ +DROP TABLE IF EXISTS tlbtest; +create table tlbtest (key int, key1 int, key2 int); +select key, key1, key2 from (select a.key, 0 as key1 , 0 as key2 from tlbtest a inner join src b on a.key = b.key) a group by key, key1, key2; +select key, key1, key2 from (select a.key, 0 as key1 , 1 as key2 from tlbtest a inner join src b on a.key = b.key) a group by key, key1, key2; diff --git a/ql/src/test/results/clientpositive/groupby_constcolval.q.out b/ql/src/test/results/clientpositive/groupby_constcolval.q.out new file mode 100644 index 0000000000000000000000000000000000000000..22fc1a1e701071e1787ebab8f94678efb07d6695 --- /dev/null +++ b/ql/src/test/results/clientpositive/groupby_constcolval.q.out @@ -0,0 +1,32 @@ +PREHOOK: query: DROP TABLE IF EXISTS tlbtest +PREHOOK: type: DROPTABLE +POSTHOOK: query: DROP TABLE IF EXISTS tlbtest +POSTHOOK: type: DROPTABLE +PREHOOK: query: create table tlbtest (key int, key1 int, key2 int) +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@tlbtest +POSTHOOK: query: create table tlbtest (key int, key1 int, key2 int) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@tlbtest +PREHOOK: query: select key, key1, key2 from (select a.key, 0 as key1 , 0 as key2 from tlbtest a inner join src b on a.key = b.key) a group by key, key1, key2 +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Input: default@tlbtest +#### A masked pattern was here #### +POSTHOOK: query: select key, key1, key2 from (select a.key, 0 as key1 , 0 as key2 from tlbtest a inner join src b on a.key = b.key) a group by key, key1, key2 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Input: default@tlbtest +#### A masked pattern was here #### +PREHOOK: query: select key, key1, key2 from (select a.key, 0 as key1 , 1 as key2 from tlbtest a inner join src b on a.key = b.key) a group by key, key1, key2 +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Input: default@tlbtest +#### A masked pattern was here #### +POSTHOOK: query: select key, key1, key2 from (select a.key, 0 as key1 , 1 as key2 from tlbtest a inner join src b on a.key = b.key) a group by key, key1, key2 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Input: default@tlbtest +#### A masked pattern was here #### diff --git a/ql/src/test/results/clientpositive/groupby_duplicate_key.q.out b/ql/src/test/results/clientpositive/groupby_duplicate_key.q.out index fc95f41febefe0108910690ff7e951f66332341e..2f2a6e607ae12699af415e95589cde5602ea20ab 100644 --- a/ql/src/test/results/clientpositive/groupby_duplicate_key.q.out +++ b/ql/src/test/results/clientpositive/groupby_duplicate_key.q.out @@ -21,14 +21,14 @@ STAGE PLANS: outputColumnNames: key Statistics: Num rows: 500 Data size: 5312 Basic stats: COMPLETE Column stats: NONE Group By Operator - keys: key (type: string), '' (type: string) + keys: key (type: string), '' (type: string), '' (type: string) mode: hash - outputColumnNames: _col0, _col1 + outputColumnNames: _col0, _col1, _col2 Statistics: Num rows: 500 Data size: 5312 Basic stats: COMPLETE Column stats: NONE Reduce Output Operator - key expressions: _col0 (type: string), _col1 (type: string) + key expressions: _col0 (type: string), _col2 (type: string) sort order: ++ - Map-reduce partition columns: _col0 (type: string), _col1 (type: string) + Map-reduce partition columns: _col0 (type: string), _col2 (type: string) Statistics: Num rows: 500 Data size: 5312 Basic stats: COMPLETE Column stats: NONE Reduce Operator Tree: Group By Operator @@ -99,14 +99,14 @@ STAGE PLANS: outputColumnNames: key Statistics: Num rows: 500 Data size: 5312 Basic stats: COMPLETE Column stats: NONE Group By Operator - keys: key (type: string), 'X' (type: string) + keys: key (type: string), 'X' (type: string), 'X' (type: string) mode: hash - outputColumnNames: _col0, _col1 + outputColumnNames: _col0, _col1, _col2 Statistics: Num rows: 500 Data size: 5312 Basic stats: COMPLETE Column stats: NONE Reduce Output Operator - key expressions: _col0 (type: string), _col1 (type: string) + key expressions: _col0 (type: string), _col2 (type: string) sort order: ++ - Map-reduce partition columns: _col0 (type: string), _col1 (type: string) + Map-reduce partition columns: _col0 (type: string), _col2 (type: string) Statistics: Num rows: 500 Data size: 5312 Basic stats: COMPLETE Column stats: NONE Reduce Operator Tree: Group By Operator