amazon-dynamodb - 出口 | 仅使用 AWS CLI 导入 DynamoDB
问题描述
我的目标是拥有一个简单的工具,用于将 dynamodb 导出到本地文件(json/csv),只有aws cli
尽可能少的第 3 方。我的桌子大小约为 500mb。
我正在研究这几天,我看到了非常好的项目,比如dynamodump
和另一个 SDK 实现。我还测试了Datapipeline
来自 Amazon 的,但对于我的目标任务,我想要简单的aws cli
.
假设我已经有了表的映射,例如索引和属性。现在我只想导入我拥有的项目。对我来说,我所拥有的实现的最佳解决方案将是这样的:
将表从 aws 导出到本地文件:
aws dynamodb scan --table-name SOMETABLENAME --output json | jq '.Items[]' > SOMETABLENAME.json
sed
使用,jq
,awk
... 等内容渲染文件。获取可以导入到 aws-dynamodb 的正确 json 格式使用以下命令将项目从 SOMETABLENAME 导入 aws-dynamodb:
aws dynamodb put-item --table-name SOMETABLENAME --item file://SOMETABLENAME.json
解决方案
您可以使用 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
推荐阅读
- python - 无法捕获 InvalidFileException
- php - OpenCart 错误未捕获错误:类“Controllerextensiontotalaffiliate”
- java - java spring中的webapplication文件夹名称是否必须是webapp?
- java - 为什么当 Consumer 只接受一个参数时,forEach 方法接受调用具有多个参数的方法的 lambda?
- flutter - 从 Flutter 中的 API 获取数据后如何导航到新屏幕?
- ios - 现在如何在 RealmSwift 4.0 更新中使用枚举?
- python - 使用 BeautifulSoup 从网页中提取文本和图像
- google-apps-script - Google 表格脚本语言中的“当前区域”概念
- angular - Angular 9 - 自定义验证器组
- android - 用 Firebase 上的新图片替换现有图片