Einsteiger4 Min. Lesezeit

Mehrere Items in DynamoDB löschen

Es gibt kein DELETE FROM table WHERE … in DynamoDB. Jeder Delete trifft ein Item über den vollständigen Primärschlüssel — die API hat keine Bulk-Delete- Operation, kein Truncate, und s DELETE entfernt genau ein Item pro Statement. „Mehrere Items löschen“ ist also immer ein Zwei-Schritt-Job: Keys finden, dann einen Delete pro Key, gebündelt für Throughput.

Dieser Guide deckt die Batch-Optionen ab, die atomare Transaktionsvariante, den Alles-löschen-Fall und denselben Flow mit Auswahl und zwei Tasten in einer GUI.

Wie lösche ich mehrere Items in DynamoDB?

Sammle die Primärschlüssel der Items, die weg sollen (per Query oder Scan), und lösche sie in Batches: BatchWriteItem nimmt bis zu 25 DeleteRequests pro Aufruf, TransactWriteItems löscht bis zu 100 Items atomar, und PartiQL- DELETE-Statements lassen sich mit BatchExecuteStatement zu 25 bündeln. In DynoTable markierst du die Zeilen und drückst ⌘⌫, um die Deletes zu stagen — dann reviewen und committen.

Schritt 0: Keys sammeln

Ein Delete braucht den gesamten Primärschlüssel — bei einer -Tabelle Partition Key und Sort Key (AWS: „For each primary key, you must provide all of the key attributes“). Du kannst nicht nach einem beliebigen Attribut löschen — „jedes Item mit status = 'archived' löschen“ beginnt also mit einem Read:

  • Liegt die Bedingung auf einem Key (oder einem GSI-Key), sammelt eine gezielte Query die Keys günstig.
  • Sonst ist es ein Scan mit Filter — der liest (und berechnet) die ganze Tabelle, Filter hin oder her; siehe Query vs Scan.

Nutze eine ProjectionExpression, die nur die Key-Attribute zurückgibt, und folge LastEvaluatedKey bis zum Ende (Pagination) — sonst löschst du stillschweigend nur die erste 1‑MB-Seite.

Methode 1: BatchWriteItem (bis zu 25 Deletes pro Aufruf)

BatchWriteItem bündelt bis zu 25 Put/Delete-Requests oder 16 MB pro Aufruf (AWS API reference).

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"}}}}
  ]
}'

Drei Eigenschaften des Batches stolpern Leute — alle direkt aus der API reference:

  • Nicht atomar: einzelne PutItem/DeleteItem-Ops sind atomar; der Batch als Ganzes nicht. Manche Deletes landen, andere nicht.
  • UnprocessedItems musst du retryen. Gedrosselte Requests kommen in der UnprocessedItems-Map zurück — AWS empfiehlt exponential Backoff in einer Loop.
  • Keine Conditions. Konditionale Deletes brauchen DeleteItem oder eine Transaktion. Ein Batch lehnt außerdem zwei Ops auf dem gleichen Key ab.

Die Loop-Form steht in Batch Operations.

Methode 2: TransactWriteItems (atomare Deletes)

Wenn Deletes gemeinsam gelingen oder scheitern müssen — Parent plus -Kinder — nutze TransactWriteItems: bis zu 100 Aktionen atomar, mit pro Item. Trade: transactional Write kostet doppelt. Details in DynamoDB Transactions.

Methode 3: PartiQL DELETE, gebündelt

PartiQL hebt die Per-Key-Regel nicht auf (PartiQL DELETE): „You can only delete one item at a time…“, und WHERE „must resolve to a single primary key value“.

Batch single-item Statements mit BatchExecuteStatement — bis zu 25 pro Batch (alle Reads oder alle Writes):

[
  {"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.json

Es gibt kein DELETE FROM Orders WHERE status = 'archived'. Mehr in PartiQL Examples und PartiQL vs SQL.

Alle Items löschen (Truncate)

DynamoDB hat kein Truncate. Optionen:

  1. Tabelle löschen und neu anlegen — umgeht einen Write pro Item. Settings (Indexes, TTL, , Capacity, Tags) neu deklarieren.
  2. — altersbasiertes Cleanup ohne Write Capacity (TTL).
  3. Scan + Batch-Delete (Methode 1), wenn die Tabelle live bleiben muss.

Mehrere Items in DynoTable löschen

In DynoTable:

  1. Query ausführen oder filtern, bis die Zeilen auf dem Screen sind.
  2. Markieren und ⌘⌫ — jede Zeile wird ein gestagter Delete. Noch nichts in DynamoDB: Zeilen rot im Grid, Cards im Staging-Panel.
  3. Prüfen, dann Commit. Commits als TransactWriteItems mit Optimistic-Locking; große Stages werden gechunkt. ⌘⇧⌫ skippt Review.
Gestagte Deletes in DynoTable: markierte Zeilen rot im Grid, jede als prüfbare Card im Staging-Panel vor dem Commit.
Gestagte Deletes in DynoTable: markierte Zeilen rot im Grid, jede als prüfbare Card im Staging-Panel vor dem Commit.

Du löschst die markierten Zeilen — geprüft, bis Commit rücknehmbar — kein blindes Truncate. Handgeschriebene Conditions: im Expression Builder bauen.

FAQ

Kann ich mehrere Items in einem Aufruf löschen? Ja — bis zu 25 mit BatchWriteItem (best-effort, UnprocessedItems retryen) oder bis zu 100 atomar mit TransactWriteItems. Beide brauchen den vollen Primärschlüssel pro Item.

Gibt es ein DELETE WHERE? Nein. Weder Low-Level-API noch PartiQL. Zuerst Keys lesen, dann löschen.

Alle Items einer Tabelle? Full Wipe: droppen und neu anlegen. Altersbasiert: TTL. Sonst Scan + Batch-Delete.

Warum tauchen Items nach dem Batch-Delete wieder auf? Meist nicht-retryte UnprocessedItems. Mit exponential Backoff looped bis die Map leer ist.

Was kostet Löschen? Jeder Delete ist ein Write (WCU pro 1 KB, verdoppelt in Transaktionen); Keys finden kostet Reads. Abschätzen mit dem Pricing Calculator.

DynoTable herunterladen — Zeilen markieren, mit ⌘⌫ stagen, Diffs prüfen, committen.

Aktualisiert