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

aokolnychyi 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 f00d3094a1 Spark 3.4: Display more read metrics on Spark SQL UI (#9009)
f00d3094a1 is described below

commit f00d3094a1728b60dba96fc251707dd08d8a6310
Author: Karuppayya <[email protected]>
AuthorDate: Wed Nov 8 16:31:28 2023 -0800

    Spark 3.4: Display more read metrics on Spark SQL UI (#9009)
    
    This change cherry-picks PR #8717 to Spark 3.4.
---
 .../org/apache/iceberg/spark/source/SparkScan.java |  83 +++++++++++++---
 ...TotalFileSize.java => EqualityDeleteFiles.java} |   6 +-
 ...{TotalFileSize.java => IndexedDeleteFiles.java} |   6 +-
 ...talFileSize.java => PositionalDeleteFiles.java} |   6 +-
 ...{ScannedDataFiles.java => ResultDataFiles.java} |   6 +-
 .../{TotalFileSize.java => ResultDeleteFiles.java} |   6 +-
 ...alFileSize.java => ScannedDeleteManifests.java} |   6 +-
 ...{TotalFileSize.java => SkippedDeleteFiles.java} |   6 +-
 ...alFileSize.java => SkippedDeleteManifests.java} |   6 +-
 ...DataFiles.java => TaskEqualityDeleteFiles.java} |  12 +--
 ...dDataFiles.java => TaskIndexedDeleteFiles.java} |  12 +--
 ...taFiles.java => TaskPositionalDeleteFiles.java} |  12 +--
 ...nnedDataFiles.java => TaskResultDataFiles.java} |  10 +-
 ...talFileSize.java => TaskResultDeleteFiles.java} |  13 ++-
 ...aFiles.java => TaskScannedDeleteManifests.java} |  12 +--
 ...dDataFiles.java => TaskSkippedDeleteFiles.java} |  12 +--
 ...aFiles.java => TaskSkippedDeleteManifests.java} |  12 +--
 ...talFileSize.java => TaskTotalDataFileSize.java} |  10 +-
 ...dDataFiles.java => TaskTotalDataManifests.java} |  12 +--
 ...DataFiles.java => TaskTotalDeleteFileSize.java} |  13 +--
 ...ataFiles.java => TaskTotalDeleteManifests.java} |  12 +--
 .../{TotalFileSize.java => TotalDataFileSize.java} |   6 +-
 ...{TotalFileSize.java => TotalDataManifests.java} |   6 +-
 ...TotalFileSize.java => TotalDeleteFileSize.java} |   6 +-
 ...otalFileSize.java => TotalDeleteManifests.java} |   6 +-
 .../iceberg/spark/source/TestSparkReadMetrics.java | 106 +++++++++++++++++++--
 26 files changed, 277 insertions(+), 126 deletions(-)

diff --git 
a/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/SparkScan.java 
b/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/SparkScan.java
index 6c3b2db143..6efe8a080b 100644
--- 
a/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/SparkScan.java
+++ 
b/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/SparkScan.java
@@ -35,19 +35,39 @@ import 
org.apache.iceberg.relocated.com.google.common.collect.Lists;
 import org.apache.iceberg.spark.Spark3Util;
 import org.apache.iceberg.spark.SparkReadConf;
 import org.apache.iceberg.spark.SparkSchemaUtil;
+import org.apache.iceberg.spark.source.metrics.EqualityDeleteFiles;
+import org.apache.iceberg.spark.source.metrics.IndexedDeleteFiles;
 import org.apache.iceberg.spark.source.metrics.NumDeletes;
 import org.apache.iceberg.spark.source.metrics.NumSplits;
-import org.apache.iceberg.spark.source.metrics.ScannedDataFiles;
+import org.apache.iceberg.spark.source.metrics.PositionalDeleteFiles;
+import org.apache.iceberg.spark.source.metrics.ResultDataFiles;
+import org.apache.iceberg.spark.source.metrics.ResultDeleteFiles;
 import org.apache.iceberg.spark.source.metrics.ScannedDataManifests;
+import org.apache.iceberg.spark.source.metrics.ScannedDeleteManifests;
 import org.apache.iceberg.spark.source.metrics.SkippedDataFiles;
 import org.apache.iceberg.spark.source.metrics.SkippedDataManifests;
-import org.apache.iceberg.spark.source.metrics.TaskScannedDataFiles;
+import org.apache.iceberg.spark.source.metrics.SkippedDeleteFiles;
+import org.apache.iceberg.spark.source.metrics.SkippedDeleteManifests;
+import org.apache.iceberg.spark.source.metrics.TaskEqualityDeleteFiles;
+import org.apache.iceberg.spark.source.metrics.TaskIndexedDeleteFiles;
+import org.apache.iceberg.spark.source.metrics.TaskPositionalDeleteFiles;
+import org.apache.iceberg.spark.source.metrics.TaskResultDataFiles;
+import org.apache.iceberg.spark.source.metrics.TaskResultDeleteFiles;
 import org.apache.iceberg.spark.source.metrics.TaskScannedDataManifests;
+import org.apache.iceberg.spark.source.metrics.TaskScannedDeleteManifests;
 import org.apache.iceberg.spark.source.metrics.TaskSkippedDataFiles;
 import org.apache.iceberg.spark.source.metrics.TaskSkippedDataManifests;
-import org.apache.iceberg.spark.source.metrics.TaskTotalFileSize;
+import org.apache.iceberg.spark.source.metrics.TaskSkippedDeleteFiles;
+import org.apache.iceberg.spark.source.metrics.TaskSkippedDeleteManifests;
+import org.apache.iceberg.spark.source.metrics.TaskTotalDataFileSize;
+import org.apache.iceberg.spark.source.metrics.TaskTotalDataManifests;
+import org.apache.iceberg.spark.source.metrics.TaskTotalDeleteFileSize;
+import org.apache.iceberg.spark.source.metrics.TaskTotalDeleteManifests;
 import org.apache.iceberg.spark.source.metrics.TaskTotalPlanningDuration;
-import org.apache.iceberg.spark.source.metrics.TotalFileSize;
+import org.apache.iceberg.spark.source.metrics.TotalDataFileSize;
+import org.apache.iceberg.spark.source.metrics.TotalDataManifests;
+import org.apache.iceberg.spark.source.metrics.TotalDeleteFileSize;
+import org.apache.iceberg.spark.source.metrics.TotalDeleteManifests;
 import org.apache.iceberg.spark.source.metrics.TotalPlanningDuration;
 import org.apache.iceberg.types.Types;
 import org.apache.iceberg.util.PropertyUtil;
