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 UnprocessedItems dan 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 help menawarkan --starting-token, --max-items dan --page-size. aws dynamodb batch-write-item help tidak menawarkan satu pun, karena UnprocessedItems bukan kursor paginasi. Menyuapkannya kembali adalah loop shell dengan sleep, dan ia sudah berbentuk --request-items.
  • --condition-expression dan --return-values tidak diterima di sini, dan itu memang API-nya, bukan CLI-nya: kondisi tidak bisa dilekatkan pada masing-masing permintaan put dan delete. Setiap PutRequest mengganti 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.json menyingkirkan 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 duplicates

Yang 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

Referensi

Terakhir diverifikasi 2026-07-28 terhadap dokumentasi resmi AWS yang ditautkan di atas.

Bekerja dengan DynamoDB tanpa Console

Klien desktop DynamoDB yang cepat dan menjalankan SQL sungguhan yang tidak bisa dijalankan DynamoDB — JOINs, GROUP BY, agregasi — dengan editing visual dan agen AI pada kunci Bedrock milik Anda sendiri.

Uji coba gratis 30 hari, tanpa kartu kredit — lalu paket Free tanpa batas waktu.