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 ####