使用 AWS CLI 的 DynamoDB BatchWriteItem

aws dynamodb batch-write-item 在一条命令中写入或删除多达 25 个项目(合计 16 MB,每项 400 KB)。这些写入以 DynamoDB JSON 形式放入 --request-items,构成一个表 → PutRequest/DeleteRequest 条目的映射——而且你必须检查输出中的 UnprocessedItems,因为整个批次并非原子操作。

Code

aws dynamodb batch-write-item \
  --request-items '{
    "Music": [
      {"PutRequest": {"Item": {"Artist": {"S": "Arturo Sandoval"}, "SongTitle": {"S": "Cubano Chant"}, "AlbumTitle": {"S": "Danzon"}, "Year": {"N": "1994"}}}},
      {"PutRequest": {"Item": {"Artist": {"S": "Arturo Sandoval"}, "SongTitle": {"S": "A Mis Abuelos"}, "AlbumTitle": {"S": "Danzon"}, "Year": {"N": "1994"}}}},
      {"DeleteRequest": {"Key": {"Artist": {"S": "Ella Fitzgerald"}, "SongTitle": {"S": "Misty"}}}}
    ]
  }'

当一切写入成功时,输出中的剩余项映射为空:

{
    "UnprocessedItems": {}
}

说明

  • --request-items — 一个表名 → 至多 25 个 PutRequest/DeleteRequest 条目数组的映射(一条命令可以跨多张表)。每个 PutRequest.Item 需要完整主键;每个 DeleteRequest.Key 只需键即可。值采用 DynamoDB JSON——数字在 N 下以字符串形式表示。
  • 不是事务 — 每个 put/delete 单独看是原子的,但整个批次不是。需要全有或全无?请使用 transact-write-items
  • UnprocessedItems — CLI 不会自动重试部分完成的批次。如果该映射非空(通常是限流所致),就用那个原样的映射作为 --request-items 重新运行命令——它已经是正确的格式——并在两次尝试之间进行退避。
  • 无更新、无条件batch-write-item 无法表达 update-item--condition-expression--return-values;对已存在键的 put 会静默地替换整个项目。重复键、对同一项目同时 put+delete、超过 25 个请求、单项超过 400 KB,或合计超过 16 MB,都会导致 DynamoDB 拒绝整个批次。
  • 提示:把映射放进文件并用 --request-items file://writes.json 传入——内联对 25 个项目做 shell 引号转义会让人痛苦。

可视化操作

在 shell 引号里手写嵌套的 DynamoDB JSON 很容易出错。DynamoDB Expression Builder 会构建带类型的值映射并复制可直接运行的 CLI 命令,而项目大小计算器会对照 400 KB 上限检查每个项目。

想在 GUI 中批量添加、编辑和删除项目——用 CSV/JSON 导入代替 JSON 转义——请下载 DynoTable

相关示例

References

Last verified 2026-07-13 against the official AWS documentation linked above.

无需控制台即可使用 DynamoDB

DynoTable 是面向 DynamoDB 的快速桌面客户端 —— 浏览表、运行 SQL 风格的查询,并在本地编辑项。