diff --git a/core/src/main/java/org/apache/iceberg/actions/SizeBasedDataRewriter.java b/core/src/main/java/org/apache/iceberg/actions/SizeBasedDataRewriter.java index 61b90d9fc6e3..7e74886597de 100644 --- a/core/src/main/java/org/apache/iceberg/actions/SizeBasedDataRewriter.java +++ b/core/src/main/java/org/apache/iceberg/actions/SizeBasedDataRewriter.java @@ -47,12 +47,13 @@ public abstract class SizeBasedDataRewriter extends SizeBasedFileRewriter validOptions() { public void init(Map options) { super.init(options); this.deleteFileThreshold = deleteFileThreshold(options); + this.deleteRatioThreshold = PropertyUtil.propertyAsDouble( + options, "delete-ratio-threshold", DEFAULT_DELETE_THRESHOLD); } @Override diff --git a/core/src/test/java/org/apache/iceberg/actions/TestSizeBasedRewriter.java b/core/src/test/java/org/apache/iceberg/actions/TestSizeBasedRewriter.java index 77d16d3bc821..cabe9d47ab08 100644 --- a/core/src/test/java/org/apache/iceberg/actions/TestSizeBasedRewriter.java +++ b/core/src/test/java/org/apache/iceberg/actions/TestSizeBasedRewriter.java @@ -76,6 +76,27 @@ public void testSplitSizeLowerBound() { assertThat(splitSize).isLessThan(maxFileSize); } + @TestTemplate + public void testDeleteFileThresholdOption() { + SizeBasedDataFileRewriterImpl rewriter = new SizeBasedDataFileRewriterImpl(table); + + Map options = ImmutableMap.of( + SizeBasedDataRewriter.DELETE_FILE_THRESHOLD, "5" + ); + rewriter.init(options); + + assertThat(rewriter.getDeleteFileThreshold()).isEqualTo(5); + } + + @TestTemplate + public void testHighDeleteRatioTriggersRewrite() { + SizeBasedDataFileRewriterImpl rewriter = new SizeBasedDataFileRewriterImpl(table); + + FileScanTask task = new MockFileScanTask(100L * 1024 * 1024, 80); // 80% delete ratio + + assertThat(rewriter.tooHighDeleteRatio(task)).isTrue(); + } + private static class SizeBasedDataFileRewriterImpl extends SizeBasedDataRewriter { SizeBasedDataFileRewriterImpl(Table table) {