expire_snapshots
基本语法
在Iceberg中,每次写入、更新、删除、upsert、压缩操作都会生成新快照,同时保留旧数据和元数据,以支持快照隔离和时间旅行功能。expire_snapshots可用于移除不再需要的旧快照及其文件,更多元数据管理操作请参见Metadata management。
expire_snapshots会移除旧快照以及这些旧快照唯一需要的数据文件,意味着该操作绝不会移除仍被非过期快照所需要的文件。例如:
CALL prod.system.expire_snapshots('db.sample', TIMESTAMP '2021-06-30 00:00:00.000', 100); 相关参数介绍请参见表1。
| 参数 | 类型 | 说明 |
|---|---|---|
| table | string | 需要更新的表名,必须设置。 |
| older_than | timestamp | 此时间戳之前的快照将被移除,默认值为5天前。 |
| retain_last | int | 保留的祖先快照数量,默认值为1,与“older_than”设置的时间戳无关。 |
| max_concurrent_deletes | int | 用于删除文件操作的线程池大小,默认情况下,不使用线程池。 |
| stream_results | boolean | 当设置该参数为“true”时,删除文件将通过RDD分区发送到Spark驱动程序(默认情况下,所有文件都将发送到Spark驱动程序)。 建议将该参数设置为“true”,以防止Spark驱动程序因文件过大而发生内存溢出。 |
| snapshot_ids | array of long | 要过期的快照ID数组。 |
如果不设置older_than和retain_last,将使用表的过期属性,仍被分支或标签引用的快照不会被移除。默认情况下,分支和标签永不过期,但可通过表属性history.expire.max-ref-age-ms更改其保留策略,且主分支永不过期。
输出结果介绍请参见表2。