

# S3 表类数据存储服务复制的工作方式
<a name="s3-tables-replication-how-replication-works"></a>

S3 表类数据存储服务复制会跨区域和 AWS 账户创建 Apache Iceberg 表的只读副本。副本表由 S3 表类数据存储服务自动维护，包含源表中的完整数据、元数据和快照历史记录，让您可以使用任何兼容 Iceberg 的引擎进行查询，用于分析和时间旅行操作。

当您为表配置复制时，S3 表类数据存储服务会执行以下操作：
+ 在每个目标表存储桶中创建一个名称和命名空间与源表相同的只读副本表。
+ 用源表的最新状态回填副本
+ 监控源表中是否有新的更新
+ 按照与源表相同的顺序将所有更新提交到副本以保持一致性

有关更多信息，请参阅以下部分。

**Topics**
+ [

## 复制的内容
](#s3-tables-replication-what-is-replicated)
+ [

## 数据复制方式
](#s3-tables-replication-how-data-replicated)
+ [

## 快照复制
](#s3-tables-replication-snapshot-replication)
+ [

## 注意事项和限制
](#s3-tables-replication-considerations-limitations)

## 复制的内容
<a name="s3-tables-replication-what-is-replicated"></a>

将复制以下表组件：
+ **表快照**：所有快照（包括压缩快照）均按时间顺序复制，以保留源表中的父子关系和序列号。这将确保副本表提供与源表相同的时间旅行功能。
+ **表数据**：表快照引用的所有数据文件都将复制到目标区域。这包括：
  + **元数据文件**：表 metadata.json 文件、清单、清单列表、分区统计信息和表统计信息。
  + **删除文件**：所有删除文件都会被复制，以确保副本表中数据的准确性。
  + **数据文件**：清单引用的所有数据文件都会被复制。
+ **表元数据**：完整的元数据复制，包括架构信息（当前和历史）、分区规范、排序顺序和表属性。
  + **架构信息**：所有表架构都会被复制，包括当前架构版本和历史架构版本。这将确保对副本表的查询使用正确的列定义、数据类型和字段映射。复制过程会保留架构演进历史记录，使时空旅行查询能够在副本表上正常执行。
  + **分区规范**：当前和历史分区规范会被复制，以确保副本表采用与源表相同的分区策略。
  + **排序顺序**：表排序顺序会被复制，以维持查询性能优化。

## 数据复制方式
<a name="s3-tables-replication-how-data-replicated"></a>

复制通过比较源表与副本表的 Apache Iceberg 表元数据来确定副本表的有效状态。复制会处理三个类别的元数据以更新您的副本表。

### 对于表元数据
<a name="s3-tables-replication-table-metadata"></a>

对于受版本控制的元数据字段，复制会将源表中的值合并到副本表的以下字段对应的数组：
+ `snapshots`：按照 snapshot-id 将源表中的所有快照合并到副本表的 snapshots 数组。
+ `snapshot-log`：按照时间戳和 snapshot-id 将源表中的快照日志合并到副本表的 snapshot-log 数组。
+ `sort-orders`：按照 order-id 将源表中的排序顺序定义合并到副本表的 sort-orders 数组。
+ `partition-specs`：按照 spec-id 将源表中的分区规范合并到副本表的 partition-specs 数组。

### 对于表配置
<a name="s3-tables-replication-table-configuration"></a>

对于表示表配置的字段，复制操作会直接从源表复制值：
+ `properties`
+ `partition-statistics`
+ `statistics`

当前表状态也会从源表传输过来：
+ `current-snapshot-id`
+ `current-schema-id`
+ `last-column-id`
+ `last-partition-id`
+ `last-sequence-number`
+ `default-sort-order-id`
+ `next-row-id`（Iceberg V3）
+ `encryption-keys`（Iceberg V3）

### 特定于副本的状态
<a name="s3-tables-replication-replica-specific-state"></a>

以下字段根据合并后的数据计算得出，并针对副本表进行了更新：
+ `location` 在复制期间更新为指向副本表存储桶中的正确文件位置，从而确保所有文件引用在目标环境中均有效。
+ `metadata-log` 包含所有目标元数据文件名，并且每次成功复制后都会使用当前元数据文件名进行更新。
+ 所有文件路径均已修改为指向副本表位置。

## 快照复制
<a name="s3-tables-replication-snapshot-replication"></a>

S3 表类数据存储服务复制按照与源表相同的提交顺序复制所有表快照，从而跨区域维护完整的快照历史记录。源表中的父子关系将保留在副本表中。

### 快照保留
<a name="s3-tables-replication-snapshot-retention"></a>

您可以为复制的表配置与源表保留期不同的自定义快照保留期。这意味着，即使快照在源表中已过期且不再可用，它们仍然可以在副本中保留。

例如，如果源表的快照保留期为 30 天，但副本表的保留期配置为 90 天，则副本将保留源表中不再可用的前两个月的快照。

您在源表中手动过期的快照也会保留在副本表中。例如，如果您在源表中使用 Spark 过程使 2 月份的快照过期，您仍然可以访问副本表中的这些快照。

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

以下注意事项适用于复制的表：
+ S3 表类数据存储服务会同时复制 Iceberg V2 表和 V3 表。但是，不支持复制升级后的表（V2 → V3）。
+ 不支持大小超过 500 MB 的元数据文件。
+ 虽然表更新通常会在数分钟内完成复制，但复制所需的时间可能会根据要复制的表更新大小而延长，例如，当复制开始回填时。
+ 不支持带有标签或分支的表。
+ Amazon S3 元数据表或其他 AWS 生成的系统表不支持复制。
+ 所有表快照（包括压缩快照）均从源表复制。因此，副本表不支持压缩。