pvary commented on code in PR #12493:
URL: https://github.com/apache/iceberg/pull/12493#discussion_r2013719350


##########
core/src/main/java/org/apache/iceberg/actions/RewriteFileGroupPlanner.java:
##########
@@ -0,0 +1,310 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.iceberg.actions;
+
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+import org.apache.iceberg.ContentFile;
+import org.apache.iceberg.DataFile;
+import org.apache.iceberg.FileScanTask;
+import org.apache.iceberg.RewriteJobOrder;
+import org.apache.iceberg.StructLike;
+import org.apache.iceberg.Table;
+import org.apache.iceberg.TableProperties;
+import org.apache.iceberg.TableScan;
+import org.apache.iceberg.actions.RewriteDataFiles.FileGroupInfo;
+import org.apache.iceberg.data.GenericRecord;
+import org.apache.iceberg.expressions.Expression;
+import org.apache.iceberg.expressions.Expressions;
+import org.apache.iceberg.io.CloseableIterable;
+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.ImmutableSet;
+import org.apache.iceberg.relocated.com.google.common.collect.Iterables;
+import org.apache.iceberg.relocated.com.google.common.collect.Lists;
+import org.apache.iceberg.types.Types;
+import org.apache.iceberg.util.ContentFileUtil;
+import org.apache.iceberg.util.PropertyUtil;
+import org.apache.iceberg.util.StructLikeMap;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Groups specified data files in the {@link Table} into {@link 
RewriteFileGroup}s. The files are
+ * grouped by partitions based on their size using fix sized bins. Extends 
{@link
+ * SizeBasedFileRewritePlanner} with delete file number and delete ratio 
thresholds and job {@link
+ * RewriteDataFiles#REWRITE_JOB_ORDER} handling.
+ */
+public class RewriteFileGroupPlanner
+    extends SizeBasedFileRewritePlanner<FileGroupInfo, FileScanTask, DataFile, 
RewriteFileGroup> {
+  /**
+   * The minimum number of deletes that needs to be associated with a data 
file for it to be
+   * considered for rewriting. If a data file has this number of deletes or 
more, it will be
+   * rewritten regardless of its file size determined by {@link 
#MIN_FILE_SIZE_BYTES} and {@link
+   * #MAX_FILE_SIZE_BYTES}. If a file group contains a file that satisfies 
this condition, the file
+   * group will be rewritten regardless of the number of files in the file 
group determined by
+   * {@link #MIN_INPUT_FILES}.
+   *
+   * <p>Defaults to Integer.MAX_VALUE, which means this feature is not enabled 
by default.
+   */
+  public static final String DELETE_FILE_THRESHOLD = "delete-file-threshold";
+
+  public static final int DELETE_FILE_THRESHOLD_DEFAULT = Integer.MAX_VALUE;
+
+  /**
+   * The minimum deletion ratio that needs to be associated with a data file 
for it to be considered

Review Comment:
   Yeah. Copied from `SizeBasedDataRewriter` which added this by #12148 and 
#11825
   
   Rewritten a bit:
   ```
     /**
      * The percentage of the deleted records in a data file that enforces a 
data file rewrite. If the
      * deletion ratio of a data file is greater or equal than this value, it 
will be rewritten
      * regardless of its file size determined by {@link #MIN_FILE_SIZE_BYTES} 
and {@link
      * #MAX_FILE_SIZE_BYTES}. If a file group contains a file that satisfies 
this condition, the file
      * group will be rewritten regardless of the number of files in the file 
group determined by
      * {@link #MIN_INPUT_FILES}.
      *
      * <p>Defaults to 0.3, which means that if the number of deleted records 
in a file reaches or
      * exceeds 30%, it may trigger the rewriting operation.
      */
   ```
   
   If you have more suggestions, I would be happy to apply them.
   
   
   



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: issues-unsubscr...@iceberg.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscr...@iceberg.apache.org
For additional commands, e-mail: issues-h...@iceberg.apache.org

Reply via email to