diff --git a/data/src/main/java/org/apache/iceberg/data/IcebergGenerics.java b/data/src/main/java/org/apache/iceberg/data/IcebergGenerics.java index 352658752d98..7bf8f5c7780b 100644 --- a/data/src/main/java/org/apache/iceberg/data/IcebergGenerics.java +++ b/data/src/main/java/org/apache/iceberg/data/IcebergGenerics.java @@ -24,6 +24,7 @@ import org.apache.iceberg.TableScan; import org.apache.iceberg.expressions.Expression; import org.apache.iceberg.io.CloseableIterable; +import org.apache.iceberg.metrics.MetricsReporter; public class IcebergGenerics { private IcebergGenerics() {} @@ -96,6 +97,11 @@ public ScanBuilder appendsAfter(long fromSnapshotId) { return this; } + public ScanBuilder metricsReporter(MetricsReporter reporter) { + this.tableScan = tableScan.metricsReporter(reporter); + return this; + } + public CloseableIterable build() { return new TableScanIterable(tableScan, reuseContainers); } diff --git a/data/src/test/java/org/apache/iceberg/data/TestLocalScan.java b/data/src/test/java/org/apache/iceberg/data/TestLocalScan.java index 0f85596afbdc..aee5eb5fa76c 100644 --- a/data/src/test/java/org/apache/iceberg/data/TestLocalScan.java +++ b/data/src/test/java/org/apache/iceberg/data/TestLocalScan.java @@ -58,7 +58,10 @@ import org.apache.iceberg.expressions.Expressions; import org.apache.iceberg.hadoop.HadoopInputFile; import org.apache.iceberg.hadoop.HadoopTables; +import org.apache.iceberg.io.CloseableIterable; import org.apache.iceberg.io.DataWriter; +import org.apache.iceberg.metrics.InMemoryMetricsReporter; +import org.apache.iceberg.metrics.ScanReport; import org.apache.iceberg.relocated.com.google.common.base.Preconditions; import org.apache.iceberg.relocated.com.google.common.collect.ImmutableList; import org.apache.iceberg.relocated.com.google.common.collect.ImmutableMap; @@ -289,6 +292,22 @@ public void testFullScan() { assertThat(records).as("Random record set should match").isEqualTo(expected); } + @TestTemplate + public void testScanMetricsReporter() throws IOException { + InMemoryMetricsReporter reporter = new InMemoryMetricsReporter(); + + try (CloseableIterable results = + IcebergGenerics.read(sharedTable).metricsReporter(reporter).build()) { + assertThat(Sets.newHashSet(results)).hasSize(9); + } + + ScanReport scanReport = reporter.scanReport(); + assertThat(scanReport).isNotNull(); + assertThat(scanReport.tableName()).isEqualTo(sharedTable.name()); + assertThat(scanReport.snapshotId()).isEqualTo(sharedTable.currentSnapshot().snapshotId()); + assertThat(scanReport.scanMetrics().resultDataFiles().value()).isEqualTo(3); + } + @TestTemplate public void testFilter() { Iterable result = IcebergGenerics.read(sharedTable).where(lessThan("id", 3)).build();