

# S3 元数据日记表架构
<a name="metadata-tables-schema"></a>

日记表近乎实时地记录对数据所做的更改，有助于您识别上传到存储桶的新数据、跟踪最近删除的对象、监控生命周期转换等。日记表记录新对象以及对于对象及其元数据的更新（那些需要 `PUT` 或 `DELETE` 操作的更新）。由于此表是可查询的，因此可以通过简单的 SQL 查询来审计对存储桶的更改。

可以将日记表用于安全、审计和合规使用案例，以跟踪存储桶中已上传、删除和更改的对象。例如，可以查询日记表来回答如下问题：
+ S3 生命周期在过去 24 小时内删除了哪些对象？
+ 最近的 `PUT` 请求来自哪些 IP 地址？
+ 在过去 7 天内，哪些 AWS Key Management Service（AWS KMS）密钥用于 `PUT` 请求？
+ Amazon Bedrock 在过去五天内创建了存储桶中的哪些对象？

Amazon S3 元数据日记表包含行和列。每行代表一个突变事件，该事件在您的通用存储桶中创建、更新或删除了一个对象。这些事件中大多数是用户操作的结果，但其中一些事件是 Amazon S3 代表您执行的操作的结果，例如 S3 生命周期到期或存储类别转换。

S3 元数据日记表与通用存储桶中已发生的更改保持最终一致。在某些情况下，当 S3 元数据收到创建或更新对象的通知时，该对象可能已经在存储桶中被覆盖或删除。在此类情况下，将不再能够检索对象，并且某些列可能会显示一个 NULL 值来指示缺少元数据架构。

下面是名为 `amzn-s3-demo-bucket:` 的通用存储桶的日记表示例：

```
bucket                key                        sequence_number                                                                                          record_type   record_timestamp           version_id   is_delete_marker   size   last_modified_date   e_tag	                           storage_class  is_multipart   encryption_status   is_bucket_key_enabled   kms_key_arn                                                                   checksum_algorithm   object_tags   user_metadata	                                                                                                                 requester      source_ip_address   request_id 
amzn-s3-demo-bucket   Finance/statement1.pdf     80e737d8b4d82f776affffffffffffffff006737d8b4d82f776a00000000000000000000000000000000000000000000000072   CREATE        2024-11-15 23:26:44.899                 FALSE              6223   11/15/2024 23:26     e131b86632dda753aac4018f72192b83    STANDARD	  FALSE          SSE-KMS             FALSE                   arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890df   SSECRC32             {}            {count -> Asia, customs -> false, family -> true, location -> Mary, name -> football, user -> United States}                       111122223333   192.0.2.1           CVK8FWYRW0M9JW65
amzn-s3-demo-bucket   s3-dg.pdf                  80e737d8b4e39f1dbdffffffffffffffff006737d8b4e39f1dbd00000000000000000000000000000000000000000000000072   CREATE        2024-11-15 23:26:44.942                 FALSE              3554   11/15/2024 23:26     9bb49efc2d92c05558ddffbbde8636d5    STANDARD	  FALSE          DSSE-KMS            FALSE                   arn:aws:kms:us-east-1:936810216292:key/0dcebce6-49fd-4cae-b2e2-5512ad281afd   SSESHA1              {}            {}                                                                                                                                 111122223333   192.0.2.1           CVKAQDRAZEG7KXAY
amzn-s3-demo-bucket   Development/Projects.xls   80e737d8b4ed9ac5c6ffffffffffffffff006737d8b4ed9ac5c600000000000000000000000000000000000000000000000072   CREATE        2024-11-15 23:26:44.966                 FALSE              7746   11/15/2024 23:26     729a6863e47fb9955b31bfabce984908    STANDARD	  FALSE          SSE-S3              FALSE                   NULL                                                                          SSECRC32             {}            {count -> Asia, customs -> Canada, family -> Billiards, filter -> true, location -> Europe, name -> Asia, user -> United States}   111122223333   192.0.2.1           CVK7Z6XQTQ90BSRV
```

日记表具有以下架构：


