

# 使用 S3 元数据表发现您的数据
<a name="metadata-tables-overview"></a>

Amazon S3 元数据通过自动捕获通用存储桶中对象的元数据，并将其存储在您可以查询的只读、完全托管式 Apache Iceberg 表中，从而加快数据发现速度。这些只读表称为*元数据表*。在通用存储桶中添加、更新或移除对象时，S3 元数据会自动刷新相应的元数据表，以反映最新的更改。

默认情况下，S3 元数据提供三种类型的元数据：
+ [系统定义的元数据](UsingMetadata.md#SysMetadata)，例如对象的创建时间和存储类
+ 自定义元数据，例如标签和对象上传期间包含的[用户定义的元数据](UsingMetadata.md#UserMetadata)
+ 事件元数据，例如何时更新或删除对象，以及发出请求的 AWS 账户

借助 S3 元数据，您可以轻松查找、存储和查询 S3 对象的元数据，这样您就可以快速准备数据，以用于业务分析、内容检索、人工智能和机器学习（AI/ML）模型训练等。

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

元数据表存储在 AWS 托管式 S3 表存储桶中，该存储桶提供针对表格数据进行优化的存储。要查询元数据，可以将表存储桶与 Amazon SageMaker 智能湖仓集成。这种集成使用 AWS Glue Data Catalog 和 AWS Lake Formation，支持 AWS 分析服务自动发现和访问表数据。

在将表存储桶与 AWS Glue Data Catalog 集成后，可以使用 AWS 分析服务（如 Amazon Athena、Amazon EMR 和 Amazon Redshift）直接查询元数据表。还可以使用 Amazon Quick 通过查询数据创建交互式控制面板。有关将 AWS 托管式 S3 表存储桶与 Amazon SageMaker 智能湖仓集成的更多信息，请参阅[将 Amazon S3 表类数据存储服务与 AWS 分析服务集成](s3-tables-integrating-aws.md)。

还可以使用 AWS Glue Iceberg 端点、Amazon S3 表类数据存储服务 Iceberg REST 端点或适用于 Apache Iceberg 的 Amazon S3 表类数据存储服务目录客户端目录，通过 Apache Spark、Apache Trino 和支持 Apache Iceberg 格式的任何其它应用程序来查询元数据表。有关访问元数据表的更多信息，请参阅[访问表数据](s3-tables-access.md)。

有关 S3 元数据定价，请参阅 [Amazon S3 定价](https://aws.amazon.com/s3/pricing/)。

## 元数据表的工作原理
<a name="metadata-tables-how-they-work"></a>

元数据表由 Amazon S3 管理，而不能由 Amazon S3 本身以外的任何 IAM 主体进行修改。但是，可以删除元数据表。因此，元数据表是只读的，这有助于确保它们正确地反映通用存储桶的内容。

要生成对象元数据并将其存储在 AWS 托管式元数据表中，需要为通用存储桶创建元数据表配置。Amazon S3 设计为持续更新元数据表，以反映对数据的最新更改，只要配置在通用存储桶上处于活动状态即可。

在创建元数据表配置之前，确保您拥有创建和管理元数据表所必需的 AWS Identity and Access Management（IAM）权限。有关更多信息，请参阅 [为配置元数据表设置权限](metadata-tables-permissions.md)。

**元数据表存储、组织和加密**  
创建元数据表配置时，元数据表存储在 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`

**注意**  
如果通用存储桶名称包含任何句点，则这些句点将在命名空间名称中转换为下划线 (`_`)。
如果通用存储桶是在 2018 年 3 月 1 日之前创建的，则其名称可能包含大写字母和下划线，长度也可能不超过 255 个字符。如果存储桶名称具有这些特征，则元数据表命名空间将具有不同的格式。通用存储桶名称将以 `b_` 为前缀，截断为 63 个字符，全部转换为小写，并以哈希作为后缀。

元数据表具有以下 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 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)。

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

**元数据表维护和记录过期**  
为了使 元数据表保持最佳性能，Amazon S3 会定期对表执行维护活动，例如压缩和未引用文件移除。这些维护活动既有助于最大限度地降低存储元数据表的成本，又有助于优化查询性能。这种表维护是自动进行的，无需您选择加入或持续管理。

**注意**  
您无法控制日记表或清单表快照的过期。对于每个表，Amazon S3 存储至少 1 个快照，最长可存储 24 小时。
为了有助于最大限度地降低成本，可以配置日记表记录过期。默认情况下，日记表记录不会过期，并且日记表记录必须保留至少 7 天。有关更多信息，请参阅 [使日记表记录过期](metadata-tables-expire-journal-table-records.md)。

**Topics**
+ [元数据表的工作原理](#metadata-tables-how-they-work)
+ [元数据表限制和局限性](metadata-tables-restrictions.md)
+ [S3 元数据日记表架构](metadata-tables-schema.md)
+ [S3 元数据实时清单表架构](metadata-tables-inventory-schema.md)
+ [配置元数据表](metadata-tables-configuring.md)
+ [查询元数据表](metadata-tables-querying.md)
+ [对 S3 元数据进行故障排除](metadata-tables-troubleshooting.md)