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/09/12 17:07:59 UTC

incubator-impala git commit: IMPALA-4100, 4112: Qgen: Replace EXTRACT UDF + IS [NOT] DISTINCT FROM in HiveSqlWriter

Repository: incubator-impala
Updated Branches:
  refs/heads/master f9ac593ff -> 13fc14d8a


IMPALA-4100,4112: Qgen: Replace EXTRACT UDF + IS [NOT] DISTINCT FROM in HiveSqlWriter

IMPALA-4100:

* Postgres and Impala support EXTRACT([field] from [date-type]), but Hive doesn't
* Hive has other UDFs that perform the same function, but they have different names
* This commit modifies the HiveSqlWriter to use the corresponding Hive functions

IMPALA-4112:

* Postgres and Impala support IS [NOT] DISTINCT FROM clauses as a null safe equals
* Hive doesn't support this clause, but has a null safe equals operator: <=>
* This commit modifies the HiveSqlWriter to use <=> instead of IS [NOT] DISTINCT FROM

Testing:

* This commit only modifies the HiveSqlWriter, so no testing against Impala was done
* Tested locally against Hive

Change-Id: I3922ca61af59ecd2899c911b1a03e11ab5c26e11
Reviewed-on: http://gerrit.cloudera.org:8080/4357
Reviewed-by: Michael Brown <mi...@cloudera.com>
Reviewed-by: Tim Armstrong <ta...@cloudera.com>
Tested-by: Tim Armstrong <ta...@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/13fc14d8
Tree: http://git-wip-us.apache.org/repos/asf/incubator-impala/tree/13fc14d8
Diff: http://git-wip-us.apache.org/repos/asf/incubator-impala/diff/13fc14d8

Branch: refs/heads/master
Commit: 13fc14d8a9c2d80392b706d3c3396b4abe3e12ad
Parents: f9ac593
Author: Sahil Takiar <st...@cloudera.com>
Authored: Thu Sep 8 17:07:16 2016 -0700
Committer: Tim Armstrong <ta...@cloudera.com>
Committed: Mon Sep 12 17:07:29 2016 +0000

----------------------------------------------------------------------
 tests/comparison/model_translator.py | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/13fc14d8/tests/comparison/model_translator.py
----------------------------------------------------------------------
diff --git a/tests/comparison/model_translator.py b/tests/comparison/model_translator.py
index 9c693a3..202b5ea 100644
--- a/tests/comparison/model_translator.py
+++ b/tests/comparison/model_translator.py
@@ -456,6 +456,15 @@ class HiveSqlWriter(SqlWriter):
 
   DIALECT = 'HIVE'
 
+  def __init__(self, *args, **kwargs):
+    super(HiveSqlWriter, self).__init__(*args, **kwargs)
+
+    self.operator_funcs.update({
+      'IsNotDistinctFrom': '({0}) <=> ({1})',
+      'IsNotDistinctFromOp': '({0}) <=> ({1})',
+      'IsDistinctFrom': 'NOT(({0}) <=> ({1}))'
+    })
+
   # Hive greatest UDF is strict on type equality
   # Hive Profile already restricts to signatures with the same types,
   # but sometimes expression with UDF's like 'count'
@@ -530,6 +539,24 @@ class HiveSqlWriter(SqlWriter):
           options.append('rows unbounded preceding')
     return sql + ' '.join(options) + ')'
 
+  def _write_extract_year(self, func):
+    return 'YEAR(%s)' % self._write(func.args[0])
+
+  def _write_extract_month(self, func):
+    return 'MONTH(%s)' % self._write(func.args[0])
+
+  def _write_extract_day(self, func):
+    return 'DAY(%s)' % self._write(func.args[0])
+
+  def _write_extract_hour(self, func):
+    return 'HOUR(%s)' % self._write(func.args[0])
+
+  def _write_extract_minute(self, func):
+    return 'MINUTE(%s)' % self._write(func.args[0])
+
+  def _write_extract_second(self, func):
+    return 'SECOND(%s)' % self._write(func.args[0])
+
 
 class PostgresqlSqlWriter(SqlWriter):