@@ -200,12 +220,32 @@ abstract class SparkScan implements Scan, 
SupportsReportStatistics {
     }
 
     List<CustomTaskMetric> driverMetrics = Lists.newArrayList();
-    driverMetrics.add(TaskTotalFileSize.from(scanReport));
+
+    // common
     driverMetrics.add(TaskTotalPlanningDuration.from(scanReport));
-    driverMetrics.add(TaskSkippedDataFiles.from(scanReport));
-    driverMetrics.add(TaskScannedDataFiles.from(scanReport));
-    driverMetrics.add(TaskSkippedDataManifests.from(scanReport));
+
+    // data manifests
+    driverMetrics.add(TaskTotalDataManifests.from(scanReport));
     driverMetrics.add(TaskScannedDataManifests.from(scanReport));
+    driverMetrics.add(TaskSkippedDataManifests.from(scanReport));
+
+    // data files
+    driverMetrics.add(TaskResultDataFiles.from(scanReport));
+    driverMetrics.add(TaskSkippedDataFiles.from(scanReport));
+    driverMetrics.add(TaskTotalDataFileSize.from(scanReport));
+
+    // delete manifests
+    driverMetrics.add(TaskTotalDeleteManifests.from(scanReport));
+    driverMetrics.add(TaskScannedDeleteManifests.from(scanReport));
+    driverMetrics.add(TaskSkippedDeleteManifests.from(scanReport));
+
+    // delete files
+    driverMetrics.add(TaskTotalDeleteFileSize.from(scanReport));
+    driverMetrics.add(TaskResultDeleteFiles.from(scanReport));
+    driverMetrics.add(TaskEqualityDeleteFiles.from(scanReport));
+    driverMetrics.add(TaskIndexedDeleteFiles.from(scanReport));
+    driverMetrics.add(TaskPositionalDeleteFiles.from(scanReport));
+    driverMetrics.add(TaskSkippedDeleteFiles.from(scanReport));
 
     return driverMetrics.toArray(new CustomTaskMetric[0]);
   }
