You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iceberg.apache.org by bl...@apache.org on 2019/03/24 22:55:45 UTC

[incubator-iceberg] branch master updated: Return metrics from the Parquet footer after writing. (#137)

This is an automated email from the ASF dual-hosted git repository.

blue pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-iceberg.git


The following commit(s) were added to refs/heads/master by this push:
     new a5d2a55  Return metrics from the Parquet footer after writing. (#137)
a5d2a55 is described below

commit a5d2a5507c8626c7e659ee54ab1fdb0152ba705c
Author: Ryan Blue <rd...@users.noreply.github.com>
AuthorDate: Sun Mar 24 15:55:41 2019 -0700

    Return metrics from the Parquet footer after writing. (#137)
---
 .../java/org/apache/iceberg/parquet/ParquetWriteAdapter.java   | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/parquet/src/main/java/org/apache/iceberg/parquet/ParquetWriteAdapter.java b/parquet/src/main/java/org/apache/iceberg/parquet/ParquetWriteAdapter.java
index 7fc0e69..7d31e0c 100644
--- a/parquet/src/main/java/org/apache/iceberg/parquet/ParquetWriteAdapter.java
+++ b/parquet/src/main/java/org/apache/iceberg/parquet/ParquetWriteAdapter.java
@@ -25,19 +25,19 @@ import org.apache.iceberg.Metrics;
 import org.apache.iceberg.exceptions.RuntimeIOException;
 import org.apache.iceberg.io.FileAppender;
 import org.apache.parquet.hadoop.ParquetWriter;
+import org.apache.parquet.hadoop.metadata.ParquetMetadata;
 
 public class ParquetWriteAdapter<D> implements FileAppender<D> {
   private ParquetWriter<D> writer = null;
-  private long numRecords = 0L;
+  private ParquetMetadata footer = null;
 
-  public ParquetWriteAdapter(ParquetWriter<D> writer) throws IOException {
+  public ParquetWriteAdapter(ParquetWriter<D> writer) {
     this.writer = writer;
   }
 
   @Override
   public void add(D datum) {
     try {
-      numRecords += 1L;
       writer.write(datum);
     } catch (IOException e) {
       throw new RuntimeIOException(e, "Failed to write record %s", datum);
@@ -46,7 +46,8 @@ public class ParquetWriteAdapter<D> implements FileAppender<D> {
 
   @Override
   public Metrics metrics() {
-    return new Metrics(numRecords, null, null, null);
+    Preconditions.checkState(footer != null, "Cannot produce metrics until closed");
+    return ParquetMetrics.fromMetadata(footer);
   }
 
   @Override
@@ -60,6 +61,7 @@ public class ParquetWriteAdapter<D> implements FileAppender<D> {
   public void close() throws IOException {
     if (writer != null) {
       writer.close();
+      this.footer = writer.getFooter();
       this.writer = null;
     }
   }