Too many items requested for the BatchWriteItem call
En bref — BatchWriteItem accepte au plus 25 actions put/delete par appel (et ≤16 Mo au total). Tu en as envoyé plus de 25, donc DynamoDB a rejeté toute la requête. Découpe tes éléments en lots de 25 ou moins et émets un BatchWriteItem par lot.
Ce que ça signifie
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 callLe service recopie toute ta requête sérialisée à l'emplacement de <your request> — environ 12 000 caractères pour un lot de 26 éléments.
BatchWriteItem regroupe des actions PutRequest/DeleteRequest individuelles sur une ou plusieurs tables — mais un seul appel est strictement plafonné à 25 actions et 16 Mo de données. Franchis l'une ou l'autre limite et DynamoDB rejette toute la requête avant d'écrire quoi que ce soit. C'est un HTTP 400 ValidationException, côté client, et non réessayable tant que tu ne redimensionnes pas le lot.
Pourquoi ça arrive
- Écrire une grande collection en un seul appel — passer un tableau de centaines d'éléments directement dans
BatchWriteItemsans découper. - Une boucle de découpage avec la mauvaise borne — batcher par nombre mais utiliser une limite supérieure à 25, ou une erreur de décalage qui laisse passer 26.
- Compter les tables, pas les actions — la limite de 25 est le total des actions sur toutes les tables de la requête, pas par table.
- Charge utile surdimensionnée — même à ≤25 actions, tout le lot est rejeté si un seul élément dépasse 400 Ko ou si la requête totale dépasse 16 Mo.
Comment le corriger
- Découpe en groupes de ≤25 actions et envoie un
BatchWriteItempar groupe. - Gère
UnprocessedItems—BatchWriteItempeut renvoyer des éléments qu'il n'a pas traités (throttling) ; réessaie-les avec un backoff exponentiel. C'est normal, même dans un lot valide de 25 éléments. - Garde chaque lot sous 16 Mo — avec de gros éléments, il te faudra peut-être moins de 25 par appel.
- Utilise un utilitaire qui met en tampon pour toi — le
Table.batch_writer()de boto3 découpe les écritures et renvoie automatiquement les éléments non traités (l'Enhanced Client / le DynamoDBMapper v1 du SDK Java réessaient aussi les éléments non traités). Les clients bas niveau et le document client JavaScript ne découpent pas un lot surdimensionné.
Mesure dans DynoTable
Avant un chargement en masse, vérifie ponctuellement la taille des éléments dans DynoTable — ouvre un élément d'exemple avec ⌘K et confirme que chacun tient sous 400 Ko. Le calculateur de taille d'élément estime la taille de la charge utile d'un lot, de quoi choisir une taille de lot sûre avant que ton chargeur ne tourne.
Sers-toi du staging (⌘S) pour tester une petite écriture par lot sur une table de dev avant de lancer l'import complet. Change de profil avec ⌘P ; configure-les sous Settings → Profiles avec Test Connection. Vois Se connecter à AWS et Installation.
Sources
- BatchWriteItem — Amazon DynamoDB API Reference (vérifié le 2026-07-13)
- Amazon DynamoDB — AWS SDK for Python (Boto3) guide (vérifié le 2026-07-13)
Erreurs liées
- Too many items requested for the BatchGetItem call — la limite côté lecture (100 éléments).
- Provided list of item keys contains duplicates — la même clé deux fois dans un seul BatchWriteItem.
- ProvisionedThroughputExceededException — throttling qui apparaît sous forme d'UnprocessedItems.
- Exemple de code : BatchWriteItem en Node.js · en Python (boto3) — écritures découpées avec réessai d'UnprocessedItems.
- Apprends : DynamoDB batch operations
Références
- 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
Dernière vérification le 2026-07-13 par rapport à la documentation officielle AWS liée ci-dessus.