DynamoDB BatchWriteItem con la AWS CLI
aws dynamodb batch-write-item inserisce o elimina fino a 25 Item in un solo comando (16 MB totali, 400 KB per Item). Le scritture vanno in --request-items come mappa tabella → voci PutRequest/DeleteRequest in DynamoDB JSON — e devi controllare UnprocessedItems nell'output, perché il batch nel suo complesso non è atomico.
Code
aws dynamodb batch-write-item \
--request-items '{
"Music": [
{"PutRequest": {"Item": {"Artist": {"S": "Arturo Sandoval"}, "SongTitle": {"S": "Cubano Chant"}, "AlbumTitle": {"S": "Danzon"}, "Year": {"N": "1994"}}}},
{"PutRequest": {"Item": {"Artist": {"S": "Arturo Sandoval"}, "SongTitle": {"S": "A Mis Abuelos"}, "AlbumTitle": {"S": "Danzon"}, "Year": {"N": "1994"}}}},
{"DeleteRequest": {"Key": {"Artist": {"S": "Ella Fitzgerald"}, "SongTitle": {"S": "Misty"}}}}
]
}'Quando tutto va a buon fine, la mappa dei resti nell'output è vuota:
{
"UnprocessedItems": {}
}Spiegazione
--request-items— una mappa nome tabella → un array di massimo 25 vociPutRequest/DeleteRequest(un singolo comando può interessare più tabelle). OgniPutRequest.Itemrichiede la chiave primaria completa; ogniDeleteRequest.Keyè solo la chiave. I valori sono in DynamoDB JSON — i numeri sono stringhe sottoN.- Non è una transazione — ogni put/delete è atomica individualmente, ma il batch nel suo complesso no. Ti serve il tutto-o-niente? Usa
transact-write-items. UnprocessedItems— la CLI non riprova automaticamente un batch parziale. Se la mappa non è vuota (il throttling è la causa abituale), riesegui il comando con quella stessa mappa come--request-items— è già nel formato giusto — applicando un backoff tra i tentativi.- Niente aggiornamenti, niente condizioni —
batch-write-itemnon può esprimereupdate-item,--condition-expressiono--return-values; un put su una chiave esistente sostituisce silenziosamente l'intero Item. Chiavi duplicate, put+delete sullo stesso Item, >25 richieste, un Item >400 KB, o >16 MB totali fanno sì che DynamoDB rifiuti l'intero batch. - Suggerimento: tieni la mappa in un file e passa
--request-items file://writes.json— mettere tra virgolette 25 Item inline nella shell è un incubo.
Fallo visivamente
Scrivere a mano DynamoDB JSON annidato tra le virgolette della shell è soggetto a errori. Il DynamoDB Expression Builder costruisce mappe di valori tipizzate e copia comandi CLI pronti da eseguire, e il calcolatore delle dimensioni degli Item verifica ogni Item rispetto al limite di 400 KB.
Per aggiungere, modificare ed eliminare Item in blocco in una GUI — import CSV/JSON invece dell'escape di JSON — scarica DynoTable.
Esempi correlati
- DynamoDB BatchWriteItem in Node.js — la stessa scrittura batch con AWS SDK v3.
- Scrittura batch di DynamoDB in Python — il
batch_writer()di boto3 fa il ciclo di retry per te. - DynamoDB PutItem con la AWS CLI — la scrittura di un singolo Item che questo raggruppa in batch.
- Operazioni batch in DynamoDB — limiti, fallimenti parziali e quando conviene il batching.
- "Too many items requested for the BatchWriteItem call" — più di 25 richieste put/delete in un solo batch.
- "Provided list of item keys contains duplicates" — due richieste che toccano la stessa chiave in un solo batch.
References
- BatchWriteItem — Amazon DynamoDB API Reference
- batch-write-item — AWS CLI Command Reference
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
Ultima verifica 2026-07-13 rispetto alla documentazione ufficiale AWS collegata sopra.