iceberg快照删除的ExpireSnapshots
的接口的代码及注释。该接口用于从表中删除旧的快照,提供了一系列方法来控制过期快照的删除行为。通过调用不同的方法,可以设置要过期的快照ID、过期时间戳以及保留最近祖先快照的数量等。此外,还可以传递替代的删除实现和执行删除的ExecutorService。最后,可以使用cleanExpiredFiles
方法设置是否清理底层清单文件和数据文件
package org.apache.iceberg;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.function.Consumer;
/**
* 用于从表中删除旧快照的API。
*
* 此API累积快照删除并将新列表提交到表中。
* 此API不允许删除当前快照。 提交时,这些更改将应用于最新的表元数据。提交冲突将通过将更改应用于新的最新元数据并重新尝试提交来解 * 决。 有效快照不再使用的清单文件将被删除。过期的快照删除的数据文件将被删除。
* deleteWith(Consumer)可用于传递一个替代的删除方法。 apply()返回将要删除的快照的列表
*/
public interface ExpireSnapshots extends PendingUpdate<List<Snapshot>> {
/**
* 过期指定id标识的{@link Snapshot}。
*
* @param snapshotId 要过期的快照的长整型id
* @return 用于方法链式调用的对象本身
*/
ExpireSnapshots expireSnapshotId(long snapshotId);
/**
* 过期早于给定时间戳的所有快照。
*
* @param timestampMillis 长整型时间戳,由{@link System#currentTimeMillis()}返回
* @return 用于方法链式调用的对象本身
*/
ExpireSnapshots expireOlderThan(long timestampMillis);
/**
* 保留当前快照的最近祖先快照。
*
* <p>如果一个快照由于比过期时间戳更早而被过期,但是它是当前状态的{@code numSnapshots}个最近祖先之一,那么它将被保留。这不会导致以id明确标识的快照过期。
*
* <p>如果快照在并发添加时可能保留多于{@code numSnapshots}个祖先。如果当前表状态没有那么多快照,则可能保留少于{@code numSnapshots}个祖先。
*
* @param numSnapshots 要保留的快照数量
* @return 用于方法链式调用的对象本身
*/
ExpireSnapshots retainLast(int numSnapshots);
/**
* 传递替代的删除实现,将用于清单文件和数据文件。
*
* <p>不再被有效快照使用的清单文件将被删除。已过期的快照删除的数据文件也将被删除。
*
* <p>如果不调用此方法,仍然会删除不必要的清单文件和数据文件。
*
* @param deleteFunc 将被调用以删除清单文件和数据文件的函数
* @return 用于方法链式调用的对象本身
*/
ExpireSnapshots deleteWith(Consumer<String> deleteFunc);
/**
* 传递替代的执行删除的ExecutorService。
*
* <p>不再被有效快照使用的清单文件将被删除。已过期的快照删除的数据文件也将被删除。
*
* <p>如果不调用此方法,仍然会使用单线程的ExecutorService删除不必要的清单文件和数据文件。
*
* @param executorService 用于并行化删除清单文件和数据文件任务的ExecutorService
* @return 用于方法链式调用的对象本身
*/
ExpireSnapshots executeDeleteWith(ExecutorService executorService);
/**
* 传递替代的计划ExecutorService。如果不调用此方法,将使用默认的工作线程池。
*
* @param executorService 用于计划的ExecutorService
* @return 用于方法链式调用的对象本身
*/
ExpireSnapshots planWith(ExecutorService executorService);
/**
* 允许在不清理底层清单文件或数据文件的情况下过期快照。
*
* <p>允许控制删除可能更高效地使用分布式框架通过操作API删除的数据和清单文件。
*
* @param clean 设置为false将跳过删除过期的清单文件和文件
* @return 用于方法链式调用的对象本身
*/
ExpireSnapshots cleanExpiredFiles(boolean clean);
}