Cara menghapus banyak item di DynamoDB
Tidak ada DELETE FROM table WHERE … di DynamoDB. Setiap delete menargetkan
satu item by primary key lengkapnya — API tidak punya operasi bulk-delete,
tidak ada truncate, dan pernyataan DELETE menghapus tepat
satu item per pernyataan. Jadi "hapus banyak item" selalu pekerjaan dua langkah:
temukan key-nya, lalu keluarkan satu delete per key, di-batch untuk
throughput.
Panduan ini mencakup opsi batching, varian transaksional all-or-nothing, kasus hapus-semuanya, dan cara melakukan hal yang sama dengan seleksi dan dua keystroke di GUI.
Bagaimana saya menghapus banyak item di DynamoDB?
Kumpulkan primary key item yang ingin dihilangkan (via Query atau Scan), lalu
hapus dalam batch: BatchWriteItem mengambil hingga 25 DeleteRequest per
panggilan, TransactWriteItems menghapus hingga 100 item secara atomik, dan
pernyataan PartiQL DELETE bisa di-batch 25 sekaligus dengan
BatchExecuteStatement. Di DynoTable Anda memilih baris dan tekan
⌘⌫ untuk men-stage delete, lalu tinjau dan commit.
- Bulk, best-effort:
BatchWriteItem— 25 delete per panggilan, retry sisa. - All-or-nothing:
TransactWriteItems— hingga 100 aksi yang berhasil atau gagal bersama. - Sintaks mirip SQL: PartiQL
DELETE+BatchExecuteStatement— aturan per-key yang sama, ejaan familiar. - Semuanya di tabel: strategi truncate — biasanya lebih murah drop dan recreate tabel.
- Seleksi visual: staged delete di DynoTable — pilih baris, stage, tinjau diff merah, commit.
Langkah 0: kumpulkan key-nya
Delete membutuhkan seluruh primary key — pada tabel
itu partition key dan sort key
(AWS:
"For each primary key, you must provide all of the key attributes"). Anda
tidak bisa menghapus by atribut arbitrer, jadi "hapus setiap item di mana
status = 'archived'" dimulai dengan baca:
- Jika kondisi hidup di key (atau key GSI),
Querytertarget mengumpulkan key dengan murah. - Kalau tidak, itu
Scandengan filter — yang membaca (dan menagih) seluruh tabel, ada filter atau tidak; lihat query vs scan.
Pakai ProjectionExpression yang hanya mengembalikan atribut key, dan ikuti
LastEvaluatedKey sampai akhir (pagination) atau
Anda diam-diam hanya menghapus senilai halaman 1 MB pertama.
Method 1: BatchWriteItem (hingga 25 delete per panggilan)
BatchWriteItem menggabungkan hingga 25 request put/delete atau 16 MB
per panggilan
(referensi API AWS:
"satu panggilan BatchWriteItem dapat mengirim hingga 16MB data lewat jaringan,
terdiri atas maksimum 25 operasi put atau delete item").
aws dynamodb batch-write-item --request-items '{
"Orders": [
{"DeleteRequest": {"Key": {"PK": {"S": "ORDER#1001"}, "SK": {"S": "META"}}}},
{"DeleteRequest": {"Key": {"PK": {"S": "ORDER#1002"}, "SK": {"S": "META"}}}},
{"DeleteRequest": {"Key": {"PK": {"S": "ORDER#1003"}, "SK": {"S": "META"}}}}
]
}'Tiga properti batch yang menjebak orang — semua langsung dari referensi API:
- Tidak atomik: "masing-masing operasi
PutItemdanDeleteItemyang disebutkan di dalamBatchWriteItembersifat atomik; tetapiBatchWriteItemsecara keseluruhan tidak." Beberapa delete bisa mendarat sementara yang lain tidak. - Anda harus retry
UnprocessedItems. Request yang di-throttle kembali di map responsUnprocessedItems, dalam bentuk yang sama dengan request — "Typically, you would callBatchWriteItemin a loop", dan AWS "strongly recommend[s] that you use an exponential backoff algorithm" antar retry. - Tanpa kondisi. "You cannot specify conditions on individual put and
delete requests" — conditional delete harus lewat
DeleteItematau transaksi. Batch juga menolak dua operasi pada key yang sama dalam satu panggilan.
Bentuk loop — chunk by 25, kirim, re-queue sisa dengan backoff — sama dengan yang dibahas di operasi batch.
Method 2: TransactWriteItems (delete atomik)
Saat himpunan delete harus berhasil atau gagal bersama — menghapus item
parent dan child -nya, misalnya — pakai
TransactWriteItems: hingga 100 aksi (delete, put, update, condition check)
diterapkan secara atomik, dengan
per-item diizinkan. Trade-nya:
write transaksional menelan dua kali kapasitas tulis write polos. Mekanika
penuh (token idempotency, TransactionCanceledException, matematika biaya) di
transaksi DynamoDB.
Method 3: PartiQL DELETE, di-batch
PartiQL tidak mengangkat aturan per-key — ia hanya mengeja ulang. Developer
guide eksplisit
(PartiQL DELETE):
"Anda hanya bisa menghapus satu item pada satu waktu. Anda tidak bisa mengeluarkan
satu pernyataan PartiQL DynamoDB yang menghapus banyak item", dan kondisi WHERE
"harus mengerucut ke satu nilai primary key".
Untuk menghapus beberapa item Anda batch pernyataan single-item —
BatchExecuteStatement
menjalankan hingga 25 pernyataan per batch (semua baca atau semua tulis,
tidak pernah dicampur):
[
{"Statement": "DELETE FROM \"Orders\" WHERE PK = 'ORDER#1001' AND SK = 'META'"},
{"Statement": "DELETE FROM \"Orders\" WHERE PK = 'ORDER#1002' AND SK = 'META'"}
]aws dynamodb batch-execute-statement --statements file://statements.jsonWHERE yang tidak menyematkan key penuh gagal — tidak ada
DELETE FROM Orders WHERE status = 'archived'. Lebih banyak pattern PartiQL
(dan limit di baliknya) di contoh PartiQL dan
PartiQL vs SQL.
Menghapus SEMUA item (truncate)
DynamoDB tidak punya truncate. Opsi Anda, dalam urutan preferensi:
- Hapus dan recreate tabel. Penghapusan item-by-item seluruh tabel
menagih satu write per item;
DeleteTable+CreateTablemenghindari seluruh tagihan tulis. Pengaturan tabel — indeks, TTL, , mode kapasitas, tags — tidak kembali sendiri; Anda deklarasikan ulang saat pembuatan (infrastructure-as-code menjadikan ini non-event). - Expire item dengan . Jika "hapus semua yang lebih tua dari X" benar-benar yang Anda inginkan, TTL menghapus item expired di latar tanpa mengonsumsi kapasitas tulis — bulk delete gerak lambat yang tidak menelan biaya.
- Scan + batch-delete (Method 1) saat tabel harus tetap live dan hanya subset yang pergi — Anda membayar baca per item yang di-scan plus write per item yang dihapus.
Hapus banyak item di DynoTable
Alur select-then-delete di atas — query, kumpulkan key, chunk, retry — tepat busywork yang harus dimiliki GUI. Di DynoTable itu seleksi grid:
- Jalankan atau filter query agar baris yang ingin hilang ada di layar.
- Pilih dan tekan ⌘⌫ — setiap baris terpilih menjadi staged delete. Belum ada yang menyentuh DynamoDB: baris berwarna merah di grid dan muncul sebagai kartu yang bisa ditinjau di panel staging.
- Tinjau, lalu Commit. Commit dikirim sebagai batch
TransactWriteItemsdengan kondisi optimistic-locking — staged delete hanya lewat jika item masih ada — dan stage besar otomatis di-chunk agar tetap dalam limit transaksi DynamoDB. ⌘⇧⌫ melewatkan review dan delete-and-commit seleksi dalam satu chord.

