如何通过CLI从DynamoDB导出含指定字符串主键的数据并导入至其他表?
解决DynamoDB导出含特定主键字符串数据并导入的问题
问题根源
你之前用的--scan-filter参数已经被AWS弃用,而且直接用scan导出的JSON格式不符合DynamoDB批量导入的要求(批量导入需要特定的PutRequest结构包裹),所以无法直接导入。
分步解决方案
1. 正确导出符合条件的数据
改用官方推荐的--filter-expression参数筛选主键包含特定字符串的数据,导出到JSON文件:
aws dynamodb scan \ --table-name 你的源表名称 \ --filter-expression "contains(#pk, :search_str)" \ --expression-attribute-names '{"#pk": "你的主键属性名"}' \ --expression-attribute-values '{":search_str": {"S": "ser"}}' \ --output json > filtered_data.json
注意替换:
你的源表名称:实际的源DynamoDB表名你的主键属性名:如果你的主键不是Name,改成实际属性名ser:你要筛选的特定字符串
2. 转换数据为可导入格式
DynamoDB的batch-write-item要求导入数据是PutRequest包裹的结构,用jq工具转换导出的JSON:
jq '{RequestItems: {"你的目标表名称": [.Items[] | {PutRequest: {Item: .}}]}}' filtered_data.json > import_ready.json
替换你的目标表名称为实际要导入的表名。
3. 执行批量导入
用转换后的文件执行导入:
aws dynamodb batch-write-item --request-items file://import_ready.json
注意事项
- 如果数据量超过
batch-write-item限制(单次最多25个项目或16MB),需要拆分文件分批导入。可以用jq按每20个项目拆分:
然后批量执行导入:jq -c ' .RequestItems."你的目标表名称" |= _nwise(20) ' import_ready.json | split -l 1 -d -a 3 - import_part_for file in import_part_*; do aws dynamodb batch-write-item --request-items file://$file rm $file done - 确保源表和目标表的主键结构完全一致,否则导入会失败。
内容的提问来源于stack exchange,提问作者bash_hunter6159
相关产品推荐
相关产品推荐

