You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by he...@apache.org on 2010/07/15 23:16:27 UTC

svn commit: r964600 - in /hadoop/hive/trunk: CHANGES.txt ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFField.java ql/src/test/queries/clientpositive/udf_field.q ql/src/test/results/clientpositive/udf_field.q.out

Author: heyongqiang
Date: Thu Jul 15 21:16:09 2010
New Revision: 964600

URL: http://svn.apache.org/viewvc?rev=964600&view=rev
Log:
HIVE-1385. UDF field() doesn't work.(Siying Dong via He Yongqiang)

Modified:
    hadoop/hive/trunk/CHANGES.txt
    hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFField.java
    hadoop/hive/trunk/ql/src/test/queries/clientpositive/udf_field.q
    hadoop/hive/trunk/ql/src/test/results/clientpositive/udf_field.q.out

Modified: hadoop/hive/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/CHANGES.txt?rev=964600&r1=964599&r2=964600&view=diff
==============================================================================
--- hadoop/hive/trunk/CHANGES.txt (original)
+++ hadoop/hive/trunk/CHANGES.txt Thu Jul 15 21:16:09 2010
@@ -55,6 +55,9 @@ Trunk -  Unreleased
     metastore
     (Pradeep Kamath via jvs)
 
+    HIVE-1385. UDF field() doesn't work
+    (Siying Dong via He Yongqiang)
+
 Release 0.6.0 -  Unreleased
 
   INCOMPATIBLE CHANGES

Modified: hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFField.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFField.java?rev=964600&r1=964599&r2=964600&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFField.java (original)
+++ hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFField.java Thu Jul 15 21:16:09 2010
@@ -24,26 +24,32 @@ import org.apache.hadoop.hive.ql.exec.UD
 import org.apache.hadoop.hive.ql.exec.UDFArgumentTypeException;
 import org.apache.hadoop.hive.ql.metadata.HiveException;
 import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
