You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by ga...@apache.org on 2014/08/22 19:09:49 UTC

svn commit: r1619865 - in /hive/trunk/ql/src: java/org/apache/hadoop/hive/ql/io/orc/OrcRecordUpdater.java test/org/apache/hadoop/hive/ql/io/orc/TestOrcRecordUpdater.java

Author: gates
Date: Fri Aug 22 17:09:49 2014
New Revision: 1619865

URL: http://svn.apache.org/r1619865
Log:
HIVE-7663 OrcRecordUpdater needs to implement getStats (Alan Gates, reviewed by Owen O'Malley)

Modified:
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/io/orc/OrcRecordUpdater.java
    hive/trunk/ql/src/test/org/apache/hadoop/hive/ql/io/orc/TestOrcRecordUpdater.java

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/io/orc/OrcRecordUpdater.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/io/orc/OrcRecordUpdater.java?rev=1619865&r1=1619864&r2=1619865&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/io/orc/OrcRecordUpdater.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/io/orc/OrcRecordUpdater.java Fri Aug 22 17:09:49 2014
@@ -88,6 +88,9 @@ public class OrcRecordUpdater implements
   private final IntWritable bucket = new IntWritable();
   private final LongWritable rowId = new LongWritable();
   private long insertedRows = 0;
+  // This records how many rows have been inserted or deleted.  It is separate from insertedRows
+  // because that is monotonically increasing to give new unique row ids.
+  private long rowCountDelta = 0;
   private final KeyIndexBuilder indexBuilder = new KeyIndexBuilder();
 
   static class AcidStats {
@@ -263,6 +266,7 @@ public class OrcRecordUpdater implements
     }
     addEvent(INSERT_OPERATION, currentTransaction, currentTransaction,
         insertedRows++, row);
+    rowCountDelta++;
   }
 
   @Override
@@ -283,6 +287,7 @@ public class OrcRecordUpdater implements
     }
     addEvent(DELETE_OPERATION, currentTransaction, originalTransaction, rowId,
         null);
+    rowCountDelta--;
   }
 
   @Override
@@ -317,7 +322,11 @@ public class OrcRecordUpdater implements
 
   @Override
   public SerDeStats getStats() {
-    return null;
+    SerDeStats stats = new SerDeStats();
+    stats.setRowCount(rowCountDelta);
+    // Don't worry about setting raw data size diff.  I have no idea how to calculate that
+    // without finding the row we are updating or deleting, which would be a mess.
+    return stats;
   }
 
   @VisibleForTesting

Modified: hive/trunk/ql/src/test/org/apache/hadoop/hive/ql/io/orc/TestOrcRecordUpdater.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/org/apache/hadoop/hive/ql/io/orc/TestOrcRecordUpdater.java?rev=1619865&r1=1619864&r2=1619865&view=diff
==============================================================================
--- hive/trunk/ql/src/test/org/apache/hadoop/hive/ql/io/orc/TestOrcRecordUpdater.java (original)
+++ hive/trunk/ql/src/test/org/apache/hadoop/hive/ql/io/orc/TestOrcRecordUpdater.java Fri Aug 22 17:09:49 2014
@@ -24,6 +24,7 @@ import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.hive.ql.io.AcidOutputFormat;
 import org.apache.hadoop.hive.ql.io.AcidUtils;
 import org.apache.hadoop.hive.ql.io.RecordUpdater;
+import org.apache.hadoop.hive.serde2.SerDeStats;
 import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
 import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorFactory;
 import org.apache.hadoop.io.IntWritable;
@@ -95,6 +96,10 @@ public class TestOrcRecordUpdater {
     updater.insert(12, new MyRow("fourth"));
     updater.insert(12, new MyRow("fifth"));
     updater.flush();
+
+    // Check the stats
+    assertEquals(5L, updater.getStats().getRowCount());
+
     Path bucketPath = AcidUtils.createFilename(root, options);
     Path sidePath = OrcRecordUpdater.getSideFile(bucketPath);
     DataInputStream side = fs.open(sidePath);
@@ -158,6 +163,8 @@ public class TestOrcRecordUpdater {
     reader = OrcFile.createReader(bucketPath,
         new OrcFile.ReaderOptions(conf).filesystem(fs));
     assertEquals(6, reader.getNumberOfRows());
+    assertEquals(6L, updater.getStats().getRowCount());
+
     assertEquals(false, fs.exists(sidePath));
   }
 
@@ -182,6 +189,7 @@ public class TestOrcRecordUpdater {
     RecordUpdater updater = new OrcRecordUpdater(root, options);
     updater.update(100, 10, 30, new MyRow("update"));
     updater.delete(100, 40, 60);
+    assertEquals(-1L, updater.getStats().getRowCount());
     updater.close(false);
     Path bucketPath = AcidUtils.createFilename(root, options);