

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 DynamoDB 和 Amazon S3 导出和导入表数据
<a name="amazon-s3"></a>

Amazon DynamoDB 支持使用导出到 S3 功能将表格数据导出到 Amazon S3。您可以以 DynamoDB JSON 和 Amazon Ion 格式导出数据。导出的数据经过压缩，可以使用 Amazon S3 密钥或 AWS 密钥管理服务 (AWS KMS) 密钥进行加密。导出表不会消耗表的读取容量，也不会影响导出期间的表性能和可用性。您可以导出到账户内的 S3 存储桶，也可以导出到其他账户，即使在不同的 AWS 区域也是如此。 Point-in-time在导出到 Amazon S3 之前，应在源表上激活恢复 (PITR)。

Amazon DynamoDB 最近增加了使用从 S3 导入功能直接从 Amazon S3 导入表数据的支持。以前，使用导出到 S3 导出表数据后，必须依靠提取、转换和加载 (ETL) 工具来解析 S3 存储桶中的表数据、推断架构以及加载或复制到目标 DynamoDB 表。这是一个繁琐的过程，当表数据结构随着时间的推移而发生变化时，它无法提供灵活性。此外，使用诸如 AWS Glue 之类的 ETL 工具会产生额外的基础设施费用和导入期间消耗的写入容量费用。

从 S3 导入功能不会消耗目标表的写入容量，它支持不同的数据格式，包括 DynamoDB JSON、Amazon Ion 和逗号分隔值 (CSV)。数据也可以采用未压缩或压缩（gzip 或 zstd）格式。

您可以使用 AWS 管理控制台、AWS 命令行界面 (AWS CLI) Line CLI 或 DynamoDB API 执行导入和导出。

下图显示了数据从源账户中的 DynamoDB 移动到目标账户中的 S3 存储桶，然后移动到目标账户的 DynamoDB 实例。



![\[""\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/dynamodb-full-table-copy-options/images/dynamodb-s3-import.png)


简而言之，使用 Amazon S3 将 DynamoDB 表从一个账户导出和导入到另一个账户需要执行以下步骤：

1. 在目标账户中创建 S3 存储桶并附加 S3 存储桶策略以允许来自源账户的访问。

1. 在源账户中，在 DynamoDB 控制台上，**选择导出到 S3，选择**源 DynamoDB 表，然后在目标账户中指定 S3 存储桶。有关更多信息，请参阅 [DynamoDB 文档](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/S3DataExport_Requesting.html)。

1. 在目标账户中，在 DynamoDB 控制台上，**选择从 S3 导入**，然后在目标账户中指定 S3 存储桶。有关更多信息，请参阅 [DynamoDB 文档](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/S3DataImport.Requesting.html)。

**优点**
+ 这是一种无服务器解决方案。
+ 该解决方案适用于高达 TB 的大型数据集。
+ 它不会消耗源表和目标表上的任何预配置容量。
+ 对源表的性能或可用性没有影响。

**缺点**
+ 此功能目前不支持导入到现有表中。导入过程将创建一个新表。