Too many items requested for the BatchWriteItem call

TL;DR — BatchWriteItem nimmt höchstens 25 Put-/Delete-Aktionen pro Aufruf an (und ≤16 MB insgesamt). Du hast mehr als 25 geschickt, also hat DynamoDB den ganzen Request abgelehnt. Teile deine Items in Blöcke von höchstens 25 und schick pro Block ein BatchWriteItem.

Was es bedeutet

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

Der Service spiegelt an der Stelle von <your request> deine gesamte serialisierte Anfrage zurück — bei einem Batch mit 26 Items sind das rund 12.000 Zeichen.

BatchWriteItem bündelt einzelne PutRequest-/DeleteRequest-Aktionen über eine oder mehrere Tabellen — aber ein einzelner Aufruf ist hart auf 25 Aktionen und 16 MB Daten gedeckelt. Überschreite eines der Limits, und DynamoDB weist die gesamte Anfrage ab, bevor irgendetwas geschrieben wird. Es ist ein HTTP 400 ValidationException, clientseitig und nicht wiederholbar, bis du den Batch verkleinerst.

Warum es passiert

  • Eine große Sammlung in einem Aufruf schreiben — ein Array aus Hunderten Items ohne Blockung direkt in BatchWriteItem übergeben.
  • Eine Block-Schleife mit falscher Grenze — nach Anzahl gebündelt, aber ein Limit über 25 verwendet, oder ein Off-by-one, das 26 durchlässt.
  • Tabellen zählen statt Aktionen — das 25er-Limit sind Aktionen insgesamt über alle Tabellen der Anfrage, nicht pro Tabelle.
  • Überdimensionierte Payload — selbst bei ≤25 Aktionen wird der ganze Batch abgewiesen, wenn ein einzelnes Item 400 KB überschreitet oder die Gesamtanfrage 16 MB überschreitet.

So behebst du es

  1. Blocke in Gruppen von ≤25 Aktionen und sende pro Block ein BatchWriteItem.
  2. Behandle UnprocessedItemsBatchWriteItem kann Items zurückgeben, die es nicht verarbeitet hat (Throttling); wiederhole diese mit exponentiellem Backoff. Das ist normal, selbst innerhalb eines gültigen 25-Item-Batches.
  3. Halte jeden Batch unter 16 MB — bei großen Items brauchst du eventuell weniger als 25 pro Aufruf.
  4. Nutze einen Helper, der für dich puffert — boto3s Table.batch_writer() blockt Writes und sendet unverarbeitete Items automatisch neu (der Enhanced Client des Java-SDK / v1 DynamoDBMapper wiederholen unverarbeitete Items ebenfalls). Die Low-Level-Clients und der JavaScript-Document-Client teilen einen überdimensionierten Batch nicht auf.

In DynoTable messen

Bevor du Daten bulk-loadest, spot-check item sizes in DynoTable — open a sample item with ⌘K and confirm each fits under 400 KB. The Item-Size-Rechner estimates batch payload size so you pick a safe chunk size before your loader runs.

Nutze Staging (⌘S) to test a small batch write against a dev table bevor du run the full import. Wechsle Profile mit ⌘P; konfiguriere sie unter Einstellungen → Profile mit Verbindung testen. Siehe Mit AWS verbinden und Installation.

Quellen

Verwandte Fehler

Referenzen

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

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.