[
https://issues.apache.org/jira/browse/HIVE-2693?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13552877#comment-13552877
]
Mark Grover commented on HIVE-2693:
-----------------------------------
Gunther: I took a look at patch 23 and it looks good to me! Good catch on
stripTrailingZeros(), BTW!
[~namit], [~cwsteinbach], [~ashutoshc] Thanks for reviewing the change. It
seems like you all were pretty happy with patch21 but it seemed to have a bug
in round UDF that we noticed while reviewing Namit's review comments. That bug
has now been fixed in patch 23. Would one of you please take a final look at
the patch and commit it if there are no concerns?
FWIW, here is the diff between patch21 and patch23:
It basically doesn't set the original scale on the return value of round UDF
and has a workaround for the stripTrailingZeros() bug in BigDecimal. Apart from
that it's just updates to the test results.
{code}
diff --git ql/src/java/org/apache/hadoop/hive/ql/udf/UDFRound.java
ql/src/java/org/apache/hadoop/hive/ql/udf/UDFRound.java
index af8186a..1c807ef 100644
--- ql/src/java/org/apache/hadoop/hive/ql/udf/UDFRound.java
+++ ql/src/java/org/apache/hadoop/hive/ql/udf/UDFRound.java
@@ -72,8 +72,7 @@ private BigDecimalWritable evaluate(BigDecimalWritable n, int
i) {
return null;
}
BigDecimal bd = n.getBigDecimal();
- int origScale = bd.scale();
- bd = n.getBigDecimal().setScale(i,
RoundingMode.HALF_UP).setScale(origScale);
+ bd = n.getBigDecimal().setScale(i, RoundingMode.HALF_UP);
bigDecimalWritable.set(bd);
return bigDecimalWritable;
}
diff --git ql/src/test/results/clientpositive/decimal_3.q.out
ql/src/test/results/clientpositive/decimal_3.q.out
index ad6190a..30e6d92 100644
--- ql/src/test/results/clientpositive/decimal_3.q.out
+++ ql/src/test/results/clientpositive/decimal_3.q.out
@@ -219,7 +219,7 @@ POSTHOOK: Input: default@decimal_3
-0.333
-0.33
-0.3
-0.00
+0
1E-99
0.01
0.02
@@ -258,7 +258,7 @@ POSTHOOK: Input: default@decimal_3
-0.333 0
-0.33 0
-0.3 0
-0.00 0
+0 0
1E-99 0
0.01 0
0.02 0
diff --git ql/src/test/results/clientpositive/decimal_udf.q.out
ql/src/test/results/clientpositive/decimal_udf.q.out
index be05146..e55ad9d 100644
--- ql/src/test/results/clientpositive/decimal_udf.q.out
+++ ql/src/test/results/clientpositive/decimal_udf.q.out
@@ -145,7 +145,7 @@ POSTHOOK: query: SELECT key + value FROM DECIMAL_UDF
POSTHOOK: type: QUERY
POSTHOOK: Input: default@decimal_udf
#### A masked pattern was here ####
-0E+2
+0
1E+99
1E-99
0
@@ -229,7 +229,7 @@ POSTHOOK: Input: default@decimal_udf
-2.2E+3
1E+99
1E-99
-0.0
+0
1.5E+2
15
1.5
@@ -238,7 +238,7 @@ POSTHOOK: Input: default@decimal_udf
3E+2
3E+1
3
-0.0
+0
0.2
0.02
0.3
@@ -390,44 +390,44 @@ POSTHOOK: query: SELECT key - key FROM DECIMAL_UDF
POSTHOOK: type: QUERY
POSTHOOK: Input: default@decimal_udf
#### A masked pattern was here ####
-0E+2
-0E+99
-0E-99
-0
-0E+2
-0E+1
-0
-0.0
-0.00
-0E+2
-0E+1
-0
-0
-0.0
-0.00
-0.0
-0.00
-0.000
-0.0
-0.00
-0.000
-0
-0
-0.00
-0.00
-0.00
-0.000
-0.00
-0.000
-0
-0.0
-0.00
-0.00
-0.00
-0.00
-0E-25
-0E-9
-0E-8
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
PREHOOK: query: EXPLAIN SELECT key - value FROM DECIMAL_UDF
PREHOOK: type: QUERY
POSTHOOK: query: EXPLAIN SELECT key - value FROM DECIMAL_UDF
@@ -475,13 +475,13 @@ POSTHOOK: Input: default@decimal_udf
1E+99
1E-99
0
-0E+2
-0E+1
+0
+0
0
0.1
0.01
-0E+2
-0E+1
+0
+0
0
0
0.2
@@ -555,7 +555,7 @@ POSTHOOK: Input: default@decimal_udf
-6.6E+3
1E+99
1E-99
-0.0
+0
5E+1
5
0.5
@@ -564,7 +564,7 @@ POSTHOOK: Input: default@decimal_udf
1E+2
1E+1
1
-0.0
+0
0.2
0.02
0.3
@@ -798,26 +798,26 @@ POSTHOOK: type: QUERY
POSTHOOK: Input: default@decimal_udf
#### A masked pattern was here ####
-1.936E+7
-0E+99
-0E-99
+0
+0
0
1E+4
1E+2
1
-0.0
-0.00
+0
+0
4E+4
4E+2
4
0
-0.0
-0.00
-0.0
-0.00
-0.000
-0.0
-0.00
-0.000
+0
+0
+0
+0
+0
+0
+0
+0
1
4
9.42
@@ -879,26 +879,26 @@ POSTHOOK: type: QUERY
POSTHOOK: Input: default@decimal_udf
#### A masked pattern was here ####
-9.68E+6
-0E+98
-0E-100
-0.0
+0
+0
+0
5E+3
5E+1
0.5
-0.00
-0.000
+0
+0
2E+4
2E+2
2
-0.0
-0.00
-0.000
-0.00
-0.000
-0.0000
-0.00
-0.000
-0.0000
+0
+0
+0
+0
+0
+0
+0
+0
+0
0.5
2
4.71
@@ -1359,8 +1359,8 @@ POSTHOOK: Input: default@decimal_udf
#### A masked pattern was here ####
-2.2E+3
5E+98
-0E-65
-0E-65
+0
+0
5E+1
5
0.5
@@ -1369,7 +1369,7 @@ POSTHOOK: Input: default@decimal_udf
1E+2
1E+1
1
-0E-65
+0
0.1
0.01
0.15
@@ -1707,9 +1707,9 @@ POSTHOOK: Input: default@decimal_udf
1
1
1
-0.0
-0.00
-0.000
+0
+0
+0
1
2
4
@@ -1774,22 +1774,22 @@ POSTHOOK: Input: default@decimal_udf
#### A masked pattern was here ####
-4.4E+3
1E+99
-0E-99
+0
0
1E+2
1E+1
1
-0.0
-0.00
+0
+0
2E+2
2E+1
2
0
-0.0
-0.00
-0.0
-0.00
-0.000
+0
+0
+0
+0
+0
-1
-1
-1
@@ -1807,7 +1807,7 @@ POSTHOOK: Input: default@decimal_udf
3
3
3
-0E-25
+0
-1234567891
1.23456789E+9
PREHOOK: query: -- round
@@ -1857,7 +1857,7 @@ POSTHOOK: Input: default@decimal_udf
#### A masked pattern was here ####
-4.4E+3
1E+99
-0E-99
+0
0
1E+2
1E+1
@@ -2027,22 +2027,22 @@ NULL
NULL
1
1
-0.0
-0.00
-0.000
+0
+0
+0
1
1
0
NULL
-0.0
-0.00
+0
+0
0.1
0.01
0.001
0.1
0.01
0.001
-0.0
+0
0
1
-0.12
diff --git
serde/src/java/org/apache/hadoop/hive/serde2/io/BigDecimalWritable.java
serde/src/java/org/apache/hadoop/hive/serde2/io/BigDecimalWritable.java
index 1d0a31b..db009c4 100644
--- serde/src/java/org/apache/hadoop/hive/serde2/io/BigDecimalWritable.java
+++ serde/src/java/org/apache/hadoop/hive/serde2/io/BigDecimalWritable.java
@@ -57,6 +57,10 @@ public BigDecimalWritable(BigDecimal value) {
public void set(BigDecimal value) {
value = value.stripTrailingZeros();
+ if (value.compareTo(BigDecimal.ZERO) == 0) {
+ // Special case for 0, because java doesn't strip zeros correctly on
that number.
+ value = BigDecimal.ZERO;
+ }
set(value.unscaledValue().toByteArray(), value.scale());
}
{code}
> Add DECIMAL data type
> ---------------------
>
> Key: HIVE-2693
> URL: https://issues.apache.org/jira/browse/HIVE-2693
> Project: Hive
> Issue Type: New Feature
> Components: Query Processor, Types
> Affects Versions: 0.10.0
> Reporter: Carl Steinbach
> Assignee: Prasad Mujumdar
> Attachments: 2693_7.patch, 2693_8.patch, 2693_fix_all_tests1.patch,
> HIVE-2693-10.patch, HIVE-2693-11.patch, HIVE-2693-12-SortableSerDe.patch,
> HIVE-2693-13.patch, HIVE-2693-14.patch, HIVE-2693-15.patch,
> HIVE-2693-16.patch, HIVE-2693-17.patch, HIVE-2693-18.patch,
> HIVE-2693-19.patch, HIVE-2693-1.patch.txt, HIVE-2693-20.patch,
> HIVE-2693-21.patch, HIVE-2693-22.patch, HIVE-2693-23.patch,
> HIVE-2693-all.patch, HIVE-2693.D7683.1.patch, HIVE-2693-fix.patch,
> HIVE-2693.patch, HIVE-2693-take3.patch, HIVE-2693-take4.patch
>
>
> Add support for the DECIMAL data type. HIVE-2272 (TIMESTAMP) provides a nice
> template for how to do this.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira