This is an automated email from the ASF dual-hosted git repository. jcamacho pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/hive.git
The following commit(s) were added to refs/heads/master by this push: new 2a400c4 HIVE-23060: Query failing with error "Grouping sets expression is not in GROUP BY key. Error encountered near token" (Mahesh Kumar Behera, reviewed by Jesus Camacho Rodriguez) 2a400c4 is described below commit 2a400c4d82a6135ae5816ebb0fc130fe909b3120 Author: Mahesh Kumar Behera <mah...@apache.org> AuthorDate: Tue Mar 24 15:28:41 2020 -0700 HIVE-23060: Query failing with error "Grouping sets expression is not in GROUP BY key. Error encountered near token" (Mahesh Kumar Behera, reviewed by Jesus Camacho Rodriguez) --- .../hadoop/hive/ql/parse/SemanticAnalyzer.java | 6 + .../clientpositive/groupby_grouping_sets_view.q | 38 ++++++ .../groupby_grouping_sets_view.q.out | 148 +++++++++++++++++++++ 3 files changed, 192 insertions(+) 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 841f92b..679ae2e 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 @@ -4211,6 +4211,12 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer { ErrorMsg.HIVE_GROUPING_SETS_EXPR_NOT_IN_GROUPBY.getErrorCodedMsg())); } bitmap = unsetBit(bitmap, groupByExpr.size() - pos - 1); + + // Add the copy translation for grouping set keys. This will make sure that same translation as + // group by key is applied on the grouping set key. If translation is added to group by key + // to add the table name to the column name (tbl.key), then same thing will be done for grouping + // set keys also. + unparseTranslator.addCopyTranslation((ASTNode)child.getChild(j), groupByExpr.get(pos)); } result.add(bitmap); } diff --git a/ql/src/test/queries/clientpositive/groupby_grouping_sets_view.q b/ql/src/test/queries/clientpositive/groupby_grouping_sets_view.q new file mode 100644 index 0000000..376d3d4 --- /dev/null +++ b/ql/src/test/queries/clientpositive/groupby_grouping_sets_view.q @@ -0,0 +1,38 @@ +set hive.mapred.mode=nonstrict; + +create database test; + +create table test.case665558 (c1 string, c2 string); + +insert into test.case665558 values ("1", "1"); +insert into test.case665558 values ("2", "1"); +insert into test.case665558 values ("3", "1"); +insert into test.case665558 values ("1", "4"); +insert into test.case665558 values ("1", "5"); + +create view test.viewcase665558 +as +select + case + when GROUPING__ID = 255 then `c1` + end as `col_1`, + case + when GROUPING__ID = 255 then 3 + end as `col_2`, + `c1`, + `c2` +from + `test`.`case665558` +group by + `c1`, + `c2` +GROUPING SETS + ( + (`c1`), + (`c1`, `c2`) + ); + +select * from test.viewcase665558 ; + + +drop database test cascade; diff --git a/ql/src/test/results/clientpositive/groupby_grouping_sets_view.q.out b/ql/src/test/results/clientpositive/groupby_grouping_sets_view.q.out new file mode 100644 index 0000000..582b780 --- /dev/null +++ b/ql/src/test/results/clientpositive/groupby_grouping_sets_view.q.out @@ -0,0 +1,148 @@ +PREHOOK: query: create database test +PREHOOK: type: CREATEDATABASE +PREHOOK: Output: database:test +POSTHOOK: query: create database test +POSTHOOK: type: CREATEDATABASE +POSTHOOK: Output: database:test +PREHOOK: query: create table test.case665558 (c1 string, c2 string) +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:test +PREHOOK: Output: test@case665558 +POSTHOOK: query: create table test.case665558 (c1 string, c2 string) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:test +POSTHOOK: Output: test@case665558 +PREHOOK: query: insert into test.case665558 values ("1", "1") +PREHOOK: type: QUERY +PREHOOK: Input: _dummy_database@_dummy_table +PREHOOK: Output: test@case665558 +POSTHOOK: query: insert into test.case665558 values ("1", "1") +POSTHOOK: type: QUERY +POSTHOOK: Input: _dummy_database@_dummy_table +POSTHOOK: Output: test@case665558 +POSTHOOK: Lineage: case665558.c1 SCRIPT [] +POSTHOOK: Lineage: case665558.c2 SCRIPT [] +PREHOOK: query: insert into test.case665558 values ("2", "1") +PREHOOK: type: QUERY +PREHOOK: Input: _dummy_database@_dummy_table +PREHOOK: Output: test@case665558 +POSTHOOK: query: insert into test.case665558 values ("2", "1") +POSTHOOK: type: QUERY +POSTHOOK: Input: _dummy_database@_dummy_table +POSTHOOK: Output: test@case665558 +POSTHOOK: Lineage: case665558.c1 SCRIPT [] +POSTHOOK: Lineage: case665558.c2 SCRIPT [] +PREHOOK: query: insert into test.case665558 values ("3", "1") +PREHOOK: type: QUERY +PREHOOK: Input: _dummy_database@_dummy_table +PREHOOK: Output: test@case665558 +POSTHOOK: query: insert into test.case665558 values ("3", "1") +POSTHOOK: type: QUERY +POSTHOOK: Input: _dummy_database@_dummy_table +POSTHOOK: Output: test@case665558 +POSTHOOK: Lineage: case665558.c1 SCRIPT [] +POSTHOOK: Lineage: case665558.c2 SCRIPT [] +PREHOOK: query: insert into test.case665558 values ("1", "4") +PREHOOK: type: QUERY +PREHOOK: Input: _dummy_database@_dummy_table +PREHOOK: Output: test@case665558 +POSTHOOK: query: insert into test.case665558 values ("1", "4") +POSTHOOK: type: QUERY +POSTHOOK: Input: _dummy_database@_dummy_table +POSTHOOK: Output: test@case665558 +POSTHOOK: Lineage: case665558.c1 SCRIPT [] +POSTHOOK: Lineage: case665558.c2 SCRIPT [] +PREHOOK: query: insert into test.case665558 values ("1", "5") +PREHOOK: type: QUERY +PREHOOK: Input: _dummy_database@_dummy_table +PREHOOK: Output: test@case665558 +POSTHOOK: query: insert into test.case665558 values ("1", "5") +POSTHOOK: type: QUERY +POSTHOOK: Input: _dummy_database@_dummy_table +POSTHOOK: Output: test@case665558 +POSTHOOK: Lineage: case665558.c1 SCRIPT [] +POSTHOOK: Lineage: case665558.c2 SCRIPT [] +PREHOOK: query: create view test.viewcase665558 +as +select + case + when GROUPING__ID = 255 then `c1` + end as `col_1`, + case + when GROUPING__ID = 255 then 3 + end as `col_2`, + `c1`, + `c2` +from + `test`.`case665558` +group by + `c1`, + `c2` +GROUPING SETS + ( + (`c1`), + (`c1`, `c2`) + ) +PREHOOK: type: CREATEVIEW +PREHOOK: Input: test@case665558 +PREHOOK: Output: database:test +PREHOOK: Output: test@viewcase665558 +POSTHOOK: query: create view test.viewcase665558 +as +select + case + when GROUPING__ID = 255 then `c1` + end as `col_1`, + case + when GROUPING__ID = 255 then 3 + end as `col_2`, + `c1`, + `c2` +from + `test`.`case665558` +group by + `c1`, + `c2` +GROUPING SETS + ( + (`c1`), + (`c1`, `c2`) + ) +POSTHOOK: type: CREATEVIEW +POSTHOOK: Input: test@case665558 +POSTHOOK: Output: database:test +POSTHOOK: Output: test@viewcase665558 +POSTHOOK: Lineage: viewcase665558.c1 SIMPLE [(case665558)case665558.FieldSchema(name:c1, type:string, comment:null), ] +POSTHOOK: Lineage: viewcase665558.c2 SIMPLE [(case665558)case665558.FieldSchema(name:c2, type:string, comment:null), ] +POSTHOOK: Lineage: viewcase665558.col_1 EXPRESSION [(case665558)case665558.FieldSchema(name:c1, type:string, comment:null), ] +POSTHOOK: Lineage: viewcase665558.col_2 EXPRESSION [] +PREHOOK: query: select * from test.viewcase665558 +PREHOOK: type: QUERY +PREHOOK: Input: test@case665558 +PREHOOK: Input: test@viewcase665558 +#### A masked pattern was here #### +POSTHOOK: query: select * from test.viewcase665558 +POSTHOOK: type: QUERY +POSTHOOK: Input: test@case665558 +POSTHOOK: Input: test@viewcase665558 +#### A masked pattern was here #### +NULL NULL 1 1 +NULL NULL 1 4 +NULL NULL 1 5 +NULL NULL 1 NULL +NULL NULL 2 1 +NULL NULL 2 NULL +NULL NULL 3 1 +NULL NULL 3 NULL +PREHOOK: query: drop database test cascade +PREHOOK: type: DROPDATABASE +PREHOOK: Input: database:test +PREHOOK: Output: database:test +PREHOOK: Output: test@case665558 +PREHOOK: Output: test@viewcase665558 +POSTHOOK: query: drop database test cascade +POSTHOOK: type: DROPDATABASE +POSTHOOK: Input: database:test +POSTHOOK: Output: database:test +POSTHOOK: Output: test@case665558 +POSTHOOK: Output: test@viewcase665558