

# 启用快照保留优化器
<a name="enable-snapshot-retention"></a>

 您可以在 Data Catalog 中使用 Amazon Glue 控制台、Amazon CLI 或 Amazon API 为 Apache Iceberg 表启用快照保留优化器。对于新表，您可以在创建表时选择 Apache Iceberg 表格式并启用快照保留优化器。新表会默认禁用快照保留功能。

------
#### [ Console ]

**启用快照保留优化器**

1.  打开 Amazon Glue 控制台（[https://console.aws.amazon.com/glue/](https://console.amazonaws.cn/glue/)），然后以数据湖管理员、表创建者或已被授予表的 `glue:UpdateTable` 和 `lakeformation:GetDataAccess` 权限的用户身份登录。

1. 在导航窗格的**数据目录**下，请选择**表**。

1. 在**表**页面上，选择要为其启用快照保留优化器的 Iceberg 表，然后在**操作**菜单下，选择**优化**下的**启用**。

   您也可以通过选中该表并打开**表详细信息**页面来启用优化。选择页面下半部的**表优化**选项卡，然后选择**启用快照保留**。

1. **启用优化**页面的**优化配置**下有两个选项：**使用默认设置**或**自定义设置**。如果您选择使用默认设置，则 Amazon Glue 会使用 Iceberg 表配置中定义的属性来确定快照保留期和要保留的快照数量。如果没有此配置，Amazon Glue 会将一个快照保留五天，并删除与过期快照关联的文件。

1.  然后选择 Amazon Glue 可以代表您代入以运行优化器的 IAM 角色。有关 IAM 角色所需权限的详细信息，请参阅[表优化的先决条件](optimization-prerequisites.md)部分。

   按照以下步骤更新一个现有的 IAM 角色：

   1.  要更新 IAM 角色的权限策略，请在 IAM 控制台中转到用于运行压缩的 IAM 角色。

   1.  在添加权限部分中，选择“创建策略”。在新打开的浏览器窗口中，创建将用于您的角色的新策略。

   1. 在“创建策略”页面上，选择 JSON 选项卡。将“先决条件”中显示的 JSON 代码复制到策略编辑器字段中。

1. 如果您希望手动设置**快照保留配置**的值，请选择**自定义设置**。  
![显示“启用保留 > 自定义设置”选项的 Apache Iceberg 表详细信息页面。](http://docs.amazonaws.cn/glue/latest/dg/images/table-enable-retention.png)

1. 选中**将选定的 IAM 角色应用于选定的优化器**选项，可将单个 IAM 角色用于所有已启用的优化器。

1. 如果您有安全策略配置，其中 Iceberg 表优化器需要从特定的虚拟私有云（VPC）访问 Amazon S3 存储桶，则请创建 Amazon Glue 网络连接或使用现有网络连接。

   如果您尚未设置 Amazon Glue VPC 连接，则请使用 Amazon Glue 控制台或 Amazon CLI/SDK 按照[为连接器创建连接](https://docs.amazonaws.cn/glue/latest/dg/creating-connections.html)部分中的步骤创建一个新连接。

1. 然后在**快照保留配置**下，选择使用 [Iceberg 表配置](https://iceberg.apache.org/docs/1.5.2/configuration/#table-behavior-properties)中指定的值，或者为快照保留期（history.expire.max-snapshot-age-ms）和要保留的最小快照数量（history.expire.min-snapshots-to-keep）指定自定义值，以及连续快照删除作业运行之间的小时数。

1.  选择**删除关联文件**以在表优化器从表元数据中删除较早快照时删除底层文件。

    如果未选中此选项，则在从表元数据中移除较早的快照时，其关联文件将作为孤立文件保留在存储中。

1. 阅读警告声明，然后选择**我确认**以继续操作。
**注意**  
 在 Data Catalog 中，快照保留优化器遵循由分支和标签级别保留策略控制的生命周期。有关更多信息，请参阅 Iceberg 文档中的 [Branching and tagging](https://iceberg.apache.org/docs/latest/branching/#overview) 部分。

1. 检查配置，然后选择**启用优化**。

   等待几分钟，以便保留优化器运行并根据配置使较早的快照过期。

------
#### [ Amazon CLI ]

 要在 Amazon Glue 中为新 Iceberg 表启用快照保留功能，需要创建一个 `retention` 类型的表优化器，并将 `table-optimizer-configuration` 中的 `enabled` 字段设置为 `true`。您可以使用 Amazon CLI 命令 `create-table-optimizer` 或 `update-table-optimizer` 来完成此操作。此外，您需要根据自己的需求指定保留配置字段，例如 `snapshotRetentionPeriodInDays` 和 `numberOfSnapshotsToRetain`。

以下示例演示了启用快照保留优化器的方法。将账户 ID 替换为有效的 Amazon 账户 ID。将数据库名称和表名称替换为实际的 Iceberg 表名称和数据库名称。将 `roleArn` 替换为具有运行快照保留优化器所需权限的 IAM 角色的 Amazon 资源名称（ARN）和名称。

```
aws glue create-table-optimizer \
  --catalog-id {{123456789012}} \
  --database-name {{iceberg_db}} \
  --table-name {{iceberg_table}} \
  --table-optimizer-configuration '{"roleArn":"arn:aws:iam::{{123456789012}}:role/{{optimizer_role}}","enabled":'true', "vpcConfiguration":{
"glueConnectionName":{{"glue_connection_name"}}}, "retentionConfiguration":{"icebergConfiguration":{"snapshotRetentionPeriodInDays":{{7}},"numberOfSnapshotsToRetain":{{3}},"cleanExpiredFiles":{{'true'}}}}}'\
  --type retention
```

 此命令会为给定目录、数据库和区域中的指定 Iceberg 表创建保留优化器。table-optimizer-configuration 会指定要使用的 IAM 角色 ARN，启用该优化器并设置保留配置。在此示例中，它会将快照保留 7 天，至少保留 3 个快照，并清理已过期的文件。
+  snapshotRetentionPeriodInDays – 快照过期前将会保留的天数。默认值为 `5`。
+ numberOfSnapshotsToRetain – 要保留的最小快照数量，即使已超过保留期亦不例外。默认值为 `1`。
+ cleanExpiredFiles – 这是一个布尔值，指示是否在快照过期后删除已过期的数据文件。默认值为 `true`。

   如果设置为 true，则会从表的元数据中移除较早的快照，并删除其底层文件。如果将此参数设置为 false，则会从表的元数据中移除较早的快照，但其底层文件仍作为孤立文件保留在存储中。

------
#### [ Amazon API ]

调用 [CreateTableOptimizer](https://docs.amazonaws.cn/glue/latest/dg/aws-glue-api-table-optimizers.html#aws-glue-api-table-optimizers-CreateTableOptimizer) 操作为表启用快照保留优化器。

------

启用压缩后，**表优化**选项卡会显示以下压缩详细信息（大约 15–20 分钟后）：

开始时间  
快照保留优化器启动的时间。该值是一个采用 UTC 时间格式的时间戳。

运行时间  
该时间指示优化器完成任务所花费的时间。该值是一个采用 UTC 时间格式的时间戳。

Status  
优化器运行的状态。值为成功或失败。

已删除数据文件数  
已删除的文件总数。

已删除清单文件数  
已删除的清单文件总数。

已删除清单列表数  
已删除的清单列表总数。