+import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorUtils;
+import org.apache.hadoop.hive.serde2.objectinspector.PrimitiveObjectInspector;
 import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector.Category;
 import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory;
 import org.apache.hadoop.io.IntWritable;
 
 /**
  * GenericUDFField.
- *
+ * 
  */
 @Description(name = "field", value = "_FUNC_(str, str1, str2, ...) - "
-    + "returns the index of str in the str1,str2,... list or 0 if not found",
-    extended = "All primitive types are supported, arguments are compared using str.equals(x)."
+    + "returns the index of str in the str1,str2,... list or 0 if not found", extended = "All primitive types are supported, arguments are compared using str.equals(x)."
     + " If str is NULL, the return value is 0.")
 public class GenericUDFField extends GenericUDF {
+  private ObjectInspector[] argumentOIs;
+
   @Override
-  public ObjectInspector initialize(ObjectInspector[] arguments) throws UDFArgumentException {
+  public ObjectInspector initialize(ObjectInspector[] arguments)
+      throws UDFArgumentException {
     if (arguments.length < 2) {
       throw new UDFArgumentException(
           "The function FIELD(str, str1, str2, ...) needs at least two arguments.");
     }
 
+    argumentOIs = arguments;
+
     for (int i = 0; i < arguments.length; i++) {
       Category category = arguments[i].getCategory();
       if (category != Category.PRIMITIVE) {
@@ -68,7 +74,11 @@ public class GenericUDFField extends Gen
     }
 
     for (int i = 1; i < arguments.length; i++) {
-      if (arguments[0].get().equals(arguments[i].get())) {
+      if (arguments[i].get() == null) {
+        continue;
+      }
+      if (ObjectInspectorUtils.compare(arguments[0].get(), argumentOIs[0],
+          arguments[i].get(), argumentOIs[i]) == 0) {
         r.set(i);
         return r;
       }

Modified: hadoop/hive/trunk/ql/src/test/queries/clientpositive/udf_field.q
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/test/queries/clientpositive/udf_field.q?rev=964600&r1=964599&r2=964600&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/test/queries/clientpositive/udf_field.q (original)
+++ hadoop/hive/trunk/ql/src/test/queries/clientpositive/udf_field.q Thu Jul 15 21:16:09 2010
@@ -22,3 +22,34 @@ SELECT
   field(4, 1, 2, 3, 4),
   field(4, 1, 2, NULL, 4)
 FROM src LIMIT 1;
+
+DROP TABLE test_table;
+CREATE TABLE test_table(col1 STRING, col2 STRING) STORED AS TEXTFILE;
+LOAD DATA LOCAL INPATH '../data/files/kv1.txt' INTO TABLE test_table;
+
+select col1,col2,
+  field("66",col1),
+  field("66",col1, col2),
+  field("val_86",col1, col2),
+  field(NULL, col1, col2),
+  field(col1, 66, 88),
+  field(col1, "66", "88"),
+  field(col1, "666", "888"),
+  field(col2, "66", "88"),
+  field(col1, col2, col1),
+  field(col1, col2, "66")
+from test_table where col1="86" or col1="66";
+
+DROP TABLE test_table1;
+CREATE TABLE test_table1(col1 int, col2 string) STORED AS TEXTFILE;
+LOAD DATA LOCAL INPATH '../data/files/kv1.txt' INTO TABLE test_table1;
+
+select col1,col2,
+  field(66,col1),
+  field(66,col1, col2),
+  field(86, col2, col1),
+  field(86, col1, col1),
+  field(86,col1,n,col2),
+  field(NULL,col1,n,col2),
+  field(col1, col2)
+from (select col1, col2, NULL as n from test_table1 where col1=86 or col1=66) t;

Modified: hadoop/hive/trunk/ql/src/test/results/clientpositive/udf_field.q.out
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/test/results/clientpositive/udf_field.q.out?rev=964600&r1=964599&r2=964600&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/test/results/clientpositive/udf_field.q.out (original)
+++ hadoop/hive/trunk/ql/src/test/results/clientpositive/udf_field.q.out Thu Jul 15 21:16:09 2010
@@ -16,7 +16,7 @@ PREHOOK: query: SELECT
 FROM src LIMIT 1
 PREHOOK: type: QUERY
 PREHOOK: Input: default@src
-PREHOOK: Output: file:/Users/larry/src/hive-trunk/build/ql/tmp/487027103/10000
+PREHOOK: Output: file:/tmp/sdong/hive_2010-07-14_18-03-53_853_4058708356956086462/10000
 POSTHOOK: query: SELECT
   field("x", "a", "b", "c", "d"),
   field(NULL, "a", "b", "c", "d"),
@@ -24,7 +24,7 @@ POSTHOOK: query: SELECT
 FROM src LIMIT 1
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@src
-POSTHOOK: Output: file:/Users/larry/src/hive-trunk/build/ql/tmp/487027103/10000
+POSTHOOK: Output: file:/tmp/sdong/hive_2010-07-14_18-03-53_853_4058708356956086462/10000
 0	0	0
 PREHOOK: query: SELECT
   field("a", "a", "b", "c", "d"),
@@ -35,7 +35,7 @@ PREHOOK: query: SELECT
 FROM src LIMIT 1
 PREHOOK: type: QUERY
 PREHOOK: Input: default@src
-PREHOOK: Output: file:/Users/larry/src/hive-trunk/build/ql/tmp/1943111859/10000
+PREHOOK: Output: file:/tmp/sdong/hive_2010-07-14_18-03-57_114_3619904766510787355/10000
 POSTHOOK: query: SELECT
   field("a", "a", "b", "c", "d"),
   field("b", "a", "b", "c", "d"),
@@ -45,7 +45,7 @@ POSTHOOK: query: SELECT
 FROM src LIMIT 1
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@src
-POSTHOOK: Output: file:/Users/larry/src/hive-trunk/build/ql/tmp/1943111859/10000
+POSTHOOK: Output: file:/tmp/sdong/hive_2010-07-14_18-03-57_114_3619904766510787355/10000
 1	2	3	4	4
 PREHOOK: query: SELECT
   field(1, 1, 2, 3, 4),
@@ -56,7 +56,7 @@ PREHOOK: query: SELECT
 FROM src LIMIT 1
 PREHOOK: type: QUERY
 PREHOOK: Input: default@src
-PREHOOK: Output: file:/Users/larry/src/hive-trunk/build/ql/tmp/533348342/10000
+PREHOOK: Output: file:/tmp/sdong/hive_2010-07-14_18-04-00_022_7855241436646966982/10000
 POSTHOOK: query: SELECT
   field(1, 1, 2, 3, 4),
   field(2, 1, 2, 3, 4),
@@ -66,5 +66,91 @@ POSTHOOK: query: SELECT
 FROM src LIMIT 1
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@src
-POSTHOOK: Output: file:/Users/larry/src/hive-trunk/build/ql/tmp/533348342/10000
+POSTHOOK: Output: file:/tmp/sdong/hive_2010-07-14_18-04-00_022_7855241436646966982/10000
 1	2	3	4	4
+PREHOOK: query: DROP TABLE test_table
+PREHOOK: type: DROPTABLE
+POSTHOOK: query: DROP TABLE test_table
+POSTHOOK: type: DROPTABLE
+PREHOOK: query: CREATE TABLE test_table(col1 STRING, col2 STRING) STORED AS TEXTFILE
+PREHOOK: type: CREATETABLE
+POSTHOOK: query: CREATE TABLE test_table(col1 STRING, col2 STRING) STORED AS TEXTFILE
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: default@test_table
+PREHOOK: query: LOAD DATA LOCAL INPATH '../data/files/kv1.txt' INTO TABLE test_table
+PREHOOK: type: LOAD
+POSTHOOK: query: LOAD DATA LOCAL INPATH '../data/files/kv1.txt' INTO TABLE test_table
+POSTHOOK: type: LOAD
+POSTHOOK: Output: default@test_table
+PREHOOK: query: select col1,col2,
+  field("66",col1),
+  field("66",col1, col2),
+  field("val_86",col1, col2),
+  field(NULL, col1, col2),
+  field(col1, 66, 88),
+  field(col1, "66", "88"),
+  field(col1, "666", "888"),
+  field(col2, "66", "88"),
+  field(col1, col2, col1),
+  field(col1, col2, "66")
+from test_table where col1="86" or col1="66"
+PREHOOK: type: QUERY
+PREHOOK: Input: default@test_table
+PREHOOK: Output: file:/tmp/sdong/hive_2010-07-14_18-04-03_113_1342575242967564464/10000
+POSTHOOK: query: select col1,col2,
+  field("66",col1),
+  field("66",col1, col2),
+  field("val_86",col1, col2),
+  field(NULL, col1, col2),
+  field(col1, 66, 88),
+  field(col1, "66", "88"),
+  field(col1, "666", "888"),
+  field(col2, "66", "88"),
+  field(col1, col2, col1),
+  field(col1, col2, "66")
+from test_table where col1="86" or col1="66"
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@test_table
+POSTHOOK: Output: file:/tmp/sdong/hive_2010-07-14_18-04-03_113_1342575242967564464/10000
+86	val_86	0	0	2	0	0	0	0	0	2	0
+66	val_66	1	1	0	0	0	1	0	0	2	2
+PREHOOK: query: DROP TABLE test_table1
+PREHOOK: type: DROPTABLE
+POSTHOOK: query: DROP TABLE test_table1
+POSTHOOK: type: DROPTABLE
+PREHOOK: query: CREATE TABLE test_table1(col1 int, col2 string) STORED AS TEXTFILE
+PREHOOK: type: CREATETABLE
+POSTHOOK: query: CREATE TABLE test_table1(col1 int, col2 string) STORED AS TEXTFILE
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: default@test_table1
+PREHOOK: query: LOAD DATA LOCAL INPATH '../data/files/kv1.txt' INTO TABLE test_table1
+PREHOOK: type: LOAD
+POSTHOOK: query: LOAD DATA LOCAL INPATH '../data/files/kv1.txt' INTO TABLE test_table1
+POSTHOOK: type: LOAD
+POSTHOOK: Output: default@test_table1
+PREHOOK: query: select col1,col2,
+  field(66,col1),
+  field(66,col1, col2),
+  field(86, col2, col1),
+  field(86, col1, col1),
+  field(86,col1,n,col2),
+  field(NULL,col1,n,col2),
+  field(col1, col2)
+from (select col1, col2, NULL as n from test_table1 where col1=86 or col1=66) t
+PREHOOK: type: QUERY
+PREHOOK: Input: default@test_table1
+PREHOOK: Output: file:/tmp/sdong/hive_2010-07-14_18-04-06_325_6448537514873636635/10000
+POSTHOOK: query: select col1,col2,
+  field(66,col1),
+  field(66,col1, col2),
+  field(86, col2, col1),
+  field(86, col1, col1),
+  field(86,col1,n,col2),
+  field(NULL,col1,n,col2),
+  field(col1, col2)
+from (select col1, col2, NULL as n from test_table1 where col1=86 or col1=66) t
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@test_table1
+POSTHOOK: Output: file:/tmp/sdong/hive_2010-07-14_18-04-06_325_6448537514873636635/10000
+86	val_86	0	0	2	1	1	0	0
+66	val_66	1	1	0	0	0	0	0