@@ -213,14 +253,35 @@ abstract class SparkScan implements Scan, 
SupportsReportStatistics {
   @Override
   public CustomMetric[] supportedCustomMetrics() {
     return new CustomMetric[] {
+      // task metrics
       new NumSplits(),
       new NumDeletes(),
-      new TotalFileSize(),
+
+      // common
       new TotalPlanningDuration(),
+
+      // data manifests
+      new TotalDataManifests(),
       new ScannedDataManifests(),
       new SkippedDataManifests(),
-      new ScannedDataFiles(),
-      new SkippedDataFiles()
+
+      // data files
+      new ResultDataFiles(),
+      new SkippedDataFiles(),
+      new TotalDataFileSize(),
+
+      // delete manifests
+      new TotalDeleteManifests(),
+      new ScannedDeleteManifests(),
+      new SkippedDeleteManifests(),
+
+      // delete files
+      new TotalDeleteFileSize(),
+      new ResultDeleteFiles(),
+      new EqualityDeleteFiles(),
+      new IndexedDeleteFiles(),
+      new PositionalDeleteFiles(),
+      new SkippedDeleteFiles()
     };
   }
 
diff --git 
a/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TotalFileSize.java
 
b/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/EqualityDeleteFiles.java
similarity index 86%
copy from 
spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TotalFileSize.java
copy to 
spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/EqualityDeleteFiles.java
index 994626e54f..754145f7d2 100644
--- 
a/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TotalFileSize.java
+++ 
b/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/EqualityDeleteFiles.java
@@ -20,9 +20,9 @@ package org.apache.iceberg.spark.source.metrics;
 
 import org.apache.spark.sql.connector.metric.CustomSumMetric;
 
-public class TotalFileSize extends CustomSumMetric {
+public class EqualityDeleteFiles extends CustomSumMetric {
 
-  static final String NAME = "totalFileSize";
+  static final String NAME = "equalityDeleteFiles";
 
   @Override
   public String name() {
@@ -31,6 +31,6 @@ public class TotalFileSize extends CustomSumMetric {
 
   @Override
   public String description() {
-    return "total file size (bytes)";
+    return "number of equality delete files";
   }
 }
diff --git 
a/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TotalFileSize.java
 
b/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/IndexedDeleteFiles.java
similarity index 87%
copy from 
spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TotalFileSize.java
copy to 
spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/IndexedDeleteFiles.java
index 994626e54f..7fc5b9066c 100644
--- 
a/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TotalFileSize.java
+++ 
b/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/IndexedDeleteFiles.java
@@ -20,9 +20,9 @@ package org.apache.iceberg.spark.source.metrics;
 
 import org.apache.spark.sql.connector.metric.CustomSumMetric;
 
-public class TotalFileSize extends CustomSumMetric {
+public class IndexedDeleteFiles extends CustomSumMetric {
 
-  static final String NAME = "totalFileSize";
+  static final String NAME = "indexedDeleteFiles";
 
   @Override
   public String name() {
@@ -31,6 +31,6 @@ public class TotalFileSize extends CustomSumMetric {
 
   @Override
   public String description() {
-    return "total file size (bytes)";
+    return "number of indexed delete files";
   }
 }
diff --git 
a/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TotalFileSize.java
 
b/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/PositionalDeleteFiles.java
similarity index 86%
copy from 
spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TotalFileSize.java
copy to 
spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/PositionalDeleteFiles.java
index 994626e54f..5de75776ea 100644
--- 
a/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TotalFileSize.java
+++ 
b/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/PositionalDeleteFiles.java
@@ -20,9 +20,9 @@ package org.apache.iceberg.spark.source.metrics;
 
 import org.apache.spark.sql.connector.metric.CustomSumMetric;
 
-public class TotalFileSize extends CustomSumMetric {
+public class PositionalDeleteFiles extends CustomSumMetric {
 
-  static final String NAME = "totalFileSize";
+  static final String NAME = "positionalDeleteFiles";
 
   @Override
   public String name() {
@@ -31,6 +31,6 @@ public class TotalFileSize extends CustomSumMetric {
 
   @Override
   public String description() {
-    return "total file size (bytes)";
+    return "number of positional delete files";
   }
 }
diff --git 
a/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/ScannedDataFiles.java
 
b/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/ResultDataFiles.java
similarity index 87%
rename from 
spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/ScannedDataFiles.java
rename to 
spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/ResultDataFiles.java
index f453872fdc..21959cbf6c 100644
--- 
a/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/ScannedDataFiles.java
+++ 
b/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/ResultDataFiles.java
@@ -20,9 +20,9 @@ package org.apache.iceberg.spark.source.metrics;
 
 import org.apache.spark.sql.connector.metric.CustomSumMetric;
 
-public class ScannedDataFiles extends CustomSumMetric {
+public class ResultDataFiles extends CustomSumMetric {
 
-  static final String NAME = "scannedDataFiles";
+  static final String NAME = "resultDataFiles";
 
   @Override
   public String name() {
@@ -31,6 +31,6 @@ public class ScannedDataFiles extends CustomSumMetric {
 
   @Override
   public String description() {
-    return "number of scanned data files";
+    return "number of result data files";
   }
 }
diff --git 
a/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TotalFileSize.java
 
b/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/ResultDeleteFiles.java
similarity index 87%
copy from 
spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TotalFileSize.java
copy to 
spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/ResultDeleteFiles.java
index 994626e54f..9c6ad2ca32 100644
--- 
a/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TotalFileSize.java
+++ 
b/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/ResultDeleteFiles.java
@@ -20,9 +20,9 @@ package org.apache.iceberg.spark.source.metrics;
 
 import org.apache.spark.sql.connector.metric.CustomSumMetric;
 
-public class TotalFileSize extends CustomSumMetric {
+public class ResultDeleteFiles extends CustomSumMetric {
 
-  static final String NAME = "totalFileSize";
+  static final String NAME = "resultDeleteFiles";
 
   @Override
   public String name() {
@@ -31,6 +31,6 @@ public class TotalFileSize extends CustomSumMetric {
 
   @Override
   public String description() {
-    return "total file size (bytes)";
+    return "number of result delete files";
   }
 }
diff --git 
a/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TotalFileSize.java
 
b/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/ScannedDeleteManifests.java
similarity index 86%
copy from 
spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TotalFileSize.java
copy to 
spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/ScannedDeleteManifests.java
index 994626e54f..1fa006b7b1 100644
--- 
a/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TotalFileSize.java
+++ 
b/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/ScannedDeleteManifests.java
@@ -20,9 +20,9 @@ package org.apache.iceberg.spark.source.metrics;
 
 import org.apache.spark.sql.connector.metric.CustomSumMetric;
 
-public class TotalFileSize extends CustomSumMetric {
+public class ScannedDeleteManifests extends CustomSumMetric {
 
-  static final String NAME = "totalFileSize";
+  static final String NAME = "scannedDeleteManifests";
 
   @Override
   public String name() {
@@ -31,6 +31,6 @@ public class TotalFileSize extends CustomSumMetric {
 
   @Override
   public String description() {
-    return "total file size (bytes)";
+    return "number of scanned delete manifests";
   }
 }
diff --git 
a/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TotalFileSize.java
 
b/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/SkippedDeleteFiles.java
similarity index 87%
copy from 
spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TotalFileSize.java
copy to 
spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/SkippedDeleteFiles.java
index 994626e54f..70597be671 100644
--- 
a/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TotalFileSize.java
+++ 
b/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/SkippedDeleteFiles.java
@@ -20,9 +20,9 @@ package org.apache.iceberg.spark.source.metrics;
 
 import org.apache.spark.sql.connector.metric.CustomSumMetric;
 
-public class TotalFileSize extends CustomSumMetric {
+public class SkippedDeleteFiles extends CustomSumMetric {
 
-  static final String NAME = "totalFileSize";
+  static final String NAME = "skippedDeleteFiles";
 
   @Override
   public String name() {
@@ -31,6 +31,6 @@ public class TotalFileSize extends CustomSumMetric {
 
   @Override
   public String description() {
-    return "total file size (bytes)";
+    return "number of skipped delete files";
   }
 }
diff --git 
a/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TotalFileSize.java
 
b/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/SkippedDeleteManifests.java
similarity index 86%
copy from 
spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TotalFileSize.java
copy to 
spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/SkippedDeleteManifests.java
index 994626e54f..0336170b45 100644
--- 
a/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TotalFileSize.java
+++ 
b/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/SkippedDeleteManifests.java
@@ -20,9 +20,9 @@ package org.apache.iceberg.spark.source.metrics;
 
 import org.apache.spark.sql.connector.metric.CustomSumMetric;
 
-public class TotalFileSize extends CustomSumMetric {
+public class SkippedDeleteManifests extends CustomSumMetric {
 
-  static final String NAME = "totalFileSize";
+  static final String NAME = "skippedDeleteManifests";
 
   @Override
   public String name() {
@@ -31,6 +31,6 @@ public class TotalFileSize extends CustomSumMetric {
 
   @Override
   public String description() {
-    return "total file size (bytes)";
+    return "number of skipped delete manifest";
   }
 }
diff --git 
a/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskScannedDataFiles.java
 
b/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskEqualityDeleteFiles.java
similarity index 78%
copy from 
spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskScannedDataFiles.java
copy to 
spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskEqualityDeleteFiles.java
index d9a527da08..ecd14bcca3 100644
--- 
a/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskScannedDataFiles.java
+++ 
b/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskEqualityDeleteFiles.java
@@ -22,16 +22,16 @@ import org.apache.iceberg.metrics.CounterResult;
 import org.apache.iceberg.metrics.ScanReport;
 import org.apache.spark.sql.connector.metric.CustomTaskMetric;
 
-public class TaskScannedDataFiles implements CustomTaskMetric {
+public class TaskEqualityDeleteFiles implements CustomTaskMetric {
   private final long value;
 
-  private TaskScannedDataFiles(long value) {
+  private TaskEqualityDeleteFiles(long value) {
     this.value = value;
   }
 
   @Override
   public String name() {
-    return ScannedDataFiles.NAME;
+    return EqualityDeleteFiles.NAME;
   }
 
   @Override
@@ -39,9 +39,9 @@ public class TaskScannedDataFiles implements CustomTaskMetric 
{
     return value;
   }
 
-  public static TaskScannedDataFiles from(ScanReport scanReport) {
-    CounterResult counter = scanReport.scanMetrics().resultDataFiles();
+  public static TaskEqualityDeleteFiles from(ScanReport scanReport) {
+    CounterResult counter = scanReport.scanMetrics().equalityDeleteFiles();
     long value = counter != null ? counter.value() : 0L;
-    return new TaskScannedDataFiles(value);
+    return new TaskEqualityDeleteFiles(value);
   }
 }
diff --git 
a/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskScannedDataFiles.java
 
b/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskIndexedDeleteFiles.java
similarity index 78%
copy from 
spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskScannedDataFiles.java
copy to 
spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskIndexedDeleteFiles.java
index d9a527da08..63b6767e95 100644
--- 
a/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskScannedDataFiles.java
+++ 
b/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskIndexedDeleteFiles.java
@@ -22,16 +22,16 @@ import org.apache.iceberg.metrics.CounterResult;
 import org.apache.iceberg.metrics.ScanReport;
 import org.apache.spark.sql.connector.metric.CustomTaskMetric;
 
-public class TaskScannedDataFiles implements CustomTaskMetric {
+public class TaskIndexedDeleteFiles implements CustomTaskMetric {
   private final long value;
 
-  private TaskScannedDataFiles(long value) {
+  private TaskIndexedDeleteFiles(long value) {
     this.value = value;
   }
 
   @Override
   public String name() {
-    return ScannedDataFiles.NAME;
+    return IndexedDeleteFiles.NAME;
   }
 
   @Override
@@ -39,9 +39,9 @@ public class TaskScannedDataFiles implements CustomTaskMetric 
{
     return value;
   }
 
-  public static TaskScannedDataFiles from(ScanReport scanReport) {
-    CounterResult counter = scanReport.scanMetrics().resultDataFiles();
+  public static TaskIndexedDeleteFiles from(ScanReport scanReport) {
+    CounterResult counter = scanReport.scanMetrics().indexedDeleteFiles();
     long value = counter != null ? counter.value() : 0L;
-    return new TaskScannedDataFiles(value);
+    return new TaskIndexedDeleteFiles(value);
   }
 }
diff --git 
a/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskScannedDataFiles.java
 
b/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskPositionalDeleteFiles.java
similarity index 77%
copy from 
spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskScannedDataFiles.java
copy to 
spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskPositionalDeleteFiles.java
index d9a527da08..805f22bf0d 100644
--- 
a/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskScannedDataFiles.java
+++ 
b/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskPositionalDeleteFiles.java
@@ -22,16 +22,16 @@ import org.apache.iceberg.metrics.CounterResult;
 import org.apache.iceberg.metrics.ScanReport;
 import org.apache.spark.sql.connector.metric.CustomTaskMetric;
 
-public class TaskScannedDataFiles implements CustomTaskMetric {
+public class TaskPositionalDeleteFiles implements CustomTaskMetric {
   private final long value;
 
-  private TaskScannedDataFiles(long value) {
+  private TaskPositionalDeleteFiles(long value) {
     this.value = value;
   }
 
   @Override
   public String name() {
-    return ScannedDataFiles.NAME;
+    return PositionalDeleteFiles.NAME;
   }
 
   @Override
@@ -39,9 +39,9 @@ public class TaskScannedDataFiles implements CustomTaskMetric 
{
     return value;
   }
 
-  public static TaskScannedDataFiles from(ScanReport scanReport) {
-    CounterResult counter = scanReport.scanMetrics().resultDataFiles();
+  public static TaskPositionalDeleteFiles from(ScanReport scanReport) {
+    CounterResult counter = scanReport.scanMetrics().positionalDeleteFiles();
     long value = counter != null ? counter.value() : 0L;
-    return new TaskScannedDataFiles(value);
+    return new TaskPositionalDeleteFiles(value);
   }
 }
diff --git 
a/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskScannedDataFiles.java
 
b/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskResultDataFiles.java
similarity index 83%
copy from 
spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskScannedDataFiles.java
copy to 
spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskResultDataFiles.java
index d9a527da08..a271421314 100644
--- 
a/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskScannedDataFiles.java
+++ 
b/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskResultDataFiles.java
@@ -22,16 +22,16 @@ import org.apache.iceberg.metrics.CounterResult;
 import org.apache.iceberg.metrics.ScanReport;
 import org.apache.spark.sql.connector.metric.CustomTaskMetric;
 
-public class TaskScannedDataFiles implements CustomTaskMetric {
+public class TaskResultDataFiles implements CustomTaskMetric {
   private final long value;
 
-  private TaskScannedDataFiles(long value) {
+  private TaskResultDataFiles(long value) {
     this.value = value;
   }
 
   @Override
   public String name() {
-    return ScannedDataFiles.NAME;
+    return ResultDataFiles.NAME;
   }
 
   @Override
@@ -39,9 +39,9 @@ public class TaskScannedDataFiles implements CustomTaskMetric 
{
     return value;
   }
 
-  public static TaskScannedDataFiles from(ScanReport scanReport) {
+  public static TaskResultDataFiles from(ScanReport scanReport) {
     CounterResult counter = scanReport.scanMetrics().resultDataFiles();
     long value = counter != null ? counter.value() : 0L;
-    return new TaskScannedDataFiles(value);
+    return new TaskResultDataFiles(value);
   }
 }
diff --git 
a/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskTotalFileSize.java
 
b/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskResultDeleteFiles.java
similarity index 78%
copy from 
spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskTotalFileSize.java
copy to 
spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskResultDeleteFiles.java
index c300d835e7..aea8ca07dd 100644
--- 
a/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskTotalFileSize.java
+++ 
b/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskResultDeleteFiles.java
@@ -22,17 +22,16 @@ import org.apache.iceberg.metrics.CounterResult;
 import org.apache.iceberg.metrics.ScanReport;
 import org.apache.spark.sql.connector.metric.CustomTaskMetric;
 
-public class TaskTotalFileSize implements CustomTaskMetric {
-
+public class TaskResultDeleteFiles implements CustomTaskMetric {
   private final long value;
 
-  private TaskTotalFileSize(long value) {
+  private TaskResultDeleteFiles(long value) {
     this.value = value;
   }
 
   @Override
   public String name() {
-    return TotalFileSize.NAME;
+    return ResultDeleteFiles.NAME;
   }
 
   @Override
@@ -40,9 +39,9 @@ public class TaskTotalFileSize implements CustomTaskMetric {
     return value;
   }
 
-  public static TaskTotalFileSize from(ScanReport scanReport) {
-    CounterResult counter = scanReport.scanMetrics().totalFileSizeInBytes();
+  public static TaskResultDeleteFiles from(ScanReport scanReport) {
+    CounterResult counter = scanReport.scanMetrics().resultDeleteFiles();
     long value = counter != null ? counter.value() : 0L;
-    return new TaskTotalFileSize(value);
+    return new TaskResultDeleteFiles(value);
   }
 }
diff --git 
a/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskScannedDataFiles.java
 
b/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskScannedDeleteManifests.java
similarity index 77%
copy from 
spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskScannedDataFiles.java
copy to 
spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskScannedDeleteManifests.java
index d9a527da08..1766cf2f68 100644
--- 
a/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskScannedDataFiles.java
+++ 
b/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskScannedDeleteManifests.java
@@ -22,16 +22,16 @@ import org.apache.iceberg.metrics.CounterResult;
 import org.apache.iceberg.metrics.ScanReport;
 import org.apache.spark.sql.connector.metric.CustomTaskMetric;
 
-public class TaskScannedDataFiles implements CustomTaskMetric {
+public class TaskScannedDeleteManifests implements CustomTaskMetric {
   private final long value;
 
-  private TaskScannedDataFiles(long value) {
+  private TaskScannedDeleteManifests(long value) {
     this.value = value;
   }
 
   @Override
   public String name() {
-    return ScannedDataFiles.NAME;
+    return ScannedDeleteManifests.NAME;
   }
 
   @Override
@@ -39,9 +39,9 @@ public class TaskScannedDataFiles implements CustomTaskMetric 
{
     return value;
   }
 
-  public static TaskScannedDataFiles from(ScanReport scanReport) {
-    CounterResult counter = scanReport.scanMetrics().resultDataFiles();
+  public static TaskScannedDeleteManifests from(ScanReport scanReport) {
+    CounterResult counter = scanReport.scanMetrics().scannedDeleteManifests();
     long value = counter != null ? counter.value() : 0L;
-    return new TaskScannedDataFiles(value);
+    return new TaskScannedDeleteManifests(value);
   }
 }
diff --git 
a/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskScannedDataFiles.java
 
b/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskSkippedDeleteFiles.java
similarity index 78%
copy from 
spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskScannedDataFiles.java
copy to 
spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskSkippedDeleteFiles.java
index d9a527da08..8757975174 100644
--- 
a/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskScannedDataFiles.java
+++ 
b/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskSkippedDeleteFiles.java
@@ -22,16 +22,16 @@ import org.apache.iceberg.metrics.CounterResult;
 import org.apache.iceberg.metrics.ScanReport;
 import org.apache.spark.sql.connector.metric.CustomTaskMetric;
 
-public class TaskScannedDataFiles implements CustomTaskMetric {
+public class TaskSkippedDeleteFiles implements CustomTaskMetric {
   private final long value;
 
-  private TaskScannedDataFiles(long value) {
+  private TaskSkippedDeleteFiles(long value) {
     this.value = value;
   }
 
   @Override
   public String name() {
-    return ScannedDataFiles.NAME;
+    return SkippedDeleteFiles.NAME;
   }
 
   @Override
@@ -39,9 +39,9 @@ public class TaskScannedDataFiles implements CustomTaskMetric 
{
     return value;
   }
 
-  public static TaskScannedDataFiles from(ScanReport scanReport) {
-    CounterResult counter = scanReport.scanMetrics().resultDataFiles();
+  public static TaskSkippedDeleteFiles from(ScanReport scanReport) {
+    CounterResult counter = scanReport.scanMetrics().skippedDeleteFiles();
     long value = counter != null ? counter.value() : 0L;
-    return new TaskScannedDataFiles(value);
+    return new TaskSkippedDeleteFiles(value);
   }
 }
diff --git 
a/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskScannedDataFiles.java
 
b/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskSkippedDeleteManifests.java
similarity index 77%
copy from 
spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskScannedDataFiles.java
copy to 
spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskSkippedDeleteManifests.java
index d9a527da08..4a9c71e0c1 100644
--- 
a/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskScannedDataFiles.java
+++ 
b/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskSkippedDeleteManifests.java
@@ -22,16 +22,16 @@ import org.apache.iceberg.metrics.CounterResult;
 import org.apache.iceberg.metrics.ScanReport;
 import org.apache.spark.sql.connector.metric.CustomTaskMetric;
 
-public class TaskScannedDataFiles implements CustomTaskMetric {
+public class TaskSkippedDeleteManifests implements CustomTaskMetric {
   private final long value;
 
-  private TaskScannedDataFiles(long value) {
+  private TaskSkippedDeleteManifests(long value) {
     this.value = value;
   }
 
   @Override
   public String name() {
-    return ScannedDataFiles.NAME;
+    return SkippedDeleteManifests.NAME;
   }
 
   @Override
@@ -39,9 +39,9 @@ public class TaskScannedDataFiles implements CustomTaskMetric 
{
     return value;
   }
 
-  public static TaskScannedDataFiles from(ScanReport scanReport) {
-    CounterResult counter = scanReport.scanMetrics().resultDataFiles();
+  public static TaskSkippedDeleteManifests from(ScanReport scanReport) {
+    CounterResult counter = scanReport.scanMetrics().skippedDeleteManifests();
     long value = counter != null ? counter.value() : 0L;
-    return new TaskScannedDataFiles(value);
+    return new TaskSkippedDeleteManifests(value);
   }
 }
diff --git 
a/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskTotalFileSize.java
 
b/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskTotalDataFileSize.java
similarity index 83%
rename from 
spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskTotalFileSize.java
rename to 
spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskTotalDataFileSize.java
index c300d835e7..3f5a224425 100644
--- 
a/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskTotalFileSize.java
+++ 
b/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskTotalDataFileSize.java
@@ -22,17 +22,17 @@ import org.apache.iceberg.metrics.CounterResult;
 import org.apache.iceberg.metrics.ScanReport;
 import org.apache.spark.sql.connector.metric.CustomTaskMetric;
 
-public class TaskTotalFileSize implements CustomTaskMetric {
+public class TaskTotalDataFileSize implements CustomTaskMetric {
 
   private final long value;
 
-  private TaskTotalFileSize(long value) {
+  private TaskTotalDataFileSize(long value) {
     this.value = value;
   }
 
   @Override
   public String name() {
-    return TotalFileSize.NAME;
+    return TotalDataFileSize.NAME;
   }
 
   @Override
@@ -40,9 +40,9 @@ public class TaskTotalFileSize implements CustomTaskMetric {
     return value;
   }
 
-  public static TaskTotalFileSize from(ScanReport scanReport) {
+  public static TaskTotalDataFileSize from(ScanReport scanReport) {
     CounterResult counter = scanReport.scanMetrics().totalFileSizeInBytes();
     long value = counter != null ? counter.value() : 0L;
-    return new TaskTotalFileSize(value);
+    return new TaskTotalDataFileSize(value);
   }
 }
diff --git 
a/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskScannedDataFiles.java
 
b/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskTotalDataManifests.java
similarity index 78%
copy from 
spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskScannedDataFiles.java
copy to 
spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskTotalDataManifests.java
index d9a527da08..6d8c3c24e4 100644
--- 
a/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskScannedDataFiles.java
+++ 
b/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskTotalDataManifests.java
@@ -22,16 +22,16 @@ import org.apache.iceberg.metrics.CounterResult;
 import org.apache.iceberg.metrics.ScanReport;
 import org.apache.spark.sql.connector.metric.CustomTaskMetric;
 
-public class TaskScannedDataFiles implements CustomTaskMetric {
+public class TaskTotalDataManifests implements CustomTaskMetric {
   private final long value;
 
-  private TaskScannedDataFiles(long value) {
+  private TaskTotalDataManifests(long value) {
     this.value = value;
   }
 
   @Override
   public String name() {
-    return ScannedDataFiles.NAME;
+    return TotalDataManifests.NAME;
   }
 
   @Override
@@ -39,9 +39,9 @@ public class TaskScannedDataFiles implements CustomTaskMetric 
{
     return value;
   }
 
-  public static TaskScannedDataFiles from(ScanReport scanReport) {
-    CounterResult counter = scanReport.scanMetrics().resultDataFiles();
+  public static TaskTotalDataManifests from(ScanReport scanReport) {
+    CounterResult counter = scanReport.scanMetrics().totalDataManifests();
     long value = counter != null ? counter.value() : 0L;
-    return new TaskScannedDataFiles(value);
+    return new TaskTotalDataManifests(value);
   }
 }
diff --git 
a/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskScannedDataFiles.java
 
b/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskTotalDeleteFileSize.java
similarity index 78%
copy from 
spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskScannedDataFiles.java
copy to 
spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskTotalDeleteFileSize.java
index d9a527da08..17ecec78da 100644
--- 
a/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskScannedDataFiles.java
+++ 
b/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskTotalDeleteFileSize.java
@@ -22,16 +22,17 @@ import org.apache.iceberg.metrics.CounterResult;
 import org.apache.iceberg.metrics.ScanReport;
 import org.apache.spark.sql.connector.metric.CustomTaskMetric;
 
-public class TaskScannedDataFiles implements CustomTaskMetric {
+public class TaskTotalDeleteFileSize implements CustomTaskMetric {
+
   private final long value;
 
-  private TaskScannedDataFiles(long value) {
+  private TaskTotalDeleteFileSize(long value) {
     this.value = value;
   }
 
   @Override
   public String name() {
-    return ScannedDataFiles.NAME;
+    return TotalDeleteFileSize.NAME;
   }
 
   @Override
@@ -39,9 +40,9 @@ public class TaskScannedDataFiles implements CustomTaskMetric 
{
     return value;
   }
 
-  public static TaskScannedDataFiles from(ScanReport scanReport) {
-    CounterResult counter = scanReport.scanMetrics().resultDataFiles();
+  public static TaskTotalDeleteFileSize from(ScanReport scanReport) {
+    CounterResult counter = 
scanReport.scanMetrics().totalDeleteFileSizeInBytes();
     long value = counter != null ? counter.value() : 0L;
-    return new TaskScannedDataFiles(value);
+    return new TaskTotalDeleteFileSize(value);
   }
 }
diff --git 
a/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskScannedDataFiles.java
 
b/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskTotalDeleteManifests.java
similarity index 77%
rename from 
spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskScannedDataFiles.java
rename to 
spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskTotalDeleteManifests.java
index d9a527da08..ff55c1be89 100644
--- 
a/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskScannedDataFiles.java
+++ 
b/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TaskTotalDeleteManifests.java
@@ -22,16 +22,16 @@ import org.apache.iceberg.metrics.CounterResult;
 import org.apache.iceberg.metrics.ScanReport;
 import org.apache.spark.sql.connector.metric.CustomTaskMetric;
 
-public class TaskScannedDataFiles implements CustomTaskMetric {
+public class TaskTotalDeleteManifests implements CustomTaskMetric {
   private final long value;
 
-  private TaskScannedDataFiles(long value) {
+  private TaskTotalDeleteManifests(long value) {
     this.value = value;
   }
 
   @Override
   public String name() {
-    return ScannedDataFiles.NAME;
+    return TotalDeleteManifests.NAME;
   }
 
   @Override
@@ -39,9 +39,9 @@ public class TaskScannedDataFiles implements CustomTaskMetric 
{
     return value;
   }
 
-  public static TaskScannedDataFiles from(ScanReport scanReport) {
-    CounterResult counter = scanReport.scanMetrics().resultDataFiles();
+  public static TaskTotalDeleteManifests from(ScanReport scanReport) {
+    CounterResult counter = scanReport.scanMetrics().totalDeleteManifests();
     long value = counter != null ? counter.value() : 0L;
-    return new TaskScannedDataFiles(value);
+    return new TaskTotalDeleteManifests(value);
   }
 }
diff --git 
a/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TotalFileSize.java
 
b/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TotalDataFileSize.java
similarity index 87%
copy from 
spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TotalFileSize.java
copy to 
spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TotalDataFileSize.java
index 994626e54f..b1ff8a4636 100644
--- 
a/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TotalFileSize.java
+++ 
b/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TotalDataFileSize.java
@@ -20,9 +20,9 @@ package org.apache.iceberg.spark.source.metrics;
 
 import org.apache.spark.sql.connector.metric.CustomSumMetric;
 
-public class TotalFileSize extends CustomSumMetric {
+public class TotalDataFileSize extends CustomSumMetric {
 
-  static final String NAME = "totalFileSize";
+  static final String NAME = "totalDataFileSize";
 
   @Override
   public String name() {
@@ -31,6 +31,6 @@ public class TotalFileSize extends CustomSumMetric {
 
   @Override
   public String description() {
-    return "total file size (bytes)";
+    return "total data file size (bytes)";
   }
 }
diff --git 
a/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TotalFileSize.java
 
b/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TotalDataManifests.java
similarity index 87%
copy from 
spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TotalFileSize.java
copy to 
spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TotalDataManifests.java
index 994626e54f..de8f04be77 100644
--- 
a/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TotalFileSize.java
+++ 
b/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TotalDataManifests.java
@@ -20,9 +20,9 @@ package org.apache.iceberg.spark.source.metrics;
 
 import org.apache.spark.sql.connector.metric.CustomSumMetric;
 
-public class TotalFileSize extends CustomSumMetric {
+public class TotalDataManifests extends CustomSumMetric {
 
-  static final String NAME = "totalFileSize";
+  static final String NAME = "totalDataManifest";
 
   @Override
   public String name() {
@@ -31,6 +31,6 @@ public class TotalFileSize extends CustomSumMetric {
 
   @Override
   public String description() {
-    return "total file size (bytes)";
+    return "total data manifests";
   }
 }
diff --git 
a/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TotalFileSize.java
 
b/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TotalDeleteFileSize.java
similarity index 86%
copy from 
spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TotalFileSize.java
copy to 
spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TotalDeleteFileSize.java
index 994626e54f..da43033252 100644
--- 
a/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TotalFileSize.java
+++ 
b/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TotalDeleteFileSize.java
@@ -20,9 +20,9 @@ package org.apache.iceberg.spark.source.metrics;
 
 import org.apache.spark.sql.connector.metric.CustomSumMetric;
 
-public class TotalFileSize extends CustomSumMetric {
+public class TotalDeleteFileSize extends CustomSumMetric {
 
-  static final String NAME = "totalFileSize";
+  static final String NAME = "totalDeleteFileSize";
 
   @Override
   public String name() {
@@ -31,6 +31,6 @@ public class TotalFileSize extends CustomSumMetric {
 
   @Override
   public String description() {
-    return "total file size (bytes)";
+    return "total delete file size (bytes)";
   }
 }
diff --git 
a/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TotalFileSize.java
 
b/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TotalDeleteManifests.java
similarity index 87%
rename from 
spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TotalFileSize.java
rename to 
spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TotalDeleteManifests.java
index 994626e54f..7442dfdb6f 100644
--- 
a/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TotalFileSize.java
+++ 
b/spark/v3.4/spark/src/main/java/org/apache/iceberg/spark/source/metrics/TotalDeleteManifests.java
@@ -20,9 +20,9 @@ package org.apache.iceberg.spark.source.metrics;
 
 import org.apache.spark.sql.connector.metric.CustomSumMetric;
 
-public class TotalFileSize extends CustomSumMetric {
+public class TotalDeleteManifests extends CustomSumMetric {
 
-  static final String NAME = "totalFileSize";
+  static final String NAME = "totalDeleteManifests";
 
   @Override
   public String name() {
@@ -31,6 +31,6 @@ public class TotalFileSize extends CustomSumMetric {
 
   @Override
   public String description() {
-    return "total file size (bytes)";
+    return "total delete manifests";
   }
 }
diff --git 
a/spark/v3.4/spark/src/test/java/org/apache/iceberg/spark/source/TestSparkReadMetrics.java
 
b/spark/v3.4/spark/src/test/java/org/apache/iceberg/spark/source/TestSparkReadMetrics.java
index 7b943372d1..fea5a1d3e1 100644
--- 
a/spark/v3.4/spark/src/test/java/org/apache/iceberg/spark/source/TestSparkReadMetrics.java
+++ 
b/spark/v3.4/spark/src/test/java/org/apache/iceberg/spark/source/TestSparkReadMetrics.java
@@ -43,7 +43,7 @@ public class TestSparkReadMetrics extends 
SparkTestBaseWithCatalog {
   @Test
   public void testReadMetricsForV1Table() throws NoSuchTableException {
     sql(
-        "CREATE TABLE %s (id BIGINT) USING iceberg TBLPROPERTIES 
('format-version'='2')",
+        "CREATE TABLE %s (id BIGINT) USING iceberg TBLPROPERTIES 
('format-version'='1')",
         tableName);
 
     spark.range(10000).coalesce(1).writeTo(tableName).append();
@@ -56,12 +56,31 @@ public class TestSparkReadMetrics extends 
SparkTestBaseWithCatalog {
         
seqAsJavaListConverter(df.queryExecution().executedPlan().collectLeaves()).asJava();
     Map<String, SQLMetric> metricsMap =
         
JavaConverters.mapAsJavaMapConverter(sparkPlans.get(0).metrics()).asJava();
-    
Assertions.assertThat(metricsMap.get("skippedDataFiles").value()).isEqualTo(1);
+    // Common
+    
Assertions.assertThat(metricsMap.get("totalPlanningDuration").value()).isNotEqualTo(0);
+
+    // data manifests
+    
Assertions.assertThat(metricsMap.get("totalDataManifest").value()).isEqualTo(2);
     
Assertions.assertThat(metricsMap.get("scannedDataManifests").value()).isEqualTo(2);
-    
Assertions.assertThat(metricsMap.get("scannedDataFiles").value()).isEqualTo(1);
     
Assertions.assertThat(metricsMap.get("skippedDataManifests").value()).isEqualTo(0);
-    
Assertions.assertThat(metricsMap.get("totalFileSize").value()).isNotEqualTo(0);
-    
Assertions.assertThat(metricsMap.get("totalPlanningDuration").value()).isNotEqualTo(0);
+
+    // data files
+    
Assertions.assertThat(metricsMap.get("resultDataFiles").value()).isEqualTo(1);
+    
Assertions.assertThat(metricsMap.get("skippedDataFiles").value()).isEqualTo(1);
+    
Assertions.assertThat(metricsMap.get("totalDataFileSize").value()).isNotEqualTo(0);
+
+    // delete manifests
+    
Assertions.assertThat(metricsMap.get("totalDeleteManifests").value()).isEqualTo(0);
+    
Assertions.assertThat(metricsMap.get("scannedDeleteManifests").value()).isEqualTo(0);
+    
Assertions.assertThat(metricsMap.get("skippedDeleteManifests").value()).isEqualTo(0);
+
+    // delete files
+    
Assertions.assertThat(metricsMap.get("totalDeleteFileSize").value()).isEqualTo(0);
+    
Assertions.assertThat(metricsMap.get("resultDeleteFiles").value()).isEqualTo(0);
+    
Assertions.assertThat(metricsMap.get("equalityDeleteFiles").value()).isEqualTo(0);
+    
Assertions.assertThat(metricsMap.get("indexedDeleteFiles").value()).isEqualTo(0);
+    
Assertions.assertThat(metricsMap.get("positionalDeleteFiles").value()).isEqualTo(0);
+    
Assertions.assertThat(metricsMap.get("skippedDeleteFiles").value()).isEqualTo(0);
   }
 
   @Test
@@ -80,11 +99,82 @@ public class TestSparkReadMetrics extends 
SparkTestBaseWithCatalog {
         
seqAsJavaListConverter(df.queryExecution().executedPlan().collectLeaves()).asJava();
     Map<String, SQLMetric> metricsMap =
         
JavaConverters.mapAsJavaMapConverter(sparkPlans.get(0).metrics()).asJava();
-    
Assertions.assertThat(metricsMap.get("skippedDataFiles").value()).isEqualTo(1);
+
+    // Common
+    
Assertions.assertThat(metricsMap.get("totalPlanningDuration").value()).isNotEqualTo(0);
+
+    // data manifests
+    
Assertions.assertThat(metricsMap.get("totalDataManifest").value()).isEqualTo(2);
     
Assertions.assertThat(metricsMap.get("scannedDataManifests").value()).isEqualTo(2);
-    
Assertions.assertThat(metricsMap.get("scannedDataFiles").value()).isEqualTo(1);
     
Assertions.assertThat(metricsMap.get("skippedDataManifests").value()).isEqualTo(0);
-    
Assertions.assertThat(metricsMap.get("totalFileSize").value()).isNotEqualTo(0);
+
+    // data files
+    
Assertions.assertThat(metricsMap.get("resultDataFiles").value()).isEqualTo(1);
+    
Assertions.assertThat(metricsMap.get("skippedDataFiles").value()).isEqualTo(1);
+    
Assertions.assertThat(metricsMap.get("totalDataFileSize").value()).isNotEqualTo(0);
+
+    // delete manifests
+    
Assertions.assertThat(metricsMap.get("totalDeleteManifests").value()).isEqualTo(0);
+    
Assertions.assertThat(metricsMap.get("scannedDeleteManifests").value()).isEqualTo(0);
+    
Assertions.assertThat(metricsMap.get("skippedDeleteManifests").value()).isEqualTo(0);
+
+    // delete files
+    
Assertions.assertThat(metricsMap.get("totalDeleteFileSize").value()).isEqualTo(0);
+    
Assertions.assertThat(metricsMap.get("resultDeleteFiles").value()).isEqualTo(0);
+    
Assertions.assertThat(metricsMap.get("equalityDeleteFiles").value()).isEqualTo(0);
+    
Assertions.assertThat(metricsMap.get("indexedDeleteFiles").value()).isEqualTo(0);
+    
Assertions.assertThat(metricsMap.get("positionalDeleteFiles").value()).isEqualTo(0);
+    
Assertions.assertThat(metricsMap.get("skippedDeleteFiles").value()).isEqualTo(0);
+  }
+
+  @Test
+  public void testDeleteMetrics() throws NoSuchTableException {
+    sql(
+        "CREATE TABLE %s (id BIGINT)"
+            + " USING iceberg"
+            + " TBLPROPERTIES (\n"
+            + "    'write.delete.mode'='merge-on-read',\n"
+            + "    'write.update.mode'='merge-on-read',\n"
+            + "    'write.merge.mode'='merge-on-read',\n"
+            + "    'format-version'='2'\n"
+            + "  )",
+        tableName);
+
+    spark.range(10000).coalesce(1).writeTo(tableName).append();
+
+    spark.sql(String.format("DELETE FROM %s WHERE id = 1", 
tableName)).collect();
+    Dataset<Row> df = spark.sql(String.format("SELECT * FROM %s", tableName));
+    df.collect();
+
+    List<SparkPlan> sparkPlans =
+        
seqAsJavaListConverter(df.queryExecution().executedPlan().collectLeaves()).asJava();
+    Map<String, SQLMetric> metricsMap =
+        
JavaConverters.mapAsJavaMapConverter(sparkPlans.get(0).metrics()).asJava();
+
+    // Common
     
Assertions.assertThat(metricsMap.get("totalPlanningDuration").value()).isNotEqualTo(0);
+
+    // data manifests
+    
Assertions.assertThat(metricsMap.get("totalDataManifest").value()).isEqualTo(1);
+    
Assertions.assertThat(metricsMap.get("scannedDataManifests").value()).isEqualTo(1);
+    
Assertions.assertThat(metricsMap.get("skippedDataManifests").value()).isEqualTo(0);
+
+    // data files
+    
Assertions.assertThat(metricsMap.get("resultDataFiles").value()).isEqualTo(1);
+    
Assertions.assertThat(metricsMap.get("skippedDataFiles").value()).isEqualTo(0);
+    
Assertions.assertThat(metricsMap.get("totalDataFileSize").value()).isNotEqualTo(0);
+
+    // delete manifests
+    
Assertions.assertThat(metricsMap.get("totalDeleteManifests").value()).isEqualTo(1);
+    
Assertions.assertThat(metricsMap.get("scannedDeleteManifests").value()).isEqualTo(1);
+    
Assertions.assertThat(metricsMap.get("skippedDeleteManifests").value()).isEqualTo(0);
+
+    // delete files
+    
Assertions.assertThat(metricsMap.get("totalDeleteFileSize").value()).isNotEqualTo(0);
+    
Assertions.assertThat(metricsMap.get("resultDeleteFiles").value()).isEqualTo(1);
+    
Assertions.assertThat(metricsMap.get("equalityDeleteFiles").value()).isEqualTo(0);
+    
Assertions.assertThat(metricsMap.get("indexedDeleteFiles").value()).isEqualTo(1);
+    
Assertions.assertThat(metricsMap.get("positionalDeleteFiles").value()).isEqualTo(1);
+    
Assertions.assertThat(metricsMap.get("skippedDeleteFiles").value()).isEqualTo(0);
   }
 }

Reply via email to