首页 > 解决方案 > 出口 | 仅使用 AWS CLI 导入 DynamoDB

问题描述

我的目标是拥有一个简单的工具,用于将 dynamodb 导出到本地文件(json/csv),只有aws cli尽可能少的第 3 方。我的桌子大小约为 500mb。

我正在研究这几天,我看到了非常好的项目,比如dynamodump和另一个 SDK 实现。我还测试了Datapipeline来自 Amazon 的,但对于我的目标任务,我想要简单的aws cli.

假设我已经有了表的映射,例如索引和属性。现在我只想导入我拥有的项目。对我来说,我所拥有的实现的最佳解决方案将是这样的:

  1. 将表从 aws 导出到本地文件: aws dynamodb scan --table-name SOMETABLENAME --output json | jq '.Items[]' > SOMETABLENAME.json

  2. sed使用, jq, awk... 等内容渲染文件。获取可以导入到 aws-dynamodb 的正确 json 格式

  3. 使用以下命令将项目从 SOMETABLENAME 导入 aws-dynamodb:

    aws dynamodb put-item --table-name SOMETABLENAME --item file://SOMETABLENAME.json

标签: amazon-dynamodbaws-cli

解决方案


您可以使用 aws dynamodb scan 导出数据。

aws dynamodb scan --table-name table_name --region aws_region_name --max-items max_items --output json > ./export.json

但是,DynamoDB 将在单个请求中检索的数据量限制为 1MB。如果您通过扫描达到 1MB 的限制,它将在响应中返回一个“NextToken”键。您需要使用 NextToken 再次扫描它,直到所有数据都已导出。

aws dynamodb scan --table-name table_name --region aws_region_name --max-items max_items --starting-token nextToken --output json > ./export2.json

关于导入,BatchWriteItem 最多可以写入 16 MB 或 25 个放置或删除请求。您可以将 max_items 设置为 25 或使用 jq 拆分它。

您可以通过 jq 将 json 转换为 BatchWriteItem cli。

cat filepath | jq "{\"table_name\": [.[] | {PutRequest: {Item: .}}]}" > BatchWriteItem.txt

最后,您可以使用 cmd 将 dynamodb 插入。

aws dynamodb batch-write-item --request-items file://filepath

如果数据很大,最好使用 shell 脚本。更多详情: https ://github.com/mickey2012ex/dynamodb-data-migrator

如果支持该区域,最好的解决方案是 AWS Data Pipeline


推荐阅读