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 callBatchGetItem 按主索引鍵跨一張或多張表取回項目,但單次呼叫被限制在 100 個鍵和 16 MB 返回資料。請求超過 100 個,DynamoDB 就會拒絕整個呼叫。即便在限額之內,一次響應返回的項目也可能比你要的少(因為 16 MB 上限),剩下的會在 UnprocessedKeys 中報告出來。超限這種情況是 HTTP 400 ValidationException,在改小之前不可重試。
為什麼會發生
- 一次呼叫裡請求了一大批鍵——把幾百個鍵直接塞進
BatchGetItem。 - 分組上界高於 100——按數量分批時誤用了 BatchWrite 那邊 25 個項目的限制,或者一個差一錯誤放了 101 個進去。
- 數的是表,不是鍵——100 這個限制是請求中所有表的鍵總數。
- 沒有對
UnprocessedKeys分頁——以為一次呼叫就能返回全部,於是從不分組。
如何修正
- 把鍵切成 ≤100 個一組,每組發一次
BatchGetItem。 - 處理
UnprocessedKeys——用指數退避重試返回的那些鍵;即使在一個合法的 100 鍵批次內,撞上 16 MB 上限時也會發生這種情況。 - 讓響應保持在 16 MB 以內——項目較大時,每次呼叫請求少於 100 個。
- 搞清楚你的 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和安裝。
來源
- BatchGetItem — Amazon DynamoDB API Reference(2026-07-13 驗證)
- Quotas in Amazon DynamoDB(2026-07-13 驗證)
相關錯誤
- Too many items requested for the BatchWriteItem call——寫入側的限制(25 個項目)。
- Provided list of item keys contains duplicates——同一個鍵在一次 BatchGetItem 裡出現兩次。
- ProvisionedThroughputExceededException——以 UnprocessedKeys 形式浮現出來的限流。
- 程式碼示例:BatchGetItem in Node.js · in Python (boto3)——帶 UnprocessedKeys 重試的分組讀取。
- 學習:DynamoDB batch operations
參考資料
- BatchGetItem — Amazon DynamoDB API Reference
- BatchWriteItem — Amazon DynamoDB API Reference
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
- Quotas in Amazon DynamoDB — Amazon DynamoDB Developer Guide
最後核實於 2026-07-13,依據上方連結的 AWS 官方文件。
2026-07-26 針對 DynamoDB Local 2.x 與 AWS SDK for JavaScript v3.1095.0 復現——上方輸出為原樣照錄。