| 列名称 | 必填？ | 数据类型 |   | 
| --- | --- | --- | --- | 
| `bucket` | 是 | 字符串 | 通用存储桶名称。有关更多信息，请参阅 [通用存储桶命名规则](bucketnamingrules.md)。 | 
| `key` | 是 | 字符串 | 在存储桶中唯一地标识对象的对象键名称（或键）。有关更多信息，请参阅 [为 Amazon S3 对象命名](object-keys.md)。 | 
| `sequence_number` | 是 | 字符串 | 序列号，它是一个序数，包含在给定对象的记录中。要对相同存储桶和键的记录进行排序，您可以按 `sequence_number` 进行排序。对于给定的存储桶和键，按字典顺序排列的较大 `sequence_number` 值意味着该记录是更近被引入存储桶的。 | 
| `record_type` | 是 | 字符串 | 此记录的类型，为以下值之一：`CREATE`、`UPDATE_METADATA` 或 `DELETE`。 `CREATE` 记录表明已将新对象（或对象的新版本）写入存储桶。 `UPDATE_METADATA` 记录捕获对现有对象的可变元数据（例如存储类或标签）的更改。 `DELETE` 记录表明此对象（或该对象的此版本）已被删除。启用版本控制后，`DELETE` 记录代表删除标记或永久删除。可通过查阅可选的 `is_delete_marker` 列来进一步消除其歧义。 有关更多信息，请参阅 [从启用了版本控制的存储桶中删除对象版本](DeletingObjectVersions.md)。  永久删除在所有列中都带有 `NULL`，但 `bucket`、`key`、`sequence_number`、`record_type`、`record_timestamp` 和 `version_id` 列（即那些标记为“必需”的列）*除外*。  | 
| `record_timestamp` | 是 | 时间戳 NTZ（无时区） | 与此记录关联的时间戳。 | 
| `version_id` | 否 | 字符串 |  对象的版本 ID。在存储桶上启用版本控制后，Amazon S3 会为添加到存储桶的对象指定版本号。有关更多信息，请参阅 [使用 S3 版本控制保留对象的多个版本](Versioning.md)。 在您设置版本控制状态之前存储在存储桶中的对象的版本 ID 为 null。  | 
| `is_delete_marker` | 否 | 布尔值 |  对象的删除标记状态。对于作为删除标记的 DELETE 记录，此值为 `TRUE`。对于永久删除，将忽略此值 (`NULL`)。其它记录类型（CREATE 和 UPDATE\$1METADATA）具有值 `FALSE`。有关更多信息，请参阅 [使用删除标记](DeleteMarker.md)。  为删除标记添加的行的 `record_type` 值为 `DELETE`，而不是 `UPDATE_METADATA`。如果删除标记是因为 S3 生命周期到期而创建的，则 `requester` 值为 `s3.amazonaws.com`。   | 
| `size` | 否 | 长整型 | 以字节为单位的对象大小，不包括未完成的分段上传或对象元数据的大小。如果 `is_delete_marker` 为 `TRUE`，则大小为 `0`。有关更多信息，请参阅 [系统定义的对象元数据](UsingMetadata.md#SysMetadata)。 | 
| `last_modified_date` | 否 | 时间戳 NTZ（无时区） | 对象创建日期或上次修改日期（以较晚者为准）。对于分段上传，对象创建日期是开始分段上传的日期。有关更多信息，请参阅 [系统定义的对象元数据](UsingMetadata.md#SysMetadata)。 | 
| `e_tag` | 否 | 字符串 | 实体标签（ETag），这是对象的哈希。ETag 仅反映对于对象的内容的更改，而不反映对于对象的元数据的更改。ETag 可能是对象数据的 MD5 摘要。ETag 是否为 MD5 摘要取决于对象的创建方式及其加密方式。有关更多信息，请参阅《Amazon S3 API 参考》**中的 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_Object.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_Object.html)。 | 
| `storage_class` | 否 | 字符串 | 用于存储对象的存储类。以下值之一：`STANDARD`、`REDUCED_REDUNDANCY`、`STANDARD_IA`、`ONEZONE_IA`、`INTELLIGENT_TIERING`、`GLACIER`、`DEEP_ARCHIVE` 或 `GLACIER_IR`。有关更多信息，请参阅 [了解和管理 Amazon S3 存储类](storage-class-intro.md)。 | 
| `is_multipart` | 否 | 布尔值 | 对象的上传类型。如果对象以分段上传形式上传，则此值为 `TRUE`。否则为 `FALSE`。有关更多信息，请参阅 [在 Amazon S3 中使用分段上传来上传和复制对象](mpuoverview.md)。 | 
| `encryption_status` | 否 | 字符串 | 对象的服务器端加密状态，具体取决于使用哪种加密密钥：具有 Amazon S3 托管式密钥的服务器端加密（SSE-S3）、具有 AWS Key Management Service（AWS KMS）密钥的服务器端加密（SSE-KMS）、具有 AWS KMS keys的双层服务器端加密（DSSE-C）或具有客户提供的密钥的服务器端加密（SSE-C）。如果对象未加密，则此值为 null。可能的值为 `SSE-S3`、`SSE-KMS`、`DSSE-KMS`、`SSE-C` 或 null。有关更多信息，请参阅 [利用加密来保护数据](UsingEncryption.md)。 | 
| `is_bucket_key_enabled` | 否 | 布尔值 | 对象的 S3 存储桶密钥启用状态。如果对象将 S3 存储桶密钥用于 SSE-KMS，则此值为 `TRUE`。否则为 `FALSE`。有关更多信息，请参阅 [在对象级别配置 S3 存储桶密钥](configuring-bucket-key-object.md)。 | 
| `kms_key_arn` | 否 | 字符串 |  用于加密对象的 KMS 密钥的 Amazon 资源名称（ARN），适用于 `encryption_status` 为 `SSE-KMS` 或 `DSSE-KMS` 的行。如果对象未使用 SSE-KMS 或 DSSE-KMS 进行加密，则值为 null。有关更多信息，请参阅[使用具有 AWS KMS 密钥的服务器端加密（SSE-KMS）](UsingKMSEncryption.md)和[使用具有 AWS KMS 密钥的双层服务器端加密（DSSE-KMS）](UsingDSSEncryption.md)。  如果某行代表的对象版本在处理删除或覆盖事件时不再存在，则即使 `encryption_status` 列的值为 `SSE-KMS` 或 `DSSE-KMS`，`kms_key_arn` 也将包含 null 值。   | 
| `checksum_algorithm` | 否 | 字符串 | 用于为对象创建校验和的算法，为以下值之一：`CRC64NVME`、`CRC32`、`CRC32C`、`SHA1` 或 `SHA256`。如果不存在校验和，则此值为 null。有关更多信息，请参阅 [使用支持的校验和算法](checking-object-integrity-upload.md#using-additional-checksums)。 | 
| `object_tags` | 否 | Map <String, String> |  与对象关联的对象标签。对象标签存储为键值对的映射。如果对象没有对象标签，则会存储空映射 (`{}`)。有关更多信息，请参阅 [使用标签对对象进行分类](object-tagging.md)。  如果 `record_type` 值为 `DELETE`，则 `object_tags` 列包含 null 值。如果 `record_type` 值为 `CREATE` 或 `UPDATE_METADATA`，则表示在处理删除或覆盖事件时已不再存在的对象版本的行在 `object_tags` 列中将包含 null 值。   | 
| `user_metadata` | 否 | Map <String, String> |  与对象关联的用户元数据。用户元数据存储为键值对的映射。如果对象没有用户元数据，则会存储空映射 (`{}`)。有关更多信息，请参阅 [用户定义的对象元数据](UsingMetadata.md#UserMetadata)。  如果 `record_type` 值为 `DELETE`，则 `user_metadata` 列包含 null 值。如果 `record_type` 值为 `CREATE` 或 `UPDATE_METADATA`，则表示在处理删除或覆盖事件时已不再存在的对象版本的行在 `user_metadata` 列中将包含 null 值。   | 
| `requester` | 否 | 字符串 | 提出请求的请求者或 AWS 服务 主体的 AWS 账户 ID。例如，如果请求者是 S3 生命周期，则此值为 `s3.amazonaws.com`。 | 
| `source_ip_address` | 否 | 字符串 | 请求的源 IP 地址。对于由用户请求生成的记录，此列包含请求的源 IP 地址。对于 Amazon S3 或其它 AWS 服务 代表用户采取的操作，此列包含 null 值。 | 
| `request_id` | 否 | 字符串 | 与请求关联的请求 ID。 | 