我的目标是要有一个简单的工具,以尽可能仅将aws cli
或更少的第3方导出dynamodb到本地文件(json / csv)。我桌子的大小约为500mb。
我已经进行了几天的研究,并且看到了非常不错的项目,例如dynamodump
和另一个SDK实现。我还测试了来自亚马逊的Datapipeline
,但是对于我要定位的任务,需要简单的aws cli
。
比方说,我已经有了该表的映射,例如索引和属性。现在我只想导入我拥有的Items。对我来说,实现的最佳解决方案是这样的:
将表从AWS导出到本地文件:
aws dynamodb scan --table-name SOMETABLENAME --output json | jq '.Items[]' > SOMETABLENAME.json
使用sed
,jq
,awk
等来渲染文件。为了获得可以导入到aws-dynamodb
使用以下命令将项目从SOMETABLENAME导入到aws-dynamodb:
aws dynamodb put-item --table-name SOMETABLENAME --item file://SOMETABLENAME.json
答案 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(如果该区域受支持)