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 call

Il servizio riecheggia l'intera richiesta serializzata in cui si trova "": circa 12.000 caratteri per un batch di 26 articoli.

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 BatchWriteItem senza 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

  1. Dividi in gruppi di ≤25 azioni e invia un BatchWriteItem per blocco.
  2. Handle UnprocessedItemsBatchWriteItem può restituire elementi che non ha elaborato (limitazione); riprovare quelli con backoff esponenziale. Ciò è normale anche all'interno di un lotto valido di 25 articoli.
  3. Mantieni ogni batch al di sotto dei 16 MB: con articoli di grandi dimensioni potresti averne bisogno di meno di 25 per chiamata.
  4. 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.
  5. 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

Errori correlati

Riferimenti

Ultima verifica il 13-07-2026 rispetto alla documentazione ufficiale del AWS collegata sopra.

Lavora con DynamoDB senza la Console

Un client desktop veloce per DynamoDB che esegue il vero SQL che DynamoDB non può — JOINs, GROUP BY, aggregazioni — con modifica visuale e un agente AI sulle tue chiavi Bedrock.

Prova gratuita di 30 giorni, senza carta di credito — poi il piano Free senza limiti di tempo.