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