

# 表维护
<a name="s3-tables-maintenance"></a>

S3 表类数据存储服务提供维护操作，以增强各个表的管理和性能。默认情况下为表存储桶中的所有表启用以下选项。可以通过为 S3 表指定维护配置文件来编辑或禁用这些选项。

编辑此配置需要 `s3tables:GetTableMaintenanceConfiguration` 和 `s3tables:PutTableMaintenanceConfiguration` 权限。

**注意**  
您可以通过 CloudTrail 日志来跟踪 S3 表类数据存储服务对表的自动维护操作，有关更多信息，请参阅 [S3 表类数据存储服务维护的 CloudTrail 管理事件](s3-tables-logging.md#s3-tables-maintenance-events)。

**Topics**
+ [压缩](#s3-tables-maintenance-compaction)
+ [快照管理](#s3-tables-maintenance-snapshot)
+ [注意事项和限制](#s3-tables-considerations-see-more)

## 压缩
<a name="s3-tables-maintenance-compaction"></a>

压缩是在表级别配置的，可将多个较小的对象组合成更少、更大的对象，以提高 Apache Iceberg 查询性能。当组合对象时，压缩还会应用表中行级删除的效果。

默认情况下，对所有表启用压缩功能，默认目标文件大小为 512 MB，或者您指定的自定义值介于 64 MB 到 512 MB 之间。压缩后的文件将作为表的最新快照写入。

**注意**  
仅 Apache Parquet、Avro 和 ORC 文件类型支持压缩。

### 压缩策略
<a name="s3-tables-maintenance-compaction-strategies"></a>

您可以从多种压缩策略中进行选择，这些策略可以进一步提高查询性能，具体取决于查询模式和表排序顺序。

S3 表类数据存储服务现在对于表支持以下压缩策略：
+ **Auto（默认）**
  + Amazon S3 根据表排序顺序选择最佳压缩策略。这是适用于所有表的默认压缩策略。
  + 对于在元数据中具有已定义的排序顺序的表，`auto` 将自动应用 `sort` 压缩。
  + 对于没有排序顺序的表，`auto` 将默认为使用 `binpack` 压缩。
+ **Binpack**
  + 将小文件组合成较大的文件（目标大小通常超过 100 MB），同时应用任何待执行的删除。这是适用于未排序表的默认压缩策略。
+ **排序**
  + 在压缩期间根据指定的列整理数据，这些列自动按层次结构排序，从而提高筛选出的操作的查询性能。当查询经常会筛选特定列时，建议使用此策略。当您使用此策略时，如果在表属性中定义了 `sort_order`，S3 表类数据存储服务会自动对列应用分层排序。
+ **Z-order**
  + 通过将多个属性混合成一个可用于排序的标量值来优化数据的组织，从而实现跨多个维度高效查询。需要同时跨多个维度查询数据时，建议使用此策略。此策略要求您在 Iceberg 表属性中使用 `sort_order` 表属性定义排序顺序。

压缩将产生额外费用。`z-order` 和 `sort` 压缩策略的成本可能高于 `binpack`。有关更多信息，请参阅 [Amazon S3 定价](https://aws.amazon.com/s3/pricing/)中的定价信息。

### 压缩示例
<a name="tables-compaction-examples"></a>

以下示例展示了表压缩的配置。

**使用 AWS CLI 配置压缩目标文件大小**  
最小目标压缩文件大小为 64 MB；最大值为 512 MB。  
以下示例将使用 `PutTableMaintenanceConfiguration` API 将目标文件大小更改为 256 MB。  

```
aws s3tables put-table-maintenance-configuration \
   --table-bucket-arn arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-bucket1 \
   --type icebergCompaction \
   --namespace mynamespace \
   --name testtable \
   --value='{"status":"enabled","settings":{"icebergCompaction":{"targetFileSizeMB":256}}}'
```
有关更多信息，请参阅《AWS CLI Command Reference》**中的 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3tables/put-table-maintenance-configuration.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3tables/put-table-maintenance-configuration.html)。

**使用 AWS CLI 配置压缩策略**  
以下示例使用 `PutTableMaintenanceConfiguration` API 将压缩策略更改为 `sort`。设置压缩时，您可以从以下压缩策略中进行选择：`auto`、`binpack`、`sort` 或 `z-order`  
要将压缩策略设置为 `sort` 或 `z-order`，需要满足以下先决条件：  
+ 在 Iceberg 表属性中定义的排序顺序。
+ `s3tables:GetTableData` 权限。

```
aws s3tables put-table-maintenance-configuration \
   --table-bucket-arn arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-table-bucket \
   --type icebergCompaction \
   --namespace mynamespace \
   --name testtable \
   --value='{"status":"enabled","settings":{"icebergCompaction":{"strategy":"sort"}}}'
```
有关更多信息，请参阅《AWS CLI Command Reference》**中的 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3tables/put-table-maintenance-configuration.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3tables/put-table-maintenance-configuration.html)。

**使用 AWS CLI 禁用压缩**  
以下示例将使用 `PutTableMaintenanceConfiguration` API 禁用压缩。  

```
aws s3tables put-table-maintenance-configuration \
   --table-bucket-arn arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-table-bucket \
   --type icebergCompaction \
   --namespace mynamespace \
   --name testtable \
   --value='{"status":"disabled","settings":{"icebergCompaction":{"targetFileSizeMB":256}}}'
```
有关更多信息，请参阅《AWS CLI Command Reference》**中的 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3tables/put-table-maintenance-configuration.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3tables/put-table-maintenance-configuration.html)。

## 快照管理
<a name="s3-tables-maintenance-snapshot"></a>

快照管理确定表的活动快照的数量。这基于 `MinimumSnapshots`（默认为 1）和 `MaximumSnapshotAge`（默认为 120 小时）。快照管理会根据这些配置使表快照到期和移除表快照。

快照到期后，Amazon S3 会将仅由该快照引用的任何对象标记为非当前对象。这些非当前对象将在由未引用文件移除策略中的 `NoncurrentDays` 属性指定的天数后被删除。

**注意**  
删除非当前对象是永久性的，无法恢复这些对象。

要查看或恢复已标记为非当前对象的对象，必须联系 AWS 支持。有关联系 AWS 支持 的信息，请参阅[联系 AWS](https://aws.amazon.com/contact-us/) 或 [AWS 支持 文档](https://aws.amazon.com/documentation/aws-support/)。

快照管理根据仅对表的引用来确定要从该表中删除的对象。从表外部对这些对象进行的引用将不会阻止快照管理删除这些对象。

**注意**  
快照管理不支持您在 `metadata.json` 文件中或通过 `ALTER TABLE SET TBLPROPERTIES` SQL 命令配置为 Iceberg 表属性的保留值，包括基于分支或标签的保留。当您配置基于分支或标签的保留策略，或者在 `metadata.json` 文件上配置的保留策略长度超过通过 `PutTableMaintenanceConfiguration` API 配置的值时，快照管理将被禁用。在这些情况下，S3 不会使快照到期或移除快照，您需要手动删除快照或从 Iceberg 表中移除属性，以避免产生存储费用。

只能在表级配置快照管理。有关更多信息，请参阅 [Amazon S3 定价](https://aws.amazon.com/s3/pricing/)中的定价信息。

### 快照管理示例
<a name="tables-snapshot-examples"></a>

以下示例展示了表快照管理的配置。

**使用 AWS CLI 配置快照管理**  
以下示例将使用 `PutTableMaintenanceConfiguration` API 将 `MinimumSnapshots` 设置为 10，并将 `MaximumSnapshotAge` 设置为 2500 小时。  

```
aws s3tables put-table-maintenance-configuration \
--table-bucket-arn arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-table-bucket \
--namespace my_namespace \
--name my_table \
--type icebergSnapshotManagement \
--value '{"status":"enabled","settings":{"icebergSnapshotManagement":{"minSnapshotsToKeep":10,"maxSnapshotAgeHours":2500}}}'
```

**使用 AWS CLI 禁用快照管理**  
以下示例将使用 `PutTableMaintenanceConfiguration` API 禁用快照管理。  

```
aws s3tables put-table-maintenance-configuration \
--table-bucket-arn arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-table-bucket \
--namespace my_namespace \
--name my_table \
--type icebergSnapshotManagement \
--value '{"status":"disabled","settings":{"icebergSnapshotManagement":{"minSnapshotsToKeep":1,"maxSnapshotAgeHours":120}}}'
```

有关更多信息，请参阅《AWS CLI Command Reference》**中的 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3tables/put-table-maintenance-configuration.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3tables/put-table-maintenance-configuration.html)。

## 注意事项和限制
<a name="s3-tables-considerations-see-more"></a>

要详细了解压缩和快照管理的其它注意事项和限制，请参阅[维护任务的注意事项和限制](s3-tables-considerations.md)。

**注意**  
S3 表类数据存储服务应用的 parquets row-group-default 为 128 MB。