Supplied AttributeValue is empty, must contain exactly one of the supported datatypes

TL;DR — Eines der Attribute in deinem Item (oder Schlüssel) hat ein AttributeValue ohne Wert darin — ein leeres Set, einen leeren String/Binary in einem Schlüsselattribut, ein null/undefined-Feld oder einen Wrapper ohne S/N/BOOL/…-Member. DynamoDB verlangt, dass jedes AttributeValue genau einen unterstützten Typ enthält. Entferne das leere Attribut oder gib ihm einen echten Wert.

Was es bedeutet

ValidationException: Supplied AttributeValue is empty, must contain exactly one of the supported datatypes

DynamoDB hat den Request beim Validieren der Form eines Items abgelehnt: Ein AttributeValue war vorhanden, trug aber nichts, was DynamoDB speichern kann. Jedes AttributeValue muss genau einen typisierten Wert enthalten (S, N, B, SS, NS, BS, M, L, NULL oder BOOL). Es ist ein HTTP 400, nicht wiederholbar — dasselbe Item scheitert erneut, bis du das Attribut korrigierst.

Das unterscheidet sich von ExpressionAttributeValues contains invalid value: Bei dem geht es um einen :platzhalter in einer Expression; bei diesem geht es um ein Attribut im Item-Body selbst (PutItem, BatchWriteItem, TransactWriteItems).

Warum es passiert

  • Ein undefined/null-Feld in dem Objekt, das du schreibst — der Marshaller gibt ein leeres AttributeValue aus, statt es zu überspringen oder als NULL zu typisieren.
  • Ein leeres SetSS, NS oder BS muss mindestens ein Element haben. Ein leeres Set ist überall ungültig.
  • Ein leerer String in einem Schlüsselattribut — Nicht-Schlüssel-String-Attribute dürfen "" sein, aber ein Tabellen- oder Index-Schlüssel-Attribut nicht.
  • Ein leerer Binary-Wert in einem Schlüssel — dieselbe Regel wie bei Strings: leerer Binary ist für Nicht-Schlüssel-Attribute in Ordnung (und innerhalb von Sets, Lists und Maps), nie für einen Schlüssel.
  • Ein verschachteltes leeres Set, das tief in einer Map oder List steckt, die du persistierst — verschachtelte leere Strings und Binary-Werte sind erlaubt; verschachtelte leere Sets nicht.

So behebst du es

  1. Entferne leere/undefined-Attribute vor dem Schreiben. Baue das Item nur aus den Feldern, die tatsächlich Werte haben; lass den Rest weg, statt einen leeren Wrapper zu senden.
  2. Aktiviere für den Document Client die Behandlung leerer Werte. Die Marshalling-Option removeUndefinedValues: true von @aws-sdk/lib-dynamodb lässt undefined-Felder weg, sodass sie nie das Wire erreichen. (Leere Strings und Binary-Werte für Nicht-Schlüssel-Attribute sind von DynamoDB direkt erlaubt.)
  3. Sende nie ein leeres Set — lass das Attribut ganz weg, wenn das Set keine Elemente hat, oder speichere ein NULL.
  4. Gib Schlüsselattributen echte Werte — ein Partition-/Sort Key (Tabelle oder Index) kann nie ein leerer String oder leerer Binary sein.
  5. Durchlaufe verschachtelte Maps/Lists nach verirrten leeren Sets, wenn das betreffende Attribut nicht auf oberster Ebene liegt.

FAQ

Was bedeutet "Supplied AttributeValue is empty" in DynamoDB? Ein Attribut in deinem Item hat ein AttributeValue, das keinen gespeicherten Wert enthält — einen leeren String oder Binary in einem Schlüsselattribut, ein leeres Set oder ein null/undefined-Feld. Jedes AttributeValue muss genau einen unterstützten Datentyp enthalten, also weist DynamoDB den Write zurück.

Wie verhindere ich, dass DynamoDB leere Werte ablehnt? Entferne leere und undefinierte Attribute vor dem Schreiben (oder nutze die Option removeUndefinedValues des Document Client). Sende nie ein leeres Set — lass das Attribut weg oder speichere ein NULL. Schlüsselattribute müssen immer einen echten, nicht leeren Wert tragen.

Verwandte Fehler

Referenzen

Zuletzt verifiziert am 2026-07-13 gegen die oben verlinkte offizielle AWS-Dokumentation.

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.