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,整個批次也會被拒絕。

如何修正

  1. 分塊成每組 ≤25 個操作,併為每個分塊傳送一次 BatchWriteItem
  2. 處理 UnprocessedItems——BatchWriteItem 可能返回它未處理的項目(限流);用指數退避重試它們。即使在一個有效的 25 項批次中,這也是正常現象。
  3. 讓每個批次保持在 16 MB 以下——項目較大時,你可能每次呼叫需要少於 25 個。
  4. 使用一個幫你緩衝的輔助工具——boto3 的 Table.batch_writer() 會自動分塊寫入並重發未處理的項目(Java SDK 的 Enhanced Client / v1 DynamoDBMapper 也會重試未處理的項目)。底層用戶端和 JavaScript 文件用戶端不會拆分超大的批次。

在 DynoTable 中測量

在批次載入資料之前,抽查 DynoTable 中的項目大小 — 使用 ⌘K 開啟示例項目,並確認每個項目大小不超過 400 KB。 item size calculator 估計批次有效負載大小,以便你在載入程式執行之前選擇一個安全的塊大小。在執行完全匯入之前,使用暫存 (⌘S) 測試針對開發表的小批次寫入。使用 ⌘P 切換設定檔案;在“設定”→“設定檔案”下使用“Test Connection”配置它們。參見連線 AWS安裝

來源

相關錯誤

參考資料

最後核實於 2026-07-13,依據上方連結的 AWS 官方文件。

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

一款快速的 DynamoDB 桌面用戶端,可執行 DynamoDB 無法執行的真正 SQL — JOINs、GROUP BY、聚合 — 並支援視覺化編輯與使用你自己的 Bedrock 金鑰的 AI 代理。

30 天免費試用,無需信用卡 — 之後為無時間限制的免費方案。