Anda menghapus baris yang Anda pilih — operasi yang ditinjau, recoverable-until-commit — bukan truncate full-table buta. Untuk menghapus seluruh tabel, drop dan recreate (di atas).
Jika delete butuh kondisi buatan tangan (attribute_exists, cek versi), bangun
ConditionExpression exact + map placeholder di
DynamoDB Expression Builder dan tempelkan
ke DeleteItem atau transaksi.
FAQ
Bisakah saya menghapus banyak item dalam satu panggilan DynamoDB?
Ya — hingga 25 dengan BatchWriteItem (best-effort, retry UnprocessedItems)
atau hingga 100 secara atomik dengan TransactWriteItems. Keduanya mengambil
primary key penuh per item; tidak ada yang menerima kondisi "where" untuk
memilih item.
Apakah ada DELETE WHERE di DynamoDB?
Tidak. Baik API tingkat rendah maupun PartiQL tidak bisa menghapus by kondisi —
DELETE PartiQL memerlukan WHERE yang "resolve[s] to a single primary key
value". Anda Query atau Scan untuk key dulu, lalu hapus masing-masing.
Bagaimana saya menghapus semua item di tabel DynamoDB? Untuk wipe penuh, hapus dan recreate tabel — menghindari membayar satu write per item. Untuk cleanup berbasis usia, pakai TTL, yang menghapus item expired tanpa mengonsumsi kapasitas tulis. Scan + batch-delete adalah fallback saat tabel harus tetap live.
Mengapa item muncul lagi setelah batch delete saya?
Hampir selalu UnprocessedItems yang tidak di-retry: BatchWriteItem yang
di-throttle diam-diam mengembalikan delete yang gagal di respons, dan kode yang
tidak loop di atasnya "selesai" dengan item masih di tabel. Retry dengan
exponential backoff sampai map kembali kosong.
Berapa biaya menghapus item? Setiap delete adalah write standar (satu WCU per 1 KB, digandakan di dalam transaksi), dan menemukan key juga menelan baca. Perkirakan kerusakannya dengan kalkulator harga.
Prefer melihat apa yang Anda hapus dulu? Unduh DynoTable — pilih baris, stage delete dengan ⌘⌫, tinjau diff, dan commit saat Anda yakin.


