Kann DynamoDB Null-Werte haben?

Ja. DynamoDB hat einen eigenen NULL-Typ, der ein Attribut mit unbekanntem oder undefiniertem Zustand darstellt. Es erlaubt außerdem leere Strings und leere Binärwerte auf Nicht-Key-Attributen sowie leere Listen und Maps. Es erlaubt keine leeren Sets (String, Zahl oder Binär) – die werden mit einer ValidationException abgelehnt.

Der NULL-Typ

NULL ist ein echter Attributtyp, geschrieben als {"NULL": true}. Nimm ihn, wenn du festhalten willst, dass ein Feld existiert, aber keinen Wert hat – im Unterschied dazu, das Attribut einfach wegzulassen.

Welche leeren Werte erlaubt sind

  • Leerer String / leerer Binärwert – erlaubt auf Nicht-Key-Attributen und innerhalb von Listen und Maps.
  • Leere Liste / leere Map – erlaubt.

Was nicht erlaubt ist

  • Leere Sets (SS, NS, BS) – werden mit einer ValidationException abgelehnt.
  • Leerer String oder Binärwert auf einem Key-Attribut – Key-Werte müssen eine Länge größer als null haben.

Wie die Ablehnungen aussehen

Ein PutItem hat {"NULL": true}, {"S": ""}, {"L": []}, {"M": {}} und ein null Byte großes {"B": ""} im selben Item akzeptiert, und GetItem gab alle fünf unverändert zurück. Diese drei Schreibvorgänge haben es nicht überstanden. Die Meldungen stammen von der Engine selbst, für den Umbruch umgebrochen und sonst unangetastet, Tippfehler inklusive:

tags: {"SS": []}
  ValidationException: One or more parameter values were invalid:
  An string set  may not be empty

pk: {"S": ""}
  ValidationException: One or more parameter values are not valid.
  The AttributeValue for a key attribute cannot contain an empty
  string value. Key: pk

gsiKey: {"NULL": true}
  ValidationException: Invalid attribute value type

Der dritte Fall ist die Falle. Du kannst einen Index-Key nicht auf null setzen, um ein Item aus einem dünn besetzten Index herauszuhalten: Der ganze Schreibvorgang wird abgelehnt. Die einzige Möglichkeit, ein Item unindiziert zu lassen, ist, das Attribut wegzulassen.

NULL zählt als vorhanden

Jeder Filter behandelt ein NULL-Attribut als vorhanden. Ein Scan über das Item von oben lieferte es mit attribute_exists(explicitNull) zurück, ebenso mit explicitNull = :n und :n auf {"NULL": true} sowie mit attribute_type(explicitNull, "NULL"). Nur attribute_not_exists trennt „ausdrücklich null“ von „nicht gespeichert“.

Tipp zur Modellierung

Ein Attribut ganz wegzulassen ist oft sauberer, als NULL zu speichern, und ermöglicht dünn besetzte Indizes. Entscheide danach, ob „nicht vorhanden“ und „ausdrücklich null“ in deinem Modell Unterschiedliches bedeuten.

Filter rund um NULL bauen

Filterausdrücke behandeln NULL als vorhanden. Um Items mit einem ausdrücklichen Null zu finden, nimm attribute_type(attr, 'NULL') oder vergleiche gegen :n mit {"NULL": true}. Um sie auszuschließen, nimm attribute_not_exists oder prüfe je nach Modell auf einen konkreten Typ wie attribute_type(attr, 'S').

Der Expression Builder erzeugt die Namens- und Wert-Maps für Filter mit attribute_exists und attribute_not_exists, damit du einen Scan auf Plausibilität prüfen kannst, bevor du dafür bezahlst.

In DynoTable: Der Item-Editor schreibt NULL-Attribute in allen drei JSON-Modi. Öffne eine Zeile, setz ein Feld auf null und leg die Änderung zur Prüfung ins Staging, bevor sie committet wird. Siehe Items bearbeiten.

Tiefer einsteigen

Lies DynamoDB-Datentypen und dünn besetzte Indizes. Lade DynoTable herunter, um Attribute – auch NULL – direkt zu bearbeiten.

Referenzen

Zuletzt überprüft am 13.07.2026 anhand der oben verlinkten offiziellen AWS-Dokumentation.

Reproduziert am 28.07.2026 gegen DynamoDB Local 3.3.0 über @aws-sdk/client-dynamodb 3.1095.0 – die Fehlerzeichenfolgen und Filterergebnisse oben sind wörtliche Engine-Ausgaben. Der Live-Service kann eine ValidationException anders formulieren als die lokale Engine.

Mit DynamoDB ohne die Console arbeiten

Ein schneller DynamoDB-Desktop-Client, der das echte SQL ausführt, das DynamoDB nicht kann — JOINs, GROUP BY, Aggregationen — mit visueller Bearbeitung und einem KI-Agenten auf deinen eigenen Bedrock-Schlüsseln.

30 Tage kostenlos testen, keine Kreditkarte — danach der Kostenlos-Tarif ohne Zeitlimit.