VACUUM
VACUUM
语句通过执行快照过期
注意
VACUUM
是事务性的,仅支持用于 Athena 引擎版本 3 中的 Apache Iceberg 表。
VACUUM
语句通过减少存储消耗来优化 Iceberg 表。有关使用 VACUUM
的更多信息,请参阅优化 Iceberg 表。请注意,由于 VACUUM
语句会对 Amazon S3 进行 API 调用,因此对向 Amazon S3 发出的相关请求会产生费用。
警告
如果您运行快照过期操作,则无法对过期快照进行时间旅行操作。
摘要
要删除 Iceberg 表不再需要的数据文件,请使用以下语法。
VACUUM [database_name
.]target_table
-
VACUUM
希望 Iceberg 数据位于 Amazon S3 文件夹中,而不是 Amazon S3 存储桶中。例如,如果 Iceberg 数据位于s3://amzn-s3-demo-bucket
/ 而不是s3://amzn-s3-demo-bucket/myicebergfolder/
,则VACUUM
语句会失败并显示错误消息GENERIC_INTERNAL_ERROR:文件系统位置中缺少路径:
。s3://amzn-s3-demo-bucket
-
为使
VACUUM
能够删除数据文件,查询执行角色必须对 Iceberg 表、元数据、快照和数据文件所在的存储桶拥有s3:DeleteObject
权限。如果该权限不存在,则VACUUM
查询将成功,但不会删除文件。 -
要在名称以下划线开头的表(例如
_mytable
)上运行VACUUM
,请将表名括在反引号中,如以下示例所示。如果在表名前面加上数据库名称,请不要将数据库名称括在反引号中。请注意,双引号不能代替反引号。这种行为是
VACUUM
特有的。对于以下划线开头的表名,CREATE
和INSERT INTO
语句不要求使用反引号。VACUUM `_mytable` VACUUM my_database.`_mytable`
执行的操作
VACUUM
执行以下操作:
-
删除超过
vacuum_max_snapshot_age_seconds
表属性指定时间的快照。默认情况下,该属性设置为 432000 秒(5 天)。 -
删除不在保留期限内且超过
vacuum_min_snapshots_to_keep
表属性指定数量的快照。默认 为 1。您可以在
CREATE TABLE
语句中指定这些表属性。创建表后,您可以使用 ALTER TABLE SET TBLPROPERTIES 语句对其进行更新。 -
删除所有由于快照删除而无法访问的元数据和数据文件。您可以通过设置
vacuum_max_metadata_files_to_keep
表属性来配置要保留的旧元数据文件的数量。默认值是 100。 -
删除超过
vacuum_max_snapshot_age_seconds
表属性中指定时间的孤立文件。孤立文件是表数据目录中不属于表状态的文件。
有关在 Athena 中创建和管理 Apache Iceberg 表的更多信息,请参阅 创建 Iceberg 表 和 管理 Iceberg 表。