Too many items requested for the BatchWriteItem call
TL;DR — BatchWriteItem 每次呼叫最多接受 25 個 put/delete 操作(且合計 ≤16 MB)。你傳送了超過 25 個,所以 DynamoDB 拒絕了整個請求。把你的項目拆分成每組不超過 25 個,併為每個分塊發起一次 BatchWriteItem。
這是什麼意思
ValidationException: 1 validation error detected: Value '<your request>' at 'requestItems' failed to satisfy constraint: Map value must satisfy constraint: [Member must have length less than or equal to 25, Member must have length greater than or equal to 1]
# on DynamoDB Local the same call is rejected with a shorter sentence:
ValidationException: Too many items requested for the BatchWriteItem call服務會在 <your request> 所在的位置原樣回顯你整個序列化後的請求——一個 26 個項目的批次大約是 12,000 個字元。
BatchWriteItem 跨一張或多張表批次處理單個的 PutRequest/DeleteRequest 操作——但單次呼叫被硬性限制在 25 個操作和 16 MB 資料。越過任一限制,DynamoDB 會在寫入任何內容之前拒絕整個請求。它是一個 HTTP 400 ValidationException,屬於用戶端錯誤,在你調整批次大小之前不可重試。
為什麼會發生
- 在一次呼叫中寫入一個大集合——把一個包含數百個項目的陣列直接傳入
BatchWriteItem而不分塊。 - 分塊迴圈的邊界不對——按數量分批,卻使用了超過 25 的限制,或者一個差一錯誤讓 26 透過了。
- 數的是表而不是操作——25 的限制是請求中所有表的操作總數,而不是每張表。
- 載荷過大——即使運算元 ≤25,只要有任何單個項目超過 400 KB 或請求總量超過 16 MB,整個批次也會被拒絕。
如何修正
- 分塊成每組 ≤25 個操作,併為每個分塊傳送一次
BatchWriteItem。 - 處理
UnprocessedItems——BatchWriteItem可能返回它未處理的項目(限流);用指數退避重試它們。即使在一個有效的 25 項批次中,這也是正常現象。 - 讓每個批次保持在 16 MB 以下——項目較大時,你可能每次呼叫需要少於 25 個。
- 使用一個幫你緩衝的輔助工具——boto3 的
Table.batch_writer()會自動分塊寫入並重發未處理的項目(Java SDK 的 Enhanced Client / v1 DynamoDBMapper 也會重試未處理的項目)。底層用戶端和 JavaScript 文件用戶端不會拆分超大的批次。
在 DynoTable 中測量
在批次載入資料之前,抽查 DynoTable 中的項目大小 — 使用 ⌘K 開啟示例項目,並確認每個項目大小不超過 400 KB。 item size calculator 估計批次有效負載大小,以便你在載入程式執行之前選擇一個安全的塊大小。在執行完全匯入之前,使用暫存 (⌘S) 測試針對開發表的小批次寫入。使用 ⌘P 切換設定檔案;在“設定”→“設定檔案”下使用“Test Connection”配置它們。參見連線 AWS和安裝。
來源
- BatchWriteItem — Amazon DynamoDB API Reference(2026-07-13 驗證)
- Amazon DynamoDB — AWS SDK for Python (Boto3) guide(2026-07-13 驗證)
相關錯誤
- Too many items requested for the BatchGetItem call——讀取側的限制(100 個項目)。
- Provided list of item keys contains duplicates——同一個鍵在一次 BatchWriteItem 中出現兩次。
- ProvisionedThroughputExceededException——以 UnprocessedItems 形式浮現的限流。
- 程式碼示例:BatchWriteItem in Node.js · in Python (boto3)——帶 UnprocessedItems 重試的分塊寫入。
- 學習:DynamoDB batch operations
參考資料
- BatchWriteItem — Amazon DynamoDB API Reference
- BatchGetItem — Amazon DynamoDB API Reference
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
- Amazon DynamoDB — AWS SDK for Python (Boto3) guide
最後核實於 2026-07-13,依據上方連結的 AWS 官方文件。