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);