

# 删除孤立文件
<a name="orphan-file-deletion"></a>

 AWS Glue Data Catalog 允许删除 Iceberg 表中的孤立文件。孤立文件是指存在于指定表位置下的 Amazon S3 数据来源中，未被 Iceberg 表元数据跟踪，且超过配置的时效阈值的未引用文件。这些孤立文件可能因压缩、分区删除或表重写等操作失败而不断堆积，占用不必要的存储空间。

AWS Glue 中的孤立文件删除优化器会扫描表元数据和实际数据文件，识别孤立文件，然后将其删除以回收存储空间。优化器仅会删除在优化器创建日期之后创建的且同时符合配置的删除条件的文件。在优化器创建日期之前或之日创建的文件永远不会删除。

**孤立文件删除逻辑**

1. 日期检查：将文件创建日期与优化器创建日期进行比较。如果文件早于或等于优化器创建日期，则会跳过该文件。

1. 优化器配置检查：如果文件晚于优化器创建日期，则根据配置的时效阈值对文件进行评估。如果文件符合删除条件，优化器会将其删除。如果文件不符合条件，则跳过该文件。

 可以通过在 Data Catalog 中创建孤立文件删除表优化器来启动孤立文件删除。

**重要**  
 默认情况下，删除孤立文件会评估整个 AWS Glue 表位置上的文件。虽然可以使用 API 参数配置子前缀来限制评估范围，但必须确保表位置不包含其他数据来源或表的文件。如果您的表位置与其他数据源重叠，服务可能会将不相关的文件识别为孤立文件并删除。

**Topics**
+ [启用孤立文件删除功能](enable-orphan-file-deletion.md)
+ [更新孤立文件删除优化器](update-orphan-file-deletion.md)
+ [禁用孤立文件删除功能](disable-orphan-file-deletion.md)

# 启用孤立文件删除功能
<a name="enable-orphan-file-deletion"></a>

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

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

**启用孤立文件删除功能**

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

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

1. 在**表**页面上，选择要启用孤立文件删除功能的 Iceberg 表。

   选择该页面下半部分的**表优化**选项卡，然后选择**启用**，并从**操作**中选择**孤立文件删除**。

   您还可以从该页面右上角的**操作**菜单中，选择**优化**下的**启用**。

1. 在**启用优化**页面的**优化选项**下，选择**孤立文件删除**。

1. 如果您选择使用**默认设置**，则所有孤立文件将在 3 天后删除。如果要将孤立文件保留特定的天数，请选择**自定义设置**。

1. 然后选择具有删除孤立文件所需权限的 IAM 角色。

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

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

1. 如果您选择**自定义设置**，请在**孤立文件删除配置**下，输入文件删除之前要保留的天数。您也可以指定两次连续优化器运行的时间间隔。默认值为 24 小时。

1. 选择**启用优化**。

------
#### [ AWS CLI ]

 要在 AWS Glue 中为 Iceberg 表启用孤立文件删除功能，需要创建一个 `orphan_file_deletion` 类型的表优化器并将 `enabled` 字段设置为 true。要使用 AWS CLI 为 Iceberg 表创建孤立文件删除优化器，可以使用以下命令：

```
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"}, "orphanFileDeletionConfiguration":{"icebergConfiguration":{"orphanFileRetentionPeriodInDays":3, "location":'S3 location'}}}'\
 --type orphan_file_deletion
```

 此命令将为指定的 Iceberg 表创建孤立文件删除优化器。关键参数如下：
+ roleArn – 具有访问 S3 存储桶和 Glue 资源所需权限的 IAM 角色的 ARN。
+ enabled – 设置为 true 将会启用优化器
+ orphanFileRetentionPeriodInDays – 孤立文件删除之前要保留的天数（至少 1 天）。
+ type – 设置为 orphan\$1file\$1deletion 将会创建孤立文件删除优化器。

 该表优化器创建后，将会定期运行孤立文件删除（如果保持启用状态，则会每天删除一次）。您可以使用 `list-table-optimizer-runs` API 来检查运行情况。孤立文件删除作业会识别并删除表的 Iceberg 元数据中未跟踪的文件。

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

调用 [CreateTableOptimizer](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-table-optimizers.html#aws-glue-api-table-optimizers-CreateTableOptimizer) 操作可创建特定表的孤立文件删除优化器。

------

# 更新孤立文件删除优化器
<a name="update-orphan-file-deletion"></a>

 您可以使用 AWS Glue 控制台、AWS CLI 或 `UpdateTableOptimizer` 操作来修改孤立文件删除优化器的配置，例如更改孤立文件的保留期或优化器使用的 IAM 角色。

------
#### [ AWS 管理控制台 ]

**更新孤立文件删除优化器**

1.  选择**数据目录**，然后选择**表**。从表列表中，选择要更新孤立文件删除优化器配置的表。

1. 在**表详细信息**页面的下半部分，选择**表优化**，然后选择**编辑**。

1.  然后在**编辑优化**页面上，进行所需的更改。

1.  选择**保存**。

------
#### [ AWS CLI ]

 您可以在 AWS Glue 中使用 `update-table-optimizer` 调用来更新中的孤立文件删除优化器。这让您能够修改 `icebergConfiguration` 字段中的 `OrphanFileDeletionConfiguration`，您可以在该字段中更新 `OrphanFileRetentionPeriodInDays` 以设置孤立文件的保留天数，以及指定要从中删除孤立文件的 Iceberg 表位置。

```
aws glue update-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"},"orphanFileDeletionConfiguration":{"icebergConfiguration":{"orphanFileRetentionPeriodInDays":5}}}' \
 --type orphan_file_deletion
```

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

调用 [UpdateTableOptimizer](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-table-optimizers.html#aws-glue-api-table-optimizers-UpdateTableOptimizer) 操作可更新表的孤立文件删除优化器。

------

 

# 禁用孤立文件删除功能
<a name="disable-orphan-file-deletion"></a>

 您可以使用 AWS Glue 控制台或 AWS CLI 来为特定的 Apache Iceberg 表禁用孤立文件删除优化器。

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

**禁用删除孤立文件功能**

1. 选择**数据目录**，然后选择**表**。从表列表中，选择要禁用孤立文件删除优化器的表。

1. 在**表详细信息**页面的下半部分，选择**表优化**选项卡。

1. 选择**操作**，然后选择**禁用**、**孤立文件删除**。

   您也可以从**操作**菜单中选择**优化**下的**禁用**。

1.  在确认消息页面选择**禁用**。您可以在以后重新启用孤立文件删除优化器。

    确认之后，孤立文件删除优化器将被禁用，并且孤立文件删除的状态将恢复为 `Not enabled`。

------
#### [ AWS CLI ]

将以下示例中的账户 ID 替换为有效的 AWS 账户 ID。将数据库名称和表名称替换为实际的 Iceberg 表名称和数据库名称。将 `roleArn` 替换为具有禁用优化器所需权限的 IAM 角色的 AWS 资源名称（ARN）和实际名称。

```
aws glue update-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":'false'}'\ 
  --type orphan_file_deletion
```

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

调用 [UpdateTableOptimizer](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-table-optimizers.html#aws-glue-api-table-optimizers-UpdateTableOptimizer) 操作来为特定的表禁用快照保留优化器。

------