You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iceberg.apache.org by pv...@apache.org on 2026/06/23 16:24:45 UTC
(iceberg) branch main updated: Data: Add metrics reporter to generic scan builder (#16664)
This is an automated email from the ASF dual-hosted git repository.
pvary pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/iceberg.git
The following commit(s) were added to refs/heads/main by this push:
new df6ea08200 Data: Add metrics reporter to generic scan builder (#16664)
df6ea08200 is described below
commit df6ea0820030d217d5f645469419cdbb3f54a41f
Author: Aleksandr Efimov <ho...@gmail.com>
AuthorDate: Tue Jun 23 19:24:38 2026 +0300
Data: Add metrics reporter to generic scan builder (#16664)
---
.../java/org/apache/iceberg/data/IcebergGenerics.java | 6 ++++++
.../java/org/apache/iceberg/data/TestLocalScan.java | 19 +++++++++++++++++++
2 files changed, 25 insertions(+)
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 352658752d..7bf8f5c778 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.Table;
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 class IcebergGenerics {
return this;
}
+ public ScanBuilder metricsReporter(MetricsReporter reporter) {
+ this.tableScan = tableScan.metricsReporter(reporter);
+ return this;
+ }
+
public CloseableIterable<Record> 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 0f85596afb..aee5eb5fa7 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.Tables;
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 class TestLocalScan {
assertThat(records).as("Random record set should match").isEqualTo(expected);
}
+ @TestTemplate
+ public void testScanMetricsReporter() throws IOException {
+ InMemoryMetricsReporter reporter = new InMemoryMetricsReporter();
+
+ try (CloseableIterable<Record> 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<Record> result = IcebergGenerics.read(sharedTable).where(lessThan("id", 3)).build();