From 715e855c63a18ca66277daaacb3e19aa5e0464fa Mon Sep 17 00:00:00 2001 From: Alina Abramova Date: Tue, 8 Nov 2016 10:37:00 -0800 Subject: [PATCH] HIVE-13000 : Hive returns useless parsing error Signed-off-by: Ashutosh Chauhan --- .../org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java | 12 ++++++++++-- ql/src/test/queries/clientnegative/groupby_struct.q | 6 ++++++ ql/src/test/results/clientnegative/groupby_struct.q.out | 15 +++++++++++++++ 3 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 ql/src/test/queries/clientnegative/groupby_struct.q create mode 100644 ql/src/test/results/clientnegative/groupby_struct.q.out 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 10fe6fc66c..5a88a96d72 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 @@ -12025,8 +12025,16 @@ private ExprNodeDesc getExprNodeDescCached(ASTNode expr, RowResolver input) TypeCheckProcFactory.genExprNode(expr, tcCtx); ExprNodeDesc desc = nodeOutputs.get(expr); if (desc == null) { - String errMsg = tcCtx.getError(); - if (errMsg == null) { + String tableOrCol = BaseSemanticAnalyzer.unescapeIdentifier(expr + .getChild(0).getText()); + ColumnInfo colInfo = input.get(null, tableOrCol); + String errMsg; + if (colInfo == null && input.getIsExprResolver()){ + errMsg = ErrorMsg.NON_KEY_EXPR_IN_GROUPBY.getMsg(expr); + } else { + errMsg = tcCtx.getError(); + } + if (errMsg == null) { errMsg = "Error in parsing "; } throw new SemanticException(errMsg); diff --git a/ql/src/test/queries/clientnegative/groupby_struct.q b/ql/src/test/queries/clientnegative/groupby_struct.q new file mode 100644 index 0000000000..99bbdaf0df --- /dev/null +++ b/ql/src/test/queries/clientnegative/groupby_struct.q @@ -0,0 +1,6 @@ +CREATE TABLE addresses ( + name float, + address struct + ); + +SELECT address FROM addresses GROUP BY address.intVals; diff --git a/ql/src/test/results/clientnegative/groupby_struct.q.out b/ql/src/test/results/clientnegative/groupby_struct.q.out new file mode 100644 index 0000000000..f62dbfeac3 --- /dev/null +++ b/ql/src/test/results/clientnegative/groupby_struct.q.out @@ -0,0 +1,15 @@ +PREHOOK: query: CREATE TABLE addresses ( + name float, + address struct + ) +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@addresses +POSTHOOK: query: CREATE TABLE addresses ( + name float, + address struct + ) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@addresses +FAILED: SemanticException [Error 10025]: Line 3:7 Expression not in GROUP BY key 'address' -- 2.14.3 (Apple Git-98)