You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by na...@apache.org on 2013/04/03 10:45:13 UTC
svn commit: r1463880 - in /hive/trunk/ql/src:
java/org/apache/hadoop/hive/ql/udf/UDFRound.java
test/queries/clientpositive/udf_round_3.q
test/results/clientpositive/udf_round.q.out
test/results/clientpositive/udf_round_3.q.out
Author: namit
Date: Wed Apr 3 08:45:13 2013
New Revision: 1463880
URL: http://svn.apache.org/r1463880
Log:
HIVE-4174 Round UDF converts BigInts to double
(Chen Chun via namit)
Added:
hive/trunk/ql/src/test/queries/clientpositive/udf_round_3.q
hive/trunk/ql/src/test/results/clientpositive/udf_round_3.q.out
Modified:
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFRound.java
hive/trunk/ql/src/test/results/clientpositive/udf_round.q.out
Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFRound.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFRound.java?rev=1463880&r1=1463879&r2=1463880&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFRound.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFRound.java Wed Apr 3 08:45:13 2013
@@ -24,8 +24,11 @@ import java.math.RoundingMode;
import org.apache.hadoop.hive.ql.exec.Description;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.hive.serde2.io.BigDecimalWritable;
+import org.apache.hadoop.hive.serde2.io.ByteWritable;
import org.apache.hadoop.hive.serde2.io.DoubleWritable;
+import org.apache.hadoop.hive.serde2.io.ShortWritable;
import org.apache.hadoop.io.IntWritable;
+import org.apache.hadoop.io.LongWritable;
/**
* UDFRound.
@@ -38,6 +41,10 @@ import org.apache.hadoop.io.IntWritable;
public class UDFRound extends UDF {
private final BigDecimalWritable bigDecimalWritable = new BigDecimalWritable();
private final DoubleWritable doubleWritable = new DoubleWritable();
+ private final LongWritable longWritable = new LongWritable();
+ private final IntWritable intWritable = new IntWritable();
+ private final ShortWritable shortWritable = new ShortWritable();
+ private final ByteWritable byteWritable = new ByteWritable();
public UDFRound() {
}
@@ -48,7 +55,7 @@ public class UDFRound extends UDF {
doubleWritable.set(d);
} else {
doubleWritable.set(BigDecimal.valueOf(d).setScale(i,
- RoundingMode.HALF_UP).doubleValue());
+ RoundingMode.HALF_UP).doubleValue());
}
return doubleWritable;
}
@@ -88,4 +95,41 @@ public class UDFRound extends UDF {
return evaluate(n, i.get());
}
+ public LongWritable evaluate(LongWritable n) {
+ if (n == null) {
+ return null;
+ }
+ longWritable.set(BigDecimal.valueOf(n.get()).setScale(0,
+ RoundingMode.HALF_UP).longValue());
+ return longWritable;
+ }
+
+ public IntWritable evaluate(IntWritable n) {
+ if (n == null) {
+ return null;
+ }
+ intWritable.set(BigDecimal.valueOf(n.get()).setScale(0,
+ RoundingMode.HALF_UP).intValue());
+ return intWritable;
+ }
+
+ public ShortWritable evaluate(ShortWritable n) {
+ if (n == null) {
+ return null;
+ }
+ shortWritable.set(BigDecimal.valueOf(n.get()).setScale(0,
+ RoundingMode.HALF_UP).shortValue());
+ return shortWritable;
+ }
+
+ public ByteWritable evaluate(ByteWritable n) {
+ if (n == null) {
+ return null;
+ }
+ byteWritable.set(BigDecimal.valueOf(n.get()).setScale(0,
+ RoundingMode.HALF_UP).byteValue());
+ return byteWritable;
+ }
+
}
+
Added: hive/trunk/ql/src/test/queries/clientpositive/udf_round_3.q
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/queries/clientpositive/udf_round_3.q?rev=1463880&view=auto
==============================================================================
--- hive/trunk/ql/src/test/queries/clientpositive/udf_round_3.q (added)
+++ hive/trunk/ql/src/test/queries/clientpositive/udf_round_3.q Wed Apr 3 08:45:13 2013
@@ -0,0 +1,14 @@
+-- test for TINYINT
+select round(-128), round(127), round(0) from src limit 1;
+
+-- test for SMALLINT
+select round(-32768), round(32767), round(-129), round(128) from src limit 1;
+
+-- test for INT
+select round(cast(negative(pow(2, 31)) as INT)), round(cast((pow(2, 31) - 1) as INT)), round(-32769), round(32768) from src limit 1;
+
+-- test for BIGINT
+select round(cast(negative(pow(2, 63)) as BIGINT)), round(cast((pow(2, 63) - 1) as BIGINT)), round(cast(negative(pow(2, 31) + 1) as BIGINT)), round(cast(pow(2, 31) as BIGINT)) from src limit 1;
+
+-- test for DOUBLE
+select round(126.1), round(126.7), round(32766.1), round(32766.7) from src limit 1;
Modified: hive/trunk/ql/src/test/results/clientpositive/udf_round.q.out
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/clientpositive/udf_round.q.out?rev=1463880&r1=1463879&r2=1463880&view=diff
==============================================================================
--- hive/trunk/ql/src/test/results/clientpositive/udf_round.q.out (original)
+++ hive/trunk/ql/src/test/results/clientpositive/udf_round.q.out Wed Apr 3 08:45:13 2013
@@ -40,7 +40,7 @@ FROM src LIMIT 1
POSTHOOK: type: QUERY
POSTHOOK: Input: default@src
#### A masked pattern was here ####
-55555.0 55555.0 55555.0 55555.0 55555.0 55560.0 55600.0 56000.0 60000.0 100000.0 0.0 0.0 0.0
+55555 55555.0 55555.0 55555.0 55555.0 55560.0 55600.0 56000.0 60000.0 100000.0 0.0 0.0 0.0
PREHOOK: query: SELECT
round(125.315), round(125.315, 0),
round(125.315, 1), round(125.315, 2), round(125.315, 3), round(125.315, 4),
Added: hive/trunk/ql/src/test/results/clientpositive/udf_round_3.q.out
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/clientpositive/udf_round_3.q.out?rev=1463880&view=auto
==============================================================================
--- hive/trunk/ql/src/test/results/clientpositive/udf_round_3.q.out (added)
+++ hive/trunk/ql/src/test/results/clientpositive/udf_round_3.q.out Wed Apr 3 08:45:13 2013
@@ -0,0 +1,55 @@
+PREHOOK: query: -- test for TINYINT
+select round(-128), round(127), round(0) from src limit 1
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+#### A masked pattern was here ####
+POSTHOOK: query: -- test for TINYINT
+select round(-128), round(127), round(0) from src limit 1
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+#### A masked pattern was here ####
+-128 127 0
+PREHOOK: query: -- test for SMALLINT
+select round(-32768), round(32767), round(-129), round(128) from src limit 1
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+#### A masked pattern was here ####
+POSTHOOK: query: -- test for SMALLINT
+select round(-32768), round(32767), round(-129), round(128) from src limit 1
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+#### A masked pattern was here ####
+-32768 32767 -129 128
+PREHOOK: query: -- test for INT
+select round(cast(negative(pow(2, 31)) as INT)), round(cast((pow(2, 31) - 1) as INT)), round(-32769), round(32768) from src limit 1
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+#### A masked pattern was here ####
+POSTHOOK: query: -- test for INT
+select round(cast(negative(pow(2, 31)) as INT)), round(cast((pow(2, 31) - 1) as INT)), round(-32769), round(32768) from src limit 1
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+#### A masked pattern was here ####
+-2147483648 2147483647 -32769 32768
+PREHOOK: query: -- test for BIGINT
+select round(cast(negative(pow(2, 63)) as BIGINT)), round(cast((pow(2, 63) - 1) as BIGINT)), round(cast(negative(pow(2, 31) + 1) as BIGINT)), round(cast(pow(2, 31) as BIGINT)) from src limit 1
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+#### A masked pattern was here ####
+POSTHOOK: query: -- test for BIGINT
+select round(cast(negative(pow(2, 63)) as BIGINT)), round(cast((pow(2, 63) - 1) as BIGINT)), round(cast(negative(pow(2, 31) + 1) as BIGINT)), round(cast(pow(2, 31) as BIGINT)) from src limit 1
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+#### A masked pattern was here ####
+-9223372036854775808 9223372036854775807 -2147483649 2147483648
+PREHOOK: query: -- test for DOUBLE
+select round(126.1), round(126.7), round(32766.1), round(32766.7) from src limit 1
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+#### A masked pattern was here ####
+POSTHOOK: query: -- test for DOUBLE
+select round(126.1), round(126.7), round(32766.1), round(32766.7) from src limit 1
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+#### A masked pattern was here ####
+126.0 127.0 32766.0 32767.0