出口|仅使用AWS CLI导入DynamoDB

时间:2019-02-18 17:56:33

标签: amazon-dynamodb aws-cli

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

我已经进行了几天的研究,并且看到了非常不错的项目,例如dynamodump和另一个SDK实现。我还测试了来自亚马逊的Datapipeline,但是对于我要定位的任务,需要简单的aws cli

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

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

  2. 使用sedjqawk等来渲染文件。为了获得可以导入到aws-dynamodb

  3. 的正确json格式
  4. 使用以下命令将项目从SOMETABLENAME导入到aws-dynamodb:

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

2 个答案:

答案 0 :(得分:0)

DynamoDB发布了一项新功能,可将数据导出到S3存储桶。这是一种本机的,无服务器的解决方案,可以根据需要通过CLI使用-参见:

https://docs.aws.amazon.com/cli/latest/reference/dynamodb/export-table-to-point-in-time.html

这将帮助您在不进行中间扫描的情况下获得第一名,但是不幸的是,截至2020年11月,没有本机导入功能可将其导入新表。

如果您感兴趣的只是将数据从一个表转移到另一个表,则可以使用PiTR:

https://docs.aws.amazon.com/cli/latest/reference/dynamodb/restore-table-to-point-in-time.html

答案 1 :(得分:-1)

您可以使用 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(如果该区域受支持)