在 DynamoDB 中请求表导出
DynamoDB 表导出允许将表数据导出到 Amazon S3 桶,同时使您可以使用其它 AWS 服务(如 Athena、AWS Glue、Amazon SageMaker、Amazon EMR 和 AWS Lake Formation)对数据执行分析和复杂的查询。可以使用 AWS Management Console、AWS CLI 或 DynamoDB API 请求表导出。
注意
不支持申请方付款 Amazon S3 存储桶。
DynamoDB 同时支持完整导出和增量导出:
-
使用完整导出,可以在从时间点故障恢复(PITR)时段内的任何时间点,将表的完整快照导出到 Amazon S3 桶。
-
通过增量导出,您可以将 DynamoDB 表中在 PITR 时段的指定时间段内已更改、更新或删除的数据导出到 AmazonS3 桶中。
主题
先决条件
启用 PITR
要使用导出到 S3 特征,您必须对表启用 PITR。有关如何启用 PITR 的详细信息,请参阅时间点故障恢复。如果您请求导出未启用 PITR 的表,则请求将失败,并显示一条异常消息:“调用 ExportTableToPointInTime
操作时出现错误(PointInTimeRecoveryUnavailableException):未为表“my-dynamodb-table”启用时间点恢复”。
设置 S3 权限
可以将表数据导出到具有写入权限的任何 Amazon S3 存储桶。目标存储桶无需与源表位于同一 AWS 区域中,也无需与源表具有同一拥有者。您的 AWS 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 如何使用 AWS KMS 和使用自定义 KMS 密钥
请求使用 AWS Management Console 导出
下面的示例演示如何使用 DynamoDB 控制台导出名为 MusicCollection
的现有表。
注意
此过程假定已启用时间点恢复。要在 MusicCollection
表中启用,在表的概述选项卡的表详细信息部分,为时间点恢复选择启用。
请求表导出
登录 AWS Management Console,打开 DynamoDB 控制台:https://console.aws.amazon.com/dynamodb/
。 -
在控制台左侧的导航窗格中,选择流和导出。
-
选择导出到 S3 按钮。
-
选择源表和目标 S3 存储桶。如果目标存储桶为您的账户所拥有,则您可以使用 Browse S3(浏览 S3)按钮查找它。否则,使用
s3://
输入存储桶的 URL,bucketname
/prefix
format.prefix
是一个可选文件夹,有助于您的目标存储桶保持井然有序。 -
选择完整导出或增量导出。完整导出会按照您指定的时间点输出表的完整表快照。增量导出会输出在指定的导出期间对表所做的更改。您的输出经过压缩,以便只包含导出期间项目的最终状态。即使该项目在同一导出期间内有多个更新,也只会在导出中出现一次。
-
选择导出以开始。
导出的数据在事务上不一致。您的事务操作可能会在两个导出输出之间发生损坏。可能通过导出中反映的事务操作修改了项目的子集,而同一事务中的另一个修改子集未反映在同一个导出请求中。但是,导出最终是一致的。如果事务在导出过程中损坏,则您将在下一次相邻导出中具有剩余的事务,而没有重复。用于导出的时间段基于内部系统时钟,可能与应用程序的本地时钟相差一分钟。
获取 AWS Management Console 中以前导出的详细信息
通过选择导航侧边栏中的导出到 S3 部分,可以找到有关您过去运行的导出任务的信息。此部分包含过去 90 天内创建的所有导出的列表。选择导出选项卡中所列任务的 ARN 来检索有关该导出的信息,包括您选择的任何高级配置设置。请注意,尽管导出任务元数据会在 90 天后过期,列表中没有早于该日期的作业,但 S3 存储桶中的数据元将保持存储桶策略允许的时间。导出时,DynamoDB 不删除 S3 存储桶中创建的任何对象。
请求使用 AWS CLI 导出
下面的示例演示如何使用 AWS CLI 将现有表 MusicCollection
导出到 S3 存储桶 ddb-export-musiccollection
。
注意
此过程假定您已启用时间点故障恢复。要为 MusicCollection
表启用,请运行下面的命令。
aws dynamodb update-continuous-backups \ --table-name MusicCollection \ --point-in-time-recovery-specification PointInTimeRecoveryEnabled=True
注意
如果选择使用 AWS Key Management Service (AWS KMS) 保护的密钥对导出进行加密,则密钥必须与目标 S3 存储桶位于同一区域。
获取 AWS 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
请求使用 AWS SDK 导出
通过您选择的 AWS SDK,使用这些代码片段请求导出表。
使用 AWS SDK 获取有关以前导出的详细信息
通过您选择的 AWS SDK,使用这些代码片段获取有关以前表导出的详细信息。