Too many items requested for the BatchGetItem call

TL;DR — BatchGetItem liest höchstens 100 Items pro Aufruf (und ≤16 MB Daten). Du hast mehr als 100 Keys angefordert, also hat DynamoDB die Anfrage abgewiesen. Teile deine Keys in Blöcke von höchstens 100 und setze pro Block ein BatchGetItem ab.

Was es bedeutet

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 holt Items per Primärschlüssel über eine oder mehrere Tabellen, aber ein einzelner Aufruf ist auf 100 Keys und 16 MB zurückgegebener Daten gedeckelt. Forderst du mehr als 100 an, weist DynamoDB den gesamten Aufruf ab. Selbst innerhalb des Limits kann eine Antwort weniger Items als angefragt zurückgeben (die 16-MB-Obergrenze) und den Rest in UnprocessedKeys melden. Der Über-Limit-Fall ist ein HTTP 400 ValidationException, nicht wiederholbar, bis die Größe angepasst ist.

Warum es passiert

  • Anfordern einer großen Key-Menge in einem Aufruf — Hunderte Keys direkt in BatchGetItem übergeben.
  • Eine Blockgrenze über 100 — nach Anzahl gebündelt, aber fälschlich das Pendant des 25-Item-BatchWrite-Limits verwendet, oder ein Off-by-one, das 101 durchlässt.
  • Tabellen zählen statt Keys — das 100er-Limit sind Keys insgesamt über alle Tabellen der Anfrage.
  • UnprocessedKeys nicht paginieren — anzunehmen, ein Aufruf gibt alles zurück, sodass du nie in Blöcke teilst.

So behebst du es

  1. Teile Keys in Gruppen von ≤100 und sende pro Block ein BatchGetItem.
  2. Behandle UnprocessedKeys — wiederhole zurückgegebene Keys mit exponentiellem Backoff; das passiert selbst innerhalb eines gültigen 100-Key-Batches, wenn die 16-MB-Grenze erreicht wird.
  3. Halte Antworten unter 16 MB — fordere bei großen Items weniger als 100 pro Aufruf an.
  4. Wisse, was dein SDK für dich tut — die Low-Level-Clients und der JavaScript-Document-Client teilen eine überdimensionierte Key-Liste nicht auf; du musst selbst auf 100 blocken. Manche höheren Clients (der Enhanced Client des Java-SDK und v1 DynamoDBMapper) wiederholen zumindest unverarbeitete Items automatisch.
  5. Entferne Duplikate vor dem Blocken. Doppelte Keys in einem Batch schlagen separat fehl — erst deduplizieren, dann in Blöcke teilen.

So reproduzierst du es

Ein BatchGetItem, das 101 Keys anfordert — einen über der Obergrenze:

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

Echte Ausgabe:

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

Dieser Aufruf scheitert sofort an der Form der Anfrage — es findet kein teilweiser Read statt, und nichts landet in UnprocessedKeys. Genau das ist der Unterschied zum Überschreiten des 16-MB-Antwortlimits, das sehr wohl Teilergebnisse zurückgibt.

Über DynoTable

Lies in DynoTable beim Debuggen weniger als 100 Keys auf einmal im Batch — öffne die Tabelle mit ⌘K, filtere auf dein Key-Set und stelle sicher, dass die Items existieren, bevor du geblocktes BatchGetItem im Code verdrahtest. Der Item-Size-Rechner hilft, eine sichere Chunk-Größe zu wählen, wenn Items groß sind.

Nutze den Query Builder, um zuerst Single-Key-Reads zu prototypen. Wechsle Profile mit ⌘P; Verbindung testen unter Einstellungen → Profile. Siehe Mit AWS verbinden und Installation.

Quellen

Verwandte Fehler

Referenzen

Zuletzt verifiziert am 2026-07-13 gegen die oben verlinkte offizielle AWS-Dokumentation.

Am 2026-07-26 gegen DynamoDB Local 2.x mit dem AWS SDK for JavaScript v3.1095.0 reproduziert — die Ausgabe oben ist wortgetreu.

Mit DynamoDB ohne die Console arbeiten

Ein schneller DynamoDB-Desktop-Client, der das echte SQL ausführt, das DynamoDB nicht kann — JOINs, GROUP BY, Aggregationen — mit visueller Bearbeitung und einem KI-Agenten auf deinen eigenen Bedrock-Schlüsseln.

30 Tage kostenlos testen, keine Kreditkarte — danach der Kostenlos-Tarif ohne Zeitlimit.