Troppi elementi richiesti per la chiamata BatchWriteItem
TL;DR — BatchWriteItem accetta al massimo 25 azioni di inserimento/eliminazione per chiamata (e ≤16 MB in totale). Ne hai inviati più di 25, quindi DynamoDB ha rifiutato l'intera richiesta. Dividi i tuoi articoli in blocchi di 25 o meno ed emetti un BatchWriteItem per blocco.
Cosa significa
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 callIl servizio riecheggia l'intera richiesta serializzata in cui si trova "
BatchWriteItem raggruppa singole azioni PutRequest/DeleteRequest su una o più tabelle, ma una singola chiamata ha un limite massimo di 25 azioni e 16 MB di dati. Supera uno dei limiti e DynamoDB rifiuta l'intera richiesta prima di scrivere qualsiasi cosa. Si tratta di una "ValidationException" HTTP 400, lato client, e non è possibile riprovarla finché non si ridimensiona il batch.
Perché succede
- Scrivere una vasta raccolta in una chiamata: passare un array di centinaia di elementi direttamente in
BatchWriteItemsenza suddivisione in blocchi. - Un loop di blocchi con il limite sbagliato: raggruppamento per conteggio ma utilizzando un limite superiore a 25 o un off-by-one che lascia passare 26.
- Conteggio delle tabelle, non delle azioni: il limite di 25 corrisponde alle azioni totali su tutte le tabelle nella richiesta, non per tabella.
- Payload sovradimensionato: anche con ≤25 azioni l'intero batch viene rifiutato se un singolo elemento supera i 400 KB o la richiesta totale supera i 16 MB.
Come risolverlo
- Dividi in gruppi di ≤25 azioni e invia un
BatchWriteItemper blocco. - Handle
UnprocessedItems—BatchWriteItempuò restituire elementi che non ha elaborato (limitazione); riprovare quelli con backoff esponenziale. Ciò è normale anche all'interno di un lotto valido di 25 articoli. - Mantieni ogni batch al di sotto dei 16 MB: con articoli di grandi dimensioni potresti averne bisogno di meno di 25 per chiamata.
- Utilizza un helper che esegue il buffering per te — i blocchi
Table.batch_writer()di boto3 scrivono e inviano nuovamente gli elementi non elaborati automaticamente (Enhanced Client/v1 DynamoDBMapper di Java SDK riprova anche gli elementi non elaborati). I client di basso livello e il client di documenti JavaScript non dividono un batch di grandi dimensioni. - Ridimensiona ogni blocco in byte e conta. Venticinque elementi di grandi dimensioni possono superare i 16 MB anche quando il conteggio delle azioni è valido.
Misura in DynoTable
Prima di caricare in blocco i dati, controlla a campione le dimensioni degli articoli in DynoTable: apri un articolo di esempio con ⌘K e verifica che ciascuno rientri sotto i 400 KB. Il calcolatore della dimensione dell'elemento stima la dimensione del payload batch in modo da poter scegliere una dimensione sicura del blocco prima dell'esecuzione del caricatore.
Utilizza la gestione temporanea (⌘S) per testare una piccola scrittura batch rispetto a una tabella di sviluppo prima di eseguire l'importazione completa. Cambia profilo con ⌘P; configurarli in Impostazioni → Profili con Connessione di prova. Consulta Connetti a AWS e Installa.
Fonti
- BatchWriteItem — Riferimento Amazon DynamoDB API (verificato il 13-07-2026)
- Guida Amazon DynamoDB — AWS SDK per Python (Boto3) (verificato il 13-07-2026)
Errori correlati
- Troppi elementi richiesti per la chiamata BatchGetItem: il limite del lato lettura (100 elementi).
- L'elenco fornito delle chiavi degli elementi contiene duplicati — la stessa chiave due volte in un BatchWriteItem.
- ProvisionedThroughputExceededException — limitazione che emerge come UnprocessedItems.
- Esempio di codice: BatchWriteItem in Node.js · in Python (boto3) — scritture in blocchi con tentativi di UnprocessedItems.
- Impara: DynamoDB operazioni batch
Riferimenti
- BatchWriteItem — Riferimento Amazon DynamoDB API
- BatchGetItem — Riferimento Amazon DynamoDB API
- Gestione degli errori con DynamoDB - Guida per sviluppatori di Amazon DynamoDB
- Guida Amazon DynamoDB — AWS SDK per Python (Boto3)
Ultima verifica il 13-07-2026 rispetto alla documentazione ufficiale del AWS collegata sopra.