本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在 DynamoDB 中请求表导出
DynamoDB 表导出允许将表数据导出到 Amazon S3 桶,同时使您可以使用其它 Amazon 服务(如 Athena、Amazon Glue、Amazon SageMaker、Amazon EMR 和 Amazon Lake Formation)对数据执行分析和复杂的查询。可以使用 Amazon Web Services Management Console、Amazon CLI 或 DynamoDB API 请求表导出。
DynamoDB 同时支持完整导出和增量导出:
-
使用完整导出,可以在从时间点故障恢复(PITR)时段内的任何时间点,将表的完整快照导出到 Amazon S3 桶。
-
通过增量导出,您可以将 DynamoDB 表中在 PITR 时段的指定时间段内已更改、更新或删除的数据导出到 AmazonS3 桶中。
主题
先决条件
启用 PITR
要使用“导出到 S3”功能,您需要针对表启用 PITR。有关如何启用 PITR 的详细信息,请参阅时间点故障恢复。如果您请求导出未启用 PITR 的表,则请求将失败,并显示一条异常消息:“调用 ExportTableToPointInTime
操作时出现错误(PointInTimeRecoveryUnavailableException):未为表“my-dynamodb-table”启用时间点故障恢复”。
设置 S3 权限
可以将表数据导出到具有写入权限的任何 Amazon S3 存储桶。目标桶无需与原表位于同一 Amazon区域中,也无需与原表具有同一拥有者。您的 Amazon Identity and Access Management(IAM)策略需要允许您执行 S3 操作(s3:AbortMultipartUpload
、s3:PutObject
和 s3:PutObjectAcl
)和 DynamoDB 导出操作(dynamodb:ExportTableToPointInTime
)。以下是一个示例策略,该策略将授予您的用户执行导出到 S3 桶的权限。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowDynamoDBExportAction", "Effect": "Allow", "Action": "dynamodb:ExportTableToPointInTime", "Resource": "arn:aws:dynamodb:us-east-1:111122223333:table/my-table" }, { "Sid": "AllowWriteToDestinationBucket", "Effect": "Allow", "Action": [ "s3:AbortMultipartUpload", "s3:PutObject", "s3:PutObjectAcl" ], "Resource": "arn:aws:s3:::your-bucket/*" } ] }
如果您需要写入其它账户中的 S3 桶,或者您没有写入权限,则 S3 桶拥有者需要添加桶策略以允许您从 DynamoDB 导出到该桶。以下是有关目标 S3 桶的策略示例。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "ExampleStatement", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/Dave" }, "Action": [ "s3:AbortMultipartUpload", "s3:PutObject", "s3:PutObjectAcl" ], "Resource": "arn:aws:s3:::awsexamplebucket1/*" } ] }
导出时撤消这些权限将导致部分文件。
注意
如果您要导出到的目标表或桶使用了客户管理的密钥加密,则该 KMS 密钥的策略必须赋予 DynamoDB 使用该密钥的权限。此权限是通过触发导出任务的 IAM 用户/角色授予的。有关加密的更多信息,包括最佳实践,请参阅 DynamoDB 如何使用 Amazon KMS 和使用自定义 KMS 密钥
请求使用 Amazon Web Services Management Console 导出
下面的示例演示如何使用 DynamoDB 控制台导出名为 MusicCollection
的现有表。
注意
此过程假定已启用时间点恢复。要在 MusicCollection
表中启用,在表的概述选项卡的表详细信息部分,为时间点恢复选择启用。
请求表导出
登录 Amazon Web Services Management Console,打开 DynamoDB 控制台:https://console.aws.amazon.com/dynamodb/
。 -
在控制台左侧的导航窗格中,选择流和导出。
-
选择导出到 S3 按钮。
-
选择源表和目标 S3 存储桶。如果目标存储桶为您的账户所拥有,则您可以使用 Browse S3(浏览 S3)按钮查找它。否则,使用
s3://
输入存储桶的 URL,bucketname
/prefix
format.prefix
是一个可选文件夹,有助于您的目标存储桶保持井然有序。 -
选择完整导出或增量导出。完整导出会按照您指定的时间点输出表的完整表快照。增量导出会输出在指定的导出期间对表所做的更改。您的输出经过压缩,以便只包含导出期间项目的最终状态。即使该项目在同一导出期间内有多个更新,也只会在导出中出现一次。
-
单击导出按钮开始导出。
导出的数据在事务上不一致。这意味着您的事务操作可能会在两个导出输出之间发生损坏。您可能会看到由事务操作修改的一个项目子集反映在导出中,而同一事务中的另一个修改子集未反映在同一个导出请求中。但是,导出最终是一致的。如果事务在导出过程中损坏,则可以保证在下一次连续导出中具有剩余的事务,而没有重复。用于导出的时间段基于内部系统时钟,可能与应用程序的本地时钟相差一分钟。
获取 Amazon Web Services Management Console 中以前导出的详细信息
通过单击导航侧边栏中的导出到 S3 部分,可以找到您过去运行的导出任务的信息。此部分包含过去 90 天内创建的所有导出的列表。选择“导出”选项卡中列出任务的 ARN 将检索该导出的信息,包括您选择的任何高级配置设置。请注意,尽管导出任务元数据会在 90 天后过期,列表中没有早于该日期的作业,但 S3 存储桶中的数据元将保持存储桶策略允许的时间。导出时,DynamoDB 不删除 S3 存储桶中创建的任何对象。
请求使用 Amazon CLI 导出
下面的示例演示如何使用 Amazon CLI 将现有表 MusicCollection
导出到 S3 存储桶 ddb-export-musiccollection
。
注意
此过程假定已启用时间点恢复。要为 MusicCollection
表启用,请运行下面的命令。
aws dynamodb update-continuous-backups \ --table-name MusicCollection \ --point-in-time-recovery-specification PointInTimeRecoveryEnabled=True
注意
如果选择使用 Amazon Key Management Service (Amazon KMS) 保护的密钥对导出进行加密,则密钥必须与目标 S3 存储桶位于同一区域。
获取 Amazon CLI 中以前导出的详细信息
可以使用 list-exports
命令,查找有关以前运行的导出请求的信息。此命令返回过去 90 天创建的所有导出的列表。请注意,尽管导出任务元数据会在 90 天后过期,list-exports
命令不再返回早于该日期的作业,但 S3 存储桶中的数据元将保持存储桶策略允许的时间。导出时,DynamoDB 不删除 S3 存储桶中创建的任何对象。
导出的状态为 PENDING
,直到成功或失败。如果成功,则状态将更改为 COMPLETED
。如果失败,则状态将更改为 FAILED
,并带有 failure_message
和 failure_reason
。
下面的示例使用可选 table-arn
参数,仅列出特定表的导出。
aws dynamodb list-exports \ --table-arn arn:aws:dynamodb:us-east-1:123456789012:table/ProductCatalog
要检索有关特定导出任务的详细信息(包括任何高级配置设置),请使用 describe-export
命令。
aws dynamodb describe-export \ --export-arn arn:aws:dynamodb:us-east-1:123456789012:table/ProductCatalog/export/01234567890123-a1b2c3d4
请求使用 Amazon SDK 导出
通过您选择的 Amazon SDK,使用这些代码片段请求导出表。
使用 Amazon SDK 获取有关以前导出的详细信息
通过您选择的 Amazon SDK,使用这些代码片段获取有关以前表导出的详细信息。