使用 AWS CLI 執行 DynamoDB BatchWriteItem

aws dynamodb batch-write-item 在單一指令中 put 或 delete 多達 25 個項目(合計 16 MB,每個項目 400 KB)。寫入放在 --request-items 中,格式為表格 → PutRequest/DeleteRequest 項目的 map,以 DynamoDB JSON 表示 — 而你必須檢查輸出中的 UnprocessedItems,因為整個批次並非 atomic。

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"}}}}
    ]
  }'

當一切都寫入時,輸出的剩餘 map 為空:

{
    "UnprocessedItems": {}
}

說明

  • --request-items — 表格名稱 → 多達 25 個 PutRequest/DeleteRequest 項目陣列的 map(一個指令可橫跨多個表格)。每個 PutRequest.Item 需要完整的 primary key;每個 DeleteRequest.Key 只需 key。值為 DynamoDB JSON — 數字在 N 下以字串表示。
  • 不是交易 — 每個 put/delete 各自是 atomic,但整個批次不是。需要全有或全無?請用 transact-write-items
  • UnprocessedItems — CLI 不會自動重試部分批次。若這個 map 非空(通常是節流所致),請以那個完全相同的 map 作為 --request-items 重跑指令 — 它已經是正確的形狀 — 並在嘗試之間退避。
  • 不支援更新、不支援條件batch-write-item 無法表達 update-item--condition-expression--return-values;對既有 key 的 put 會靜默取代整個項目。重複的 key、對同一項目同時 put+delete、超過 25 個請求、超過 400 KB 的項目,或合計超過 16 MB,都會讓 DynamoDB 拒絕整個批次。
  • 提示:把 map 放進檔案並以 --request-items file://writes.json 傳入 — 在行內以 shell 引號處理 25 個項目是折磨。

改用視覺化操作

在 shell 引號中手寫巢狀 DynamoDB JSON 容易出錯。DynamoDB Expression Builder 會建立帶型別的 value map 並複製可直接執行的 CLI 指令,而 項目大小計算機 會對照 400 KB 上限檢查每個項目。

想在 GUI 中大量新增、編輯與刪除項目 — 以 CSV/JSON 匯入取代 JSON 跳脫 — 下載 DynoTable

相關範例

References

最後驗證於 2026-07-13,對照上方連結的 AWS 官方文件。

不必透過主控台就能操作 DynamoDB

DynoTable 是一款快速的 DynamoDB 桌面用戶端 — 瀏覽表格、執行 SQL 風格的查詢,並在本機編輯項目。