You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@impala.apache.org by ta...@apache.org on 2016/10/07 20:06:59 UTC

incubator-impala git commit: IMPALA-4240: qgen: Add "ParseException line missing )" to Known Errors for Hive

Repository: incubator-impala
Updated Branches:
  refs/heads/master acb25a6d1 -> 50b2b888c


IMPALA-4240: qgen: Add "ParseException line missing )" to Known Errors for Hive

There is a bug in Hive with parenthesis parsing for PARTITION BY clauses. Full details
can be found in https://issues.apache.org/jira/browse/HIVE-14871. Fixing this issue in
Hive isn't trivial, so it should be marked as a "Known Error" in the qgen code.

The exception printed by Hive is of the form:

FAILED: ParseException line ?:? missing ) at '?' near '?'
line ?:? missing EOF at '?' near '?' (state=42000,code=40000)

Testing:
* All unit tests are passing
* Tested against Hive locally
* Tested against Impala via the discrepancy searcher

Change-Id: Iba3ff4c667ad43ab0927fb19da3dd36ba6504058
Reviewed-on: http://gerrit.cloudera.org:8080/4587
Reviewed-by: Taras Bobrovytsky <tb...@cloudera.com>
Tested-by: Taras Bobrovytsky <tb...@cloudera.com>


Project: http://git-wip-us.apache.org/repos/asf/incubator-impala/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-impala/commit/50b2b888
Tree: http://git-wip-us.apache.org/repos/asf/incubator-impala/tree/50b2b888
Diff: http://git-wip-us.apache.org/repos/asf/incubator-impala/diff/50b2b888

Branch: refs/heads/master
Commit: 50b2b888cd9053c013d4c2e5c34f0107e0d44036
Parents: acb25a6
Author: Sahil Takiar <st...@cloudera.com>
Authored: Sat Oct 1 09:48:27 2016 -0700
Committer: Taras Bobrovytsky <tb...@cloudera.com>
Committed: Fri Oct 7 19:59:38 2016 +0000

----------------------------------------------------------------------
 tests/comparison/discrepancy_searcher.py | 51 ++++++++++++++++-----------
 1 file changed, 30 insertions(+), 21 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/50b2b888/tests/comparison/discrepancy_searcher.py
----------------------------------------------------------------------
diff --git a/tests/comparison/discrepancy_searcher.py b/tests/comparison/discrepancy_searcher.py
index 11f65c0..a1e60e2 100755
--- a/tests/comparison/discrepancy_searcher.py
+++ b/tests/comparison/discrepancy_searcher.py
@@ -47,6 +47,7 @@ from db_connection import (
 from model_translator import SqlWriter
 from query_flattener import QueryFlattener
 from query_generator import QueryGenerator
+from tests.comparison import db_connection
 
 LOG = getLogger(__name__)
 
@@ -111,27 +112,35 @@ class QueryResultComparator(object):
       # "known errors" will be ignored
       error_message = str(test_exception)
       known_error = None
-      if 'Expressions in the ORDER BY clause must not be constant' in error_message \
-          or 'Expressions in the PARTITION BY clause must not be consta' in error_message:
-        # It's too much work to avoid this bug. Just ignore it if it comes up.
-        known_error = KnownError('https://issues.cloudera.org/browse/IMPALA-1354')
-      elif 'GROUP BY expression must not contain aggregate functions' in error_message \
-          or 'select list expression not produced by aggregation output' in error_message:
-        known_error = KnownError('https://issues.cloudera.org/browse/IMPALA-1423')
-      elif ('max(' in error_message or 'min(' in error_message) \
-          and 'only supported with an UNBOUNDED PRECEDING start bound' in error_message:
-        # This analytic isn't supported and ignoring this here is much easier than not
-        # generating the query...
-        known_error = KnownError('MAX UNBOUNDED PRECISION')
-      elif 'IN and/or EXISTS subquery predicates are not supported in binary predicates' \
-          in error_message:
-        known_error = KnownError('https://issues.cloudera.org/browse/IMPALA-1418')
-      elif 'Unsupported predicate with subquery' in error_message:
-        known_error = KnownError('https://issues.cloudera.org/browse/IMPALA-1950')
-      elif 'RIGHT OUTER JOIN type with no equi-join' in error_message:
-        known_error = KnownError('https://issues.cloudera.org/browse/IMPALA-3063')
-      elif 'Operation is in ERROR_STATE' in error_message:
-        known_error = KnownError('Mem limit exceeded')
+
+      if self.test_db_type is db_connection.IMPALA:
+        if 'Expressions in the ORDER BY clause must not be constant' in error_message \
+            or 'Expressions in the PARTITION BY clause must not be consta' in error_message:
+          # It's too much work to avoid this bug. Just ignore it if it comes up.
+          known_error = KnownError('https://issues.cloudera.org/browse/IMPALA-1354')
+        elif 'GROUP BY expression must not contain aggregate functions' in error_message \
+            or 'select list expression not produced by aggregation output' in error_message:
+          known_error = KnownError('https://issues.cloudera.org/browse/IMPALA-1423')
+        elif ('max(' in error_message or 'min(' in error_message) \
+            and 'only supported with an UNBOUNDED PRECEDING start bound' in error_message:
+          # This analytic isn't supported and ignoring this here is much easier than not
+          # generating the query...
+          known_error = KnownError('MAX UNBOUNDED PRECISION')
+        elif 'IN and/or EXISTS subquery predicates are not supported in binary predicates' \
+            in error_message:
+          known_error = KnownError('https://issues.cloudera.org/browse/IMPALA-1418')
+        elif 'Unsupported predicate with subquery' in error_message:
+          known_error = KnownError('https://issues.cloudera.org/browse/IMPALA-1950')
+        elif 'RIGHT OUTER JOIN type with no equi-join' in error_message:
+          known_error = KnownError('https://issues.cloudera.org/browse/IMPALA-3063')
+        elif 'Operation is in ERROR_STATE' in error_message:
+          known_error = KnownError('Mem limit exceeded')
+      elif self.test_db_type is db_connection.HIVE:
+        if 'ParseException line' in error_message and 'missing ) at' in \
+              error_message and query.select_clause and \
+              query.select_clause.analytic_items:
+          known_error = KnownError("https://issues.apache.org/jira/browse/HIVE-14871")
+
       if known_error:
         comparison_result.exception = known_error
       else: