You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by jd...@apache.org on 2014/09/27 02:24:54 UTC

svn commit: r1627913 - in /hive/branches/branch-0.14/ql/src: java/org/apache/hadoop/hive/ql/udf/UDFLog.java test/org/apache/hadoop/hive/ql/udf/TestUDFMath.java test/queries/clientpositive/decimal_udf2.q test/results/clientpositive/decimal_udf2.q.out

Author: jdere
Date: Sat Sep 27 00:24:53 2014
New Revision: 1627913

URL: http://svn.apache.org/r1627913
Log:
HIVE-8114: Type resolution for udf arguments of Decimal Type results in error (Jason Dere, reviewed by Ashutosh Chauhan)

Added:
    hive/branches/branch-0.14/ql/src/test/queries/clientpositive/decimal_udf2.q
    hive/branches/branch-0.14/ql/src/test/results/clientpositive/decimal_udf2.q.out
Modified:
    hive/branches/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFLog.java
    hive/branches/branch-0.14/ql/src/test/org/apache/hadoop/hive/ql/udf/TestUDFMath.java

Modified: hive/branches/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFLog.java
URL: http://svn.apache.org/viewvc/hive/branches/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFLog.java?rev=1627913&r1=1627912&r2=1627913&view=diff
==============================================================================
--- hive/branches/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFLog.java (original)
+++ hive/branches/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFLog.java Sat Sep 27 00:24:53 2014
@@ -52,29 +52,6 @@ public class UDFLog extends UDFMath {
   }
 
   /**
-   * Get the logarithm of the given decimal with the given base.
-   */
-  public DoubleWritable evaluate(DoubleWritable base, HiveDecimalWritable writable) {
-    if (base == null || writable == null) {
-      return null;
-    }
-    double d = writable.getHiveDecimal().bigDecimalValue().doubleValue();
-    return log(base.get(), d);
-  }
-
-  /**
-   * Get the logarithm of input with the given decimal as the base.
-   */
-  public DoubleWritable evaluate(HiveDecimalWritable base, DoubleWritable d) {
-    if (base == null || d == null) {
-      return null;
-    }
-
-    double b = base.getHiveDecimal().bigDecimalValue().doubleValue();
-    return log(b, d.get());
-  }
-
-  /**
    * Get the logarithm of the given decimal input with the given decimal base.
    */
   public DoubleWritable evaluate(HiveDecimalWritable baseWritable, HiveDecimalWritable writable) {

Modified: hive/branches/branch-0.14/ql/src/test/org/apache/hadoop/hive/ql/udf/TestUDFMath.java
URL: http://svn.apache.org/viewvc/hive/branches/branch-0.14/ql/src/test/org/apache/hadoop/hive/ql/udf/TestUDFMath.java?rev=1627913&r1=1627912&r2=1627913&view=diff
==============================================================================
--- hive/branches/branch-0.14/ql/src/test/org/apache/hadoop/hive/ql/udf/TestUDFMath.java (original)
+++ hive/branches/branch-0.14/ql/src/test/org/apache/hadoop/hive/ql/udf/TestUDFMath.java Sat Sep 27 00:24:53 2014
@@ -98,14 +98,6 @@ public class TestUDFMath {
     input = createDecimal("7.38905609893065");
     DoubleWritable res = udf.evaluate(input);
     Assert.assertEquals(2.0, res.get(), 0.000001);
-    
-    DoubleWritable input = new DoubleWritable(9.0);
-    res = udf.evaluate(createDecimal("3.0"), input);
-    Assert.assertEquals(2.0, res.get(), 0.000001);
-
-    DoubleWritable base = new DoubleWritable(3.0);
-    res = udf.evaluate(base, createDecimal("9.0"));
-    Assert.assertEquals(2.0, res.get(), 0.000001);
 
     res = udf.evaluate(createDecimal("3.0"), createDecimal("9.0"));
     Assert.assertEquals(2.0, res.get(), 0.000001);

Added: hive/branches/branch-0.14/ql/src/test/queries/clientpositive/decimal_udf2.q
URL: http://svn.apache.org/viewvc/hive/branches/branch-0.14/ql/src/test/queries/clientpositive/decimal_udf2.q?rev=1627913&view=auto
==============================================================================
--- hive/branches/branch-0.14/ql/src/test/queries/clientpositive/decimal_udf2.q (added)
+++ hive/branches/branch-0.14/ql/src/test/queries/clientpositive/decimal_udf2.q Sat Sep 27 00:24:53 2014
@@ -0,0 +1,30 @@
+DROP TABLE IF EXISTS DECIMAL_UDF2;
+
+CREATE TABLE DECIMAL_UDF2 (key decimal(20,10), value int)
+ROW FORMAT DELIMITED
+   FIELDS TERMINATED BY ' '
+STORED AS TEXTFILE;
+
+LOAD DATA LOCAL INPATH '../../data/files/kv7.txt' INTO TABLE DECIMAL_UDF2;
+
+EXPLAIN
+SELECT acos(key), asin(key), atan(key), cos(key), sin(key), tan(key), radians(key)
+FROM DECIMAL_UDF2 WHERE key = 10;
+
+SELECT acos(key), asin(key), atan(key), cos(key), sin(key), tan(key), radians(key)
+FROM DECIMAL_UDF2 WHERE key = 10;
+
+EXPLAIN
+SELECT
+  exp(key), ln(key),
+  log(key), log(key, key), log(key, value), log(value, key),
+  log10(key), sqrt(key)
+FROM DECIMAL_UDF2 WHERE key = 10;
+
+SELECT
+  exp(key), ln(key),
+  log(key), log(key, key), log(key, value), log(value, key),
+  log10(key), sqrt(key)
+FROM DECIMAL_UDF2 WHERE key = 10;
+
+DROP TABLE IF EXISTS DECIMAL_UDF2;

Added: hive/branches/branch-0.14/ql/src/test/results/clientpositive/decimal_udf2.q.out
URL: http://svn.apache.org/viewvc/hive/branches/branch-0.14/ql/src/test/results/clientpositive/decimal_udf2.q.out?rev=1627913&view=auto
==============================================================================
--- hive/branches/branch-0.14/ql/src/test/results/clientpositive/decimal_udf2.q.out (added)
+++ hive/branches/branch-0.14/ql/src/test/results/clientpositive/decimal_udf2.q.out Sat Sep 27 00:24:53 2014
@@ -0,0 +1,148 @@
+PREHOOK: query: DROP TABLE IF EXISTS DECIMAL_UDF2
+PREHOOK: type: DROPTABLE
+POSTHOOK: query: DROP TABLE IF EXISTS DECIMAL_UDF2
+POSTHOOK: type: DROPTABLE
+PREHOOK: query: CREATE TABLE DECIMAL_UDF2 (key decimal(20,10), value int)
+ROW FORMAT DELIMITED
+   FIELDS TERMINATED BY ' '
+STORED AS TEXTFILE
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@DECIMAL_UDF2
+POSTHOOK: query: CREATE TABLE DECIMAL_UDF2 (key decimal(20,10), value int)
+ROW FORMAT DELIMITED
+   FIELDS TERMINATED BY ' '
+STORED AS TEXTFILE
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@DECIMAL_UDF2
+PREHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/kv7.txt' INTO TABLE DECIMAL_UDF2
+PREHOOK: type: LOAD
+#### A masked pattern was here ####
+PREHOOK: Output: default@decimal_udf2
+POSTHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/kv7.txt' INTO TABLE DECIMAL_UDF2
+POSTHOOK: type: LOAD
+#### A masked pattern was here ####
+POSTHOOK: Output: default@decimal_udf2
+PREHOOK: query: EXPLAIN
+SELECT acos(key), asin(key), atan(key), cos(key), sin(key), tan(key), radians(key)
+FROM DECIMAL_UDF2 WHERE key = 10
+PREHOOK: type: QUERY
+POSTHOOK: query: EXPLAIN
+SELECT acos(key), asin(key), atan(key), cos(key), sin(key), tan(key), radians(key)
+FROM DECIMAL_UDF2 WHERE key = 10
+POSTHOOK: type: QUERY
+STAGE DEPENDENCIES:
+  Stage-1 is a root stage
+  Stage-0 depends on stages: Stage-1
+
+STAGE PLANS:
+  Stage: Stage-1
+    Map Reduce
+      Map Operator Tree:
+          TableScan
+            alias: decimal_udf2
+            Statistics: Num rows: 3 Data size: 359 Basic stats: COMPLETE Column stats: NONE
+            Filter Operator
+              predicate: (key = 10) (type: boolean)
+              Statistics: Num rows: 1 Data size: 119 Basic stats: COMPLETE Column stats: NONE
+              Select Operator
+                expressions: acos(key) (type: double), asin(key) (type: double), atan(key) (type: double), cos(key) (type: double), sin(key) (type: double), tan(key) (type: double), radians(key) (type: double)
+                outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5, _col6
+                Statistics: Num rows: 1 Data size: 119 Basic stats: COMPLETE Column stats: NONE
+                File Output Operator
+                  compressed: false
+                  Statistics: Num rows: 1 Data size: 119 Basic stats: COMPLETE Column stats: NONE
+                  table:
+                      input format: org.apache.hadoop.mapred.TextInputFormat
+                      output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
+                      serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+
+  Stage: Stage-0
+    Fetch Operator
+      limit: -1
+      Processor Tree:
+        ListSink
+
+PREHOOK: query: SELECT acos(key), asin(key), atan(key), cos(key), sin(key), tan(key), radians(key)
+FROM DECIMAL_UDF2 WHERE key = 10
+PREHOOK: type: QUERY
+PREHOOK: Input: default@decimal_udf2
+#### A masked pattern was here ####
+POSTHOOK: query: SELECT acos(key), asin(key), atan(key), cos(key), sin(key), tan(key), radians(key)
+FROM DECIMAL_UDF2 WHERE key = 10
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@decimal_udf2
+#### A masked pattern was here ####
+NaN	NaN	1.4711276743037347	-0.8390715290764524	-0.5440211108893698	0.6483608274590866	0.17453292519943295
+PREHOOK: query: EXPLAIN
+SELECT
+  exp(key), ln(key),
+  log(key), log(key, key), log(key, value), log(value, key),
+  log10(key), sqrt(key)
+FROM DECIMAL_UDF2 WHERE key = 10
+PREHOOK: type: QUERY
+POSTHOOK: query: EXPLAIN
+SELECT
+  exp(key), ln(key),
+  log(key), log(key, key), log(key, value), log(value, key),
+  log10(key), sqrt(key)
+FROM DECIMAL_UDF2 WHERE key = 10
+POSTHOOK: type: QUERY
+STAGE DEPENDENCIES:
+  Stage-1 is a root stage
+  Stage-0 depends on stages: Stage-1
+
+STAGE PLANS:
+  Stage: Stage-1
+    Map Reduce
+      Map Operator Tree:
+          TableScan
+            alias: decimal_udf2
+            Statistics: Num rows: 3 Data size: 359 Basic stats: COMPLETE Column stats: NONE
+            Filter Operator
+              predicate: (key = 10) (type: boolean)
+              Statistics: Num rows: 1 Data size: 119 Basic stats: COMPLETE Column stats: NONE
+              Select Operator
+                expressions: exp(key) (type: double), ln(key) (type: double), log(key) (type: double), log(key, key) (type: double), log(key, value) (type: double), log(value, key) (type: double), log10(key) (type: double), sqrt(key) (type: double)
+                outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5, _col6, _col7
+                Statistics: Num rows: 1 Data size: 119 Basic stats: COMPLETE Column stats: NONE
+                File Output Operator
+                  compressed: false
+                  Statistics: Num rows: 1 Data size: 119 Basic stats: COMPLETE Column stats: NONE
+                  table:
+                      input format: org.apache.hadoop.mapred.TextInputFormat
+                      output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
+                      serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+
+  Stage: Stage-0
+    Fetch Operator
+      limit: -1
+      Processor Tree:
+        ListSink
+
+PREHOOK: query: SELECT
+  exp(key), ln(key),
+  log(key), log(key, key), log(key, value), log(value, key),
+  log10(key), sqrt(key)
+FROM DECIMAL_UDF2 WHERE key = 10
+PREHOOK: type: QUERY
+PREHOOK: Input: default@decimal_udf2
+#### A masked pattern was here ####
+POSTHOOK: query: SELECT
+  exp(key), ln(key),
+  log(key), log(key, key), log(key, value), log(value, key),
+  log10(key), sqrt(key)
+FROM DECIMAL_UDF2 WHERE key = 10
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@decimal_udf2
+#### A masked pattern was here ####
+22026.465794806718	2.302585092994046	2.302585092994046	1.0	1.0	1.0	1.0	3.1622776601683795
+PREHOOK: query: DROP TABLE IF EXISTS DECIMAL_UDF2
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@decimal_udf2
+PREHOOK: Output: default@decimal_udf2
+POSTHOOK: query: DROP TABLE IF EXISTS DECIMAL_UDF2
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@decimal_udf2
+POSTHOOK: Output: default@decimal_udf2