View a markdown version of this page

表维护 - Amazon Simple Storage Service

表维护

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

编辑此配置需要 s3tables:GetTableMaintenanceConfigurations3tables:PutTableMaintenanceConfiguration 权限。

注意

您可以通过 CloudTrail 日志来跟踪 S3 表类数据存储服务对表的自动维护操作,有关更多信息,请参阅 S3 表类数据存储服务维护的 CloudTrail 管理事件

压缩

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

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

注意

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

压缩策略

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

S3 表类数据存储服务现在对于表支持以下压缩策略:

  • Auto(默认)

    • Amazon S3 根据表排序顺序选择最佳压缩策略。这是适用于所有表的默认压缩策略。

    • 对于在元数据中具有已定义的排序顺序的表,auto 将自动应用 sort 压缩。

    • 对于没有排序顺序的表,auto 将默认为使用 binpack 压缩。

  • Binpack

    • 将小文件组合成较大的文件(目标大小通常超过 100 MB),同时应用任何待执行的删除。这是适用于未排序表的默认压缩策略。

  • 排序

    • 在压缩期间根据指定的列整理数据,这些列自动按层次结构排序,从而提高筛选出的操作的查询性能。当查询经常会筛选特定列时,建议使用此策略。当您使用此策略时,如果在表属性中定义了 sort_order,S3 表类数据存储服务会自动对列应用分层排序。

  • Z-order

    • 通过将多个属性混合成一个可用于排序的标量值来优化数据的组织,从而实现跨多个维度高效查询。需要同时跨多个维度查询数据时,建议使用此策略。此策略要求您在 Iceberg 表属性中使用 sort_order 表属性定义排序顺序。

压缩将产生额外费用。z-ordersort 压缩策略的成本可能高于 binpack。有关更多信息,请参阅 Amazon S3 定价中的定价信息。

压缩示例

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

使用 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》中的 put-table-maintenance-configuration

使用 AWS CLI 配置压缩策略

以下示例使用 PutTableMaintenanceConfiguration API 将压缩策略更改为 sort。设置压缩时,您可以从以下压缩策略中进行选择:autobinpacksortz-order

注意

要将压缩策略设置为 sortz-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》中的 put-table-maintenance-configuration

使用 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》中的 put-table-maintenance-configuration

快照管理

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

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

注意

删除非当前对象是永久性的,无法恢复这些对象。

要查看或恢复已标记为非当前对象的对象,必须联系 AWS 支持。有关联系 AWS 支持 的信息,请参阅联系 AWSAWS 支持 文档

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

注意

快照管理不支持您在 metadata.json 文件中或通过 ALTER TABLE SET TBLPROPERTIES SQL 命令配置为 Apache Iceberg 表属性的保留值。如果存在以下任一情况,则整个表的快照管理将失败,并且 Amazon S3 不会使任何快照过期或将其移除:

  • 用户定义的标签或分支:如果表上存在任何用户定义的标签或分支,则整个表的快照管理将失败。即使标签或分支的保留期很短,这也适用。要还原自动快照过期,请从表中移除所有用户定义的标签和分支。

  • Iceberg 快照保留表属性:如果 history.expire.max-snapshot-age-mshistory.expire.min-snapshots-to-keep 属性设置为 Apache Iceberg 表属性,则无论配置的值如何,整个表的快照管理都将失败。要还原自动快照过期,请移除以下属性:

    ALTER TABLE mydb.mytable UNSET TBLPROPERTIES ('history.expire.max-snapshot-age-ms'); ALTER TABLE mydb.mytable UNSET TBLPROPERTIES ('history.expire.min-snapshots-to-keep');

要诊断快照管理故障,请使用 GetTableMaintenanceJobStatus API 或运行以下 AWS CLI 命令。如果快照管理失败,响应将包含 FAILED 状态和一条描述失败原因的消息。

aws s3tables get-table-maintenance-job-status \ --table-bucket-arn arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-table-bucket \ --namespace my_namespace \ --name my_table

只能在表级配置快照管理。有关更多信息,请参阅 Amazon S3 定价中的定价信息。

快照管理示例

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

使用 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》中的 put-table-maintenance-configuration

注意事项和限制

要详细了解压缩和快照管理的其它注意事项和限制,请参阅维护任务的注意事项和限制

注意

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