DynamoDB BatchWriteItem dengan AWS CLI
aws dynamodb batch-write-item melakukan put atau delete pada hingga 25 item dalam satu perintah. Dari shell ia punya dua sisi tajam yang diperhalus SDK: setiap nilai adalah DynamoDB JSON yang harus Anda kutip dengan benar, dan CLI sama sekali tidak punya mekanisme untuk menguras UnprocessedItems. Batas dan model kegagalan parsialnya ada di operasi batch di DynamoDB.
Kode
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"}}}}
]
}'Dijalankan terhadap DynamoDB Local 3.3.0, itu mencetak, secara utuh:
{
"UnprocessedItems": {}
}Penjelasan
- Map sisa yang kosong adalah satu-satunya sinyal keberhasilan yang Anda dapat. Perintah ini mencetak
UnprocessedItemsdan tidak lebih, jadi skrip yang hanya memeriksa status keluar akan menyebut batch yang setengah tertulis sebagai sukses. Parsing map-nya;jq -e '.UnprocessedItems | length == 0'sudah seluruh pemeriksaannya. - Tidak ada flag untuk mengurasnya.
aws dynamodb query helpmenawarkan--starting-token,--max-itemsdan--page-size.aws dynamodb batch-write-item helptidak menawarkan satu pun, karenaUnprocessedItemsbukan kursor paginasi. Menyuapkannya kembali adalah loop shell dengansleep, dan ia sudah berbentuk--request-items. --condition-expressiondan--return-valuestidak diterima di sini, dan itu memang API-nya, bukan CLI-nya: kondisi tidak bisa dilekatkan pada masing-masing permintaan put dan delete. SetiapPutRequestmengganti seluruh item tersimpan, jadi batch yang dibangun dari payload parsial akan menghapus atribut yang tidak disertakan.- Gunakan
file://, bukan JSON inline.--request-items file://writes.jsonmenyingkirkan quoting shell dari daftar hal yang bisa salah, dan itu penting karena sebagian besar yang salah pada perintah ini adalah soal quoting. - Satu entri buruk menghanguskan seluruh 25. Tabel yang tidak ada, key yang tidak cocok dengan schema, item di atas 400 KB, total di atas 16 MB, partition key di atas 2048 byte atau sort key di atas 1024 byte masing-masing menolak seluruh batch, bukan hanya entri yang bermasalah.
Apa yang dicetak perintah ini, termasuk penolakannya
Tambahkan --return-consumed-capacity TOTAL pada fence di atas dan DynamoDB Local 3.3.0 menjawab:
{
"UnprocessedItems": {},
"ConsumedCapacity": [
{
"TableName": "Music",
"CapacityUnits": 3.0
}
]
}Tiga unit untuk dua put dan satu delete: batch itu membeli satu perjalanan bolak-balik, bukan diskon. Setiap entri ditagih sebagai PutItem atau DeleteItem individual yang diwakilinya, dibulatkan ke atas ke 1 KB.
Jalankan delete-nya untuk kedua kali, saat Ella Fitzgerald / Misty sudah lenyap, dan DynamoDB Local melaporkan 2,0 unit untuk DeleteRequest tunggal itu. Referensi BatchWriteItem (diambil 2026-07-28) menyebut bahwa delete pada item yang tidak ada mengonsumsi satu unit kapasitas tulis, dan delete-item mandiri terhadap engine lokal yang sama memang melaporkan 1,0. Perlakukan angka kapasitas lokal sebagai arahan saja. Yang tetap benar bagaimanapun juga adalah bahwa delete yang tidak menemukan apa-apa tetap ditagih.
Dua permintaan yang ditolak layanan mentah-mentah, di stderr, status keluar 254:
aws: [ERROR]: An error occurred (ValidationException) when calling the BatchWriteItem operation: Too many items requested for the BatchWriteItem call
aws: [ERROR]: An error occurred (ValidationException) when calling the BatchWriteItem operation: Provided list of item keys contains duplicatesYang kedua layak ditatap lama-lama. Ia dihasilkan oleh sebuah PutRequest dan sebuah DeleteRequest pada key yang sama, bukan oleh dua put. DynamoDB menghitung operasi kedua apa pun pada satu item dalam satu batch sebagai duplikat, jadi "hapus baris lama dan tulis yang baru" gagal sebagai satu batch meski kedua entri itu tampak sama sekali berbeda.
Merakit map nilai itu di dalam tanda kutip tunggal adalah tempat waktu Anda habis. DynamoDB Expression Builder menghasilkan map bertipe dan menyalin perintah siap jalan, sehingga sebuah kegagalan setidaknya benar-benar kegagalan, bukan backslash yang nyasar.
Untuk memuat massal atau membersihkan item dari CSV atau JSON tanpa meng-escape apa pun, unduh DynoTable.
Contoh terkait
- DynamoDB BatchWriteItem di Node.js — penulisan batch yang sama dengan AWS SDK v3.
- Penulisan batch DynamoDB di Python —
batch_writer()milik boto3 mengurus loop percobaan ulangnya untuk Anda. - DynamoDB PutItem dengan AWS CLI — penulisan satu item yang di-batch di sini.
- Operasi batch di DynamoDB — batas, kegagalan parsial, dan kapan batching membuahkan hasil.
- "Too many items requested for the BatchWriteItem call" — lebih dari 25 permintaan put/delete dalam satu batch.
- "Provided list of item keys contains duplicates" — dua permintaan menyentuh key yang sama dalam satu batch.
Referensi
- BatchWriteItem — Amazon DynamoDB API Reference
- batch-write-item — AWS CLI Command Reference
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
- DynamoDB read and write operations (capacity unit consumption) — Amazon DynamoDB Developer Guide
Terakhir diverifikasi 2026-07-28 terhadap dokumentasi resmi AWS yang ditautkan di atas.