

# 创建元数据表配置
<a name="metadata-tables-create-configuration"></a>

要生成 Amazon S3 元数据并将其存储在完全托管式 Apache Iceberg 元数据表中，需要为通用存储桶创建元数据表配置。Amazon S3 设计为持续更新元数据表，以反映对数据的最新更改，只要配置在存储桶上处于活动状态即可。此外，Amazon S3 会持续优化您的元数据表，以有助于降低存储成本并提高分析查询性能。

对于每个通用存储桶，可以创建一个元数据表配置，其中包含两个互补的元数据表：
+ **日记表**：默认情况下，元数据表配置包含一个*日记表*，用于捕获存储桶中的对象所发生的事件。日记表近乎实时地记录对数据所做的更改，有助于您识别上传到存储桶的新数据、跟踪最近删除的对象、监控生命周期转换等。日记表记录新对象以及对于对象及其元数据的更新（那些需要 `PUT` 或 `DELETE` 操作的更新）。

  日记表仅捕获在您创建元数据表配置后发生的更改事件（例如上传、更新和删除）的元数据。由于此表是可查询的，因此可以通过简单的 SQL 查询来审计对存储桶的更改。

  每个元数据表配置都需要日记表。（在 S3 元数据的初始版本中，日记表称为“元数据表”。）

  有关在日记表中存储哪些数据的更多信息，请参阅 [S3 元数据日记表架构](metadata-tables-schema.md)。

  为了有助于最大限度地降低存储成本，可以选择启用日记表记录过期。有关更多信息，请参阅 [使日记表记录过期](metadata-tables-expire-journal-table-records.md)。
+ **实时清单表**：（可选）可以将*实时清单表*添加到元数据表配置中。实时清单表提供存储桶中所有对象及其版本的简单、可查询的清单，以便您可以确定数据的最新状态。

  可以使用实时清单表，通过识别要为各种工作负载处理的对象，来简化和加快业务工作流程和大数据作业。例如，可以查询实时清单表来查找存储在特定存储类别中的所有对象、带有特定标签的所有对象，以及未通过使用 AWS Key Management Service（AWS KMS）密钥的服务器端加密（SSE-KMS）进行加密的所有对象等。

  当您为元数据表配置启用实时清单表时，该表将经历一个称为*回填*的过程，在这一过程中，Amazon S3 扫描通用存储桶，以检索存储桶中存在的所有对象的初始元数据。根据存储桶中的对象数量，此过程可能需要若干分钟（至少 15 分钟）到几小时。完成回填过程后，实时清单表的状态将从**正在回填**更改为**活跃**。完成回填后，对于对象的更新通常会在一小时内反映在实时清单表中。

  您需要为回填实时清单表付费。如果通用存储桶包含超过十亿个对象，则还需要为实时清单表支付每月费用。有关更多信息，请参阅 [Amazon S3 定价](https://aws.amazon.com/s3/pricing/)。

  有关在实时清单表中存储哪些数据的更多信息，请参阅 [S3 元数据实时清单表架构](metadata-tables-inventory-schema.md)。

元数据表具有以下 Amazon 资源名称（ARN）格式，其中包括元数据表的表 ID：

`arn:aws:s3tables:region-code:account-id:bucket/aws-s3/table/table-id`

例如，美国东部（弗吉尼亚州北部）区域中的元数据表具有如下所示的 ARN：

`arn:aws:s3tables:us-east-1:111122223333:bucket/aws-s3/table/a12bc345-67d8-912e-3456-7f89123g4h56`

日记表具有名称 `journal`，而实时清单表具有名称 `inventory`。

创建元数据表配置时，元数据表存储在 AWS 托管式表存储桶中。您的账户和同一区域中的所有元数据表配置都存储在单个 AWS 托管式表存储桶中。这些 AWS 托管式表存储桶命名为 `aws-s3`，并具有以下 Amazon 资源名称（ARN）格式：

`arn:aws:s3tables:region:account_id:bucket/aws-s3`

例如，如果账户 ID 为 123456789012，而通用存储桶位于美国东部（弗吉尼亚州北部）(`us-east-1`)，则 AWS 托管式表存储桶也将在美国东部（弗吉尼亚州北部）(`us-east-1`) 创建并具有以下 ARN：

`arn:aws:s3tables:us-east-1:123456789012:bucket/aws-s3`

默认情况下，AWS 托管式表存储桶通过使用 Amazon S3 托管式密钥的服务器端加密（SSE-S3）进行加密。创建第一个元数据配置后，可以将 AWS 托管式表存储桶的默认加密设置设为使用具有 AWS Key Management Service（AWS KMS）密钥的服务器端加密（SSE-KMS）。有关更多信息，请参阅 [Encryption for AWS managed table buckets](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-aws-managed-buckets.html#aws-managed-buckets-encryption) 和[在表存储桶中指定具有 AWS KMS 密钥的服务器端加密（SSE-KMS）](s3-tables-kms-specify.md)。

在 AWS 托管式表存储桶中，配置的元数据表通常存储在命名空间中，命名格式如下：

`b_general-purpose-bucket-name`

有关元数据表命名空间的更多信息，请参阅[元数据表的工作原理](metadata-tables-overview.md#metadata-tables-how-they-work)。

创建元数据表配置时，可以选择通过使用 AWS Key Management Service（AWS KMS）密钥的服务器端加密（SSE-KMS）来加密 AWS 托管式元数据表。如果您选择使用 SSE-KMS，则必须提供与通用存储桶位于同一区域的客户自主管理型 KMS 密钥。只能在创建表的过程中为表设置加密类型。创建 AWS 托管式表后，无法更改其加密设置。要为元数据表指定 SSE-KMS，您必须具有特定的权限。有关更多信息，请参阅 [SSE-KMS 的权限](metadata-tables-permissions.md#metadata-kms-permissions)。

元数据表的加密设置优先于默认的存储桶级加密设置。如果不为表指定加密，它将继承存储桶中的默认加密设置。

AWS 托管式表存储桶不计入 S3 表类数据存储服务配额。有关使用 AWS 托管式表存储桶和 AWS 托管式表的更多信息，请参阅 [Working with AWS managed table buckets](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-aws-managed-buckets.html)。

您可以使用 Amazon S3 控制台、AWS Command Line Interface（AWS CLI）、AWS SDK 或 Amazon S3 REST API 创建元数据表配置。

**注意**  
如果您在 2025 年 7 月 15 日之前创建了 S3 元数据配置，我们建议您删除并重新创建配置，以便您可以使日记表记录过期并创建清单表。有关更多信息，请参阅 [对在 2025 年 7 月 15 日之前创建的元数据配置启用清单表](#metadata-tables-migration)。
如果您已删除元数据表配置，并且想要为同一个通用存储桶重新创建配置，则必须先从 AWS 托管式表存储桶中手动删除旧的日记表和清单表。否则，创建新的元数据表配置将失败，因为这些表已经存在。要删除元数据表，请参阅[删除元数据表](metadata-tables-delete-table.md#delete-metadata-table-procedure)。  
删除元数据表配置仅删除配置。即使您删除元数据表配置，AWS 托管式表存储桶和元数据表也仍然存在。

**先决条件**  
在创建元数据表配置之前，请确保已满足以下先决条件：
+ 在创建元数据表配置之前，确保您拥有创建和管理元数据表所必需的 AWS Identity and Access Management（IAM）权限。有关更多信息，请参阅 [为配置元数据表设置权限](metadata-tables-permissions.md)。
+ 如果计划使用 Amazon Athena 或其它 AWS 查询引擎来查询元数据表，请确保将 AWS 托管式表存储桶与 AWS 分析服务集成。有关更多信息，请参阅 [将 Amazon S3 表类数据存储服务与 AWS 分析服务集成](s3-tables-integrating-aws.md)。

  如果已经在该区域中集成了现有的表存储桶，则也会自动集成 AWS 托管式表存储桶。要确定该区域中表存储桶的集成状态，请打开 Amazon S3 控制台，然后在左侧导航窗格中选择**表存储桶**。在**与 AWS 分析服务集成**下，检查区域以及集成状态是否显示为**已启用**。

## 创建元数据表配置
<a name="create-metadata-config-procedure"></a>

### 使用 S3 控制台
<a name="create-metadata-config-console"></a>

**创建元数据表配置**

在创建元数据表配置之前，请确保您已查看并满足[先决条件](#metadata-table-config-prereqs)，并且已经查看了[元数据表限制和局限性](metadata-tables-restrictions.md)。

1. 登录到 AWS 管理控制台，然后通过以下网址打开 Amazon S3 控制台：[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 在左侧导航窗格中，选择**通用存储桶**。

1. 选择要为其创建元数据表配置的通用存储桶。
**注意**  
请确保此通用存储桶位于表存储桶可用的 AWS 区域。表存储桶仅在美国东部（弗吉尼亚州北部）、美国东部（俄亥俄州）和美国西部（俄勒冈州）区域中提供。

1. 在存储桶的详细信息页面上，选择**元数据**选项卡。

1. 在**元数据**选项卡上，选择**创建元数据配置**。

1. 在**创建元数据配置**页面的**日记表**下，可以选择是否通过使用 AWS Key Management Service（AWS KMS）密钥的服务器端加密（SSE-KMS）对表进行加密。默认情况下，日记表通过使用 Amazon S3 托管式密钥的服务器端加密（SSE-S3）来进行加密。

   如果您选择使用 SSE-KMS，则必须提供与通用存储桶位于同一区域的客户自主管理型 KMS 密钥。
**重要**  
只能在创建表的过程中为元数据表设置加密类型。创建 AWS 托管式表后，无法更改其加密设置。
   + 要使用 SSE-S3（默认）加密日记表，请选择**不指定加密类型**。
   + 要使用 SSE-KMS 加密日记表，请选择**指定加密类型**。在**加密类型**下，选择**使用 AWS Key Management Service（AWS KMS）密钥的服务器端加密（SSE-KMS）**。在 **AWS KMS 密钥**下，从现有 KMS 密钥中进行选择，或者输入 KMS 密钥 ARN。如果您还没有 KMS 密钥，请选择**输入 KMS 密钥 ARN**，然后选择**创建 KMS 密钥**。

     确保您已为 SSE-KMS 设置必要的权限。有关更多信息，请参阅 [SSE-KMS 的权限](metadata-tables-permissions.md#metadata-kms-permissions)。

1. （可选）默认情况下，日记表中的记录不会过期。为了有助于最大限度地降低日记表的存储成本，请对于**记录过期**选择**已启用**。

   如果启用日记表记录过期，则可以设置保留日记表记录的天数。要设置**记录距离过期的天数**值，可以指定介于 `7` 和 `2147483647` 之间的任意整数。例如，要将日记表记录保留一年，请将此值设置为 `365`。

   记录将在符合过期条件后的 24 到 48 小时内过期。
**重要**  
日记表记录过期后无法恢复。

   在**日记表记录将在指定天数后过期**下，选中复选框。

1. （可选）如果要将清单表添加到元数据表配置中，请在**实时清单表**下，对于**配置状态**选择**已启用**。

   可以选择是否通过使用 AWS Key Management Service（AWS KMS）密钥的服务器端加密（SSE-KMS）来对表进行加密。默认情况下，清单表将通过使用 Amazon S3 托管式密钥的服务器端加密（SSE-S3）进行加密。

   如果您选择使用 SSE-KMS，则必须提供与通用存储桶位于同一区域的客户自主管理型 KMS 密钥。
**重要**  
只能在创建表的过程中为元数据表设置加密类型。创建 AWS 托管式表后，无法更改其加密设置。
   + 要使用 SSE-S3（默认）加密清单表，请选择**不指定加密类型**。
   + 要使用 SSE-KMS 加密清单表，请选择**指定加密类型**。在**加密类型**下，选择**使用 AWS Key Management Service（AWS KMS）密钥的服务器端加密（SSE-KMS）**。在 **AWS KMS 密钥**下，从现有 KMS 密钥中进行选择，或者输入 KMS 密钥 ARN。如果您还没有 KMS 密钥，请选择**输入 KMS 密钥 ARN**，然后选择**创建 KMS 密钥**。

     确保您已为 SSE-KMS 设置必要的权限。有关更多信息，请参阅 [SSE-KMS 的权限](metadata-tables-permissions.md#metadata-kms-permissions)。

1. 选择**创建元数据表配置**。

如果元数据表配置已取得成功，则元数据表的名称和 ARN 以及 AWS 托管式表存储桶和命名空间的名称将显示在**元数据**选项卡上。

如果您选择为元数据表配置启用清单表，则该表将经历一个称为*回填*的过程，在此过程中，Amazon S3 扫描通用存储桶，以检索存储桶中存在的所有对象的初始元数据。根据存储桶中的对象数量，此过程可能需要若干分钟（至少 15 分钟）到几小时。完成回填过程后，清单表的状态将从**正在回填**更改为**活跃**。完成回填后，对于对象的更新通常会在一小时内反映在清单表中。

要监控对元数据表配置的更新，可以使用 AWS CloudTrail。有关更多信息，请参阅 [CloudTrail 日志记录跟踪的 Amazon S3 存储桶级操作](cloudtrail-logging-s3-info.md#cloudtrail-bucket-level-tracking)。

### 使用 AWS CLI
<a name="create-metadata-config-cli"></a>

要运行以下命令，您必须安装并配置 AWS CLI。如果未安装 AWS CLI，请参阅《AWS Command Line Interface 用户指南》**中的[安装或更新最新版本的 AWS CLI](https://docs.aws.amazon.com//cli/latest/userguide/getting-started-install.html)。

或者，可以从控制台中使用 AWS CloudShell 运行 AWS CLI 命令。AWS CloudShell 是一个基于浏览器、预先经过身份验证的 Shell，您可以直接从 AWS 管理控制台中启动它。有关更多信息，请参阅《AWS CloudShell 用户指南》**中的 [What is CloudShell?](https://docs.aws.amazon.com//cloudshell/latest/userguide/welcome.html) 和 [Getting started with AWS CloudShell](https://docs.aws.amazon.com//cloudshell/latest/userguide/getting-started.html)。

**使用 AWS CLI 创建元数据表配置**

在创建元数据表配置之前，请确保您已查看并满足[先决条件](#metadata-table-config-prereqs)，并且已经查看了[元数据表限制和局限性](metadata-tables-restrictions.md)。

要使用以下示例命令，请将 `user input placeholders` 替换为您自己的信息。

1. 创建包含元数据表配置的 JSON 文件并将其保存（例如 `metadata-config.json`）。以下是一个示例配置：

   必须指定是启用还是禁用日记表记录过期。如果选择启用记录过期，还必须指定日记表记录将在多少天后过期。要设置 `Days` 值，可以指定介于 `7` 和 `2147483647` 之间的任意整数。例如，要将日记表记录保留一年，请将此值设置为 `365`。

   （可选）可以选择配置清单表。

   对于日记表和清单表，（可选）可以指定加密配置。默认情况下，元数据表通过使用 Amazon S3 托管式密钥的服务器端加密（SSE-S3）进行加密，可以通过将 `SseAlgorithm` 设置为 `AES256` 来指定此加密方式。

   要通过使用 AWS Key Management Service（AWS KMS）密钥的服务器端加密（SSE-KMS）对元数据表进行加密，请将 `SseAlgorithm` 设置为 `aws:kms`。还必须将 `KmsKeyArn` 设置为通用存储桶所在区域中客户自主管理型 KMS 密钥的 ARN。

   ```
   {
     "JournalTableConfiguration": {
        "RecordExpiration": {          
          "Expiration": "ENABLED",
         "Days": 10
       },
       "EncryptionConfiguration": {  
         "SseAlgorithm": "AES256"
       }
     },
     "InventoryTableConfiguration": { 
       "ConfigurationState": "ENABLED",
       "EncryptionConfiguration": {   
         "SseAlgorithm": "aws:kms",
         "KmsKeyArn": "arn:aws:kms:us-east-2:account-id:key/key-id"
       }
     }
   }
   ```

1. 使用以下命令将元数据表配置应用于通用存储桶（例如 `amzn-s3-demo-bucket`）：

   ```
   aws s3api create-bucket-metadata-configuration \
   --bucket amzn-s3-demo-bucket \
   --metadata-configuration file://./metadata-config.json \
   --region us-east-2
   ```

1. 要验证配置是否已创建，请使用以下命令：

   ```
   aws s3api get-bucket-metadata-configuration \
   --bucket amzn-s3-demo-bucket \
   --region us-east-2
   ```

要监控对元数据表配置的更新，可以使用 AWS CloudTrail。有关更多信息，请参阅 [CloudTrail 日志记录跟踪的 Amazon S3 存储桶级操作](cloudtrail-logging-s3-info.md#cloudtrail-bucket-level-tracking)。

### 使用 REST API
<a name="create-metadata-config-rest-api"></a>

可以发送 REST 请求来创建元数据表配置。有关更多信息，请参阅《Amazon S3 API 参考》**中的 [https://docs.aws.amazon.com//AmazonS3/latest/API/API_CreateBucketMetadataConfiguration.html](https://docs.aws.amazon.com//AmazonS3/latest/API/API_CreateBucketMetadataConfiguration.html)。

### 使用 AWS SDK
<a name="create-metadata-config-sdk"></a>

可以使用 AWS SDK 在 Amazon S3 中创建元数据表配置。有关信息，请参阅《Amazon S3 API Reference》**中的 [list of supported SDKs](https://docs.aws.amazon.com//AmazonS3/latest/API/API_CreateBucketMetadataConfiguration.html#API_CreateBucketMetadataConfiguration_SeeAlso)。

## 对在 2025 年 7 月 15 日之前创建的元数据配置启用清单表
<a name="metadata-tables-migration"></a>

如果您在 2025 年 7 月 15 日之前创建了 S3 元数据配置，我们建议您删除并重新创建配置，以便您可以使日记表记录过期并创建清单表。在删除旧配置与创建新配置之间对通用存储桶所做的任何更改都不会记录在任一日记表中。

要从旧的元数据配置迁移到新配置，请执行以下操作：

1. 删除现有的元数据表配置。如需分步指导，请参阅 [删除元数据表配置](metadata-tables-delete-configuration.md)。

1. 创建新的元数据表配置。如需分步指导，请参阅 [创建元数据表配置](#metadata-tables-create-configuration)。

如果在迁移配置时需要帮助，请联系 AWS 支持。

创建新的元数据配置后，将有两个日记表。如果不再需要旧的日记表，则可以将其删除。如需分步指导，请参阅 [删除元数据表](metadata-tables-delete-table.md)。如果您保留了旧的日记表并想将其与新的日记表联接，请参阅[将自定义元数据与 S3 元数据表相联接](metadata-tables-join-custom-metadata.md)以了解如何联接两个表的示例。

迁移后，可以执行以下操作：

1. 要查看配置，现在可以使用 `GetBucketMetadataConfiguration` API 操作。要确定配置是旧的还是新的，可以查看 `GetBucketMetadataConfiguration` API 响应的以下属性。AWS 托管式存储桶类型 (`"aws"`) 表示新配置，而客户管理的存储桶类型 (`"customer"`) 表示旧配置。

   ```
   "MetadataTableConfigurationResult": {
               "TableBucketType": ["aws" | "customer"]
   ```

   有关更多信息，请参阅 [查看元数据表配置](metadata-tables-view-configuration.md)。
**注意**  
可以对旧的或新的元数据表配置使用 `GetBucketMetadataConfiguration` 和 `DeleteBucketMetadataConfiguration` API 操作。但是，如果尝试对新配置使用 `GetBucketMetadataTableConfiguration` 和 `DeleteBucketMetadataTableConfiguration` API 操作，则会收到 HTTP `405 Method Not Allowed` 错误。  
确保更新流程以使用新的 API 操作（`CreateBucketMetadataConfiguration`、`GetBucketMetadataConfiguration` 和 `DeleteBucketMetadataConfiguration`），而不是旧的 API 操作。

1. 如果计划使用 Amazon Athena 或其它 AWS 查询引擎来查询元数据表，请确保将 AWS 托管式表存储桶与 AWS 分析服务集成。如果已经在该区域中集成了现有的表存储桶，则也会自动集成 AWS 托管式表存储桶。有关更多信息，请参阅 [将 Amazon S3 表类数据存储服务与 AWS 分析服务集成](s3-tables-integrating-aws.md)。