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 callDer 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
- Blocke in Gruppen von ≤25 Aktionen und sende pro Block ein
BatchWriteItem. - Behandle
UnprocessedItems—BatchWriteItemkann 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. - Halte jeden Batch unter 16 MB — bei großen Items brauchst du eventuell weniger als 25 pro Aufruf.
- 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
- BatchWriteItem — Amazon DynamoDB API Reference (verifiziert 2026-07-13)
- Amazon DynamoDB — AWS SDK for Python (Boto3) guide (verifiziert 2026-07-13)
Verwandte Fehler
- Too many items requested for the BatchGetItem call — das Lese-seitige Limit (100 Items).
- Provided list of item keys contains duplicates — derselbe Key zweimal in einem BatchWriteItem.
- ProvisionedThroughputExceededException — Throttling, das als UnprocessedItems erscheint.
- Code example: BatchWriteItem in Node.js · in Python (boto3) — geblockte Writes mit UnprocessedItems-Retry.
- Learn: DynamoDB-Batch-Operationen
Referenzen
- BatchWriteItem — Amazon DynamoDB API Reference
- BatchGetItem — Amazon DynamoDB API Reference
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
- Amazon DynamoDB — AWS SDK for Python (Boto3) guide
Zuletzt verifiziert am 2026-07-13 gegen die oben verlinkte offizielle AWS-Dokumentation.