Too many items requested for the BatchGetItem call

TL;DR — BatchGetItem 每次呼叫最多取回 100 個項目(且不超過 16 MB 資料)。你請求了超過 100 個鍵,所以 DynamoDB 拒絕了這個請求。把你的鍵切成不超過 100 個一組,每組發一次 BatchGetItem

這是什麼意思

ValidationException: 1 validation error detected: Value at 'RequestItems.<table-name>.member.Keys' failed to satisfy constraint: Member must have length less than or equal to 100

# on DynamoDB Local the same call is rejected with a shorter sentence:
ValidationException: Too many items requested for the BatchGetItem call

BatchGetItem 按主索引鍵跨一張或多張表取回項目,但單次呼叫被限制在 100 個鍵16 MB 返回資料。請求超過 100 個,DynamoDB 就會拒絕整個呼叫。即便在限額之內,一次響應返回的項目也可能比你要的少(因為 16 MB 上限),剩下的會在 UnprocessedKeys 中報告出來。超限這種情況是 HTTP 400 ValidationException,在改小之前不可重試。

為什麼會發生

  • 一次呼叫裡請求了一大批鍵——把幾百個鍵直接塞進 BatchGetItem
  • 分組上界高於 100——按數量分批時誤用了 BatchWrite 那邊 25 個項目的限制,或者一個差一錯誤放了 101 個進去。
  • 數的是表,不是鍵——100 這個限制是請求中所有表的鍵總數。
  • 沒有對 UnprocessedKeys 分頁——以為一次呼叫就能返回全部,於是從不分組。

如何修正

  1. 把鍵切成 ≤100 個一組,每組發一次 BatchGetItem
  2. 處理 UnprocessedKeys——用指數退避重試返回的那些鍵;即使在一個合法的 100 鍵批次內,撞上 16 MB 上限時也會發生這種情況。
  3. 讓響應保持在 16 MB 以內——項目較大時,每次呼叫請求少於 100 個。
  4. 搞清楚你的 SDK 替你做了什麼——底層用戶端和 JavaScript 的 document client 不會拆分過長的鍵列表;你必須自己切到 100。某些上層用戶端(Java SDK 的 Enhanced Client 和 v1 的 DynamoDBMapper)至少會自動重試未處理的項目。

重現方式

A BatchGetItem 要求 101 個鑰匙,其中一把超出上限:

const Keys = Array.from({length: 101}, (_, i) => ({pk: {S: `K#${i}`}, sk: {S: 'META'}}));
await client.send(new BatchGetItemCommand({RequestItems: {orders: {Keys}}}));

實際輸出:

ValidationException: Too many items requested for the BatchGetItem call
HTTP 400

這個在請求形狀上很快就失敗了——沒有發生部分讀取,並且沒有任何內容落在 UnprocessedKeys 中。這就是超過 100 個鍵限制和超過 16 MB 響應限制之間的區別,後者確實返回部分結果。

從 DynoTable

除錯時,在 DynoTable 中一次批次讀取少於 100 個鍵 — 使用 ⌘K 開啟表,過濾到鍵集,並在程式碼中連線分塊 BatchGetItem 之前確認項目存在。當項目很大時,item size calculator有助於選擇安全的塊大小。首先使用 Query Builder 構建單鍵讀取原型。使用 ⌘P 切換設定檔案; 在“設定”→“設定檔案”上測試連線。參見連線 AWS安裝

來源

相關錯誤

參考資料

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

2026-07-26 針對 DynamoDB Local 2.x 與 AWS SDK for JavaScript v3.1095.0 復現——上方輸出為原樣照錄。

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

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

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