You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by xu...@apache.org on 2014/06/01 16:28:54 UTC

svn commit: r1598989 - in /hive/trunk: common/src/test/org/apache/hadoop/hive/common/type/ data/files/ ql/src/java/org/apache/hadoop/hive/ql/io/parquet/serde/ ql/src/test/results/clientpositive/

Author: xuefu
Date: Sun Jun  1 14:28:54 2014
New Revision: 1598989

URL: http://svn.apache.org/r1598989
Log:
HIVE-7149: Parquet not able to handle negative decimal numbers (reviewed by Brock)

Modified:
    hive/trunk/common/src/test/org/apache/hadoop/hive/common/type/TestHiveDecimal.java
    hive/trunk/data/files/dec.txt
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/serde/ParquetHiveSerDe.java
    hive/trunk/ql/src/test/results/clientpositive/avro_decimal.q.out
    hive/trunk/ql/src/test/results/clientpositive/parquet_decimal.q.out

Modified: hive/trunk/common/src/test/org/apache/hadoop/hive/common/type/TestHiveDecimal.java
URL: http://svn.apache.org/viewvc/hive/trunk/common/src/test/org/apache/hadoop/hive/common/type/TestHiveDecimal.java?rev=1598989&r1=1598988&r2=1598989&view=diff
==============================================================================
--- hive/trunk/common/src/test/org/apache/hadoop/hive/common/type/TestHiveDecimal.java (original)
+++ hive/trunk/common/src/test/org/apache/hadoop/hive/common/type/TestHiveDecimal.java Sun Jun  1 14:28:54 2014
@@ -121,13 +121,23 @@ public class TestHiveDecimal {
 
   @Test
   public void testBinaryConversion() {
-    HiveDecimal dec = HiveDecimal.create("234.79");
+    testBinaryConversion("0.0");
+    testBinaryConversion("-12.25");
+    testBinaryConversion("234.79");
+  }
+
+  private void testBinaryConversion(String num) {
+    HiveDecimal dec = HiveDecimal.create(num);
     int scale = 2;
     byte[] d = dec.setScale(2).unscaledValue().toByteArray();
     Assert.assertEquals(dec, HiveDecimal.create(new BigInteger(d), scale));
     int prec = 5;
-    int len =  (int) (Math.ceil((Math.log(Math.pow(10, prec)) - 1)/Math.log(2) + 1) / 8);
+    int len =  (int)
+        Math.ceil((Math.log(Math.pow(10, prec) - 1) / Math.log(2) + 1) / 8);
     byte[] res = new byte[len];
+    if ( dec.signum() == -1)
+      for (int i = 0; i < len; i++)
+        res[i] |= 0xFF;
     System.arraycopy(d, 0, res, len-d.length, d.length); // Padding leading zeros.
     Assert.assertEquals(dec, HiveDecimal.create(new BigInteger(res), scale));
   }

Modified: hive/trunk/data/files/dec.txt
URL: http://svn.apache.org/viewvc/hive/trunk/data/files/dec.txt?rev=1598989&r1=1598988&r2=1598989&view=diff
==============================================================================
--- hive/trunk/data/files/dec.txt (original)
+++ hive/trunk/data/files/dec.txt Sun Jun  1 14:28:54 2014
@@ -3,8 +3,8 @@ Beck77.341
 Snow55.71
 Mary4.329
 Cluck5.96
-Tom12.25
+Tom-12.25
 Mary33.33
 Tom19.00
-Beck3.145
+Beck0.0
 Beck79.9

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/serde/ParquetHiveSerDe.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/serde/ParquetHiveSerDe.java?rev=1598989&r1=1598988&r2=1598989&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/serde/ParquetHiveSerDe.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/serde/ParquetHiveSerDe.java Sun Jun  1 14:28:54 2014
@@ -264,7 +264,13 @@ public class ParquetHiveSerDe extends Ab
         return new BinaryWritable(Binary.fromByteArray(src));
       }
       byte[] tgt = new byte[bytes];
-      System.arraycopy(src, 0, tgt, bytes - src.length, src.length); // Padding leading zeroes.
+      if ( hd.signum() == -1) {
+        // For negative number, initializing bits to 1
+        for (int i = 0; i < bytes; i++) {
+          tgt[i] |= 0xFF;
+        }
+      }
+      System.arraycopy(src, 0, tgt, bytes - src.length, src.length); // Padding leading zeroes/ones.
       return new BinaryWritable(Binary.fromByteArray(tgt));
     default:
       throw new SerDeException("Unknown primitive : " + inspector.getPrimitiveCategory());

Modified: hive/trunk/ql/src/test/results/clientpositive/avro_decimal.q.out
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/clientpositive/avro_decimal.q.out?rev=1598989&r1=1598988&r2=1598989&view=diff
==============================================================================
--- hive/trunk/ql/src/test/results/clientpositive/avro_decimal.q.out (original)
+++ hive/trunk/ql/src/test/results/clientpositive/avro_decimal.q.out Sun Jun  1 14:28:54 2014
@@ -85,10 +85,10 @@ Beck	77.34
 Snow	55.71
 Mary	4.33
 Cluck	5.96
-Tom	12.25
+Tom	-12.25
 Mary	33.33
 Tom	19
-Beck	3.15
+Beck	0
 Beck	79.9
 PREHOOK: query: DROP TABLE IF EXISTS avro_dec1
 PREHOOK: type: DROPTABLE

Modified: hive/trunk/ql/src/test/results/clientpositive/parquet_decimal.q.out
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/clientpositive/parquet_decimal.q.out?rev=1598989&r1=1598988&r2=1598989&view=diff
==============================================================================
--- hive/trunk/ql/src/test/results/clientpositive/parquet_decimal.q.out (original)
+++ hive/trunk/ql/src/test/results/clientpositive/parquet_decimal.q.out Sun Jun  1 14:28:54 2014
@@ -59,10 +59,10 @@ Beck	77.34
 Snow	55.71
 Mary	4.33
 Cluck	5.96
-Tom	12.25
+Tom	-12.25
 Mary	33.33
 Tom	19
-Beck	3.15
+Beck	0
 Beck	79.9
 PREHOOK: query: TRUNCATE TABLE parq_dec
 PREHOOK: type: TRUNCATETABLE