Value provided in ExpressionAttributeValues unused in expressions

TL;DR — Du hast in ExpressionAttributeValues einen Wertplatzhalter übergeben (z. B. :status), den keine Expression referenziert. DynamoDB verlangt, dass jeder deklarierte :value in einer KeyConditionExpression, FilterExpression, UpdateExpression oder ConditionExpression benutzt wird. Entferne den verwaisten Wert — oder repariere die Expression, die ihn benutzen sollte.

Was es bedeutet

ValidationException: 1 validation error detected: Value provided in ExpressionAttributeValues unused in
expressions: keys: {:status}

# what the engine actually returns, reproduced against DynamoDB Local:
ValidationException: 1 validation error detected: Value provided in ExpressionAttributeValues unused in expressions: keys: {:status}

ExpressionAttributeValues ist die Substitutions-Map für die literalen Werte, mit denen deine Expressions vergleichen (:status, :min, …). DynamoDB erzwingt einen Zwei-Wege-Vertrag: jeder :placeholder, der in einer Expression verwendet wird, muss deklariert sein, und jeder deklarierte Platzhalter muss verwendet werden. Ein übrig gebliebener Wert, den keine Expression referenziert, löst diese HTTP-400-ValidationException aus — clientseitig und nicht wiederholbar, bis die Maps übereinstimmen.

Warum es passiert

  • Ein veralteter Wert nach dem Bearbeiten der Expression — du hast #s = :status aus der Expression entfernt, aber :status in der Werte-Map gelassen.
  • Copy-Paste-Drift — Wiederverwendung einer Werte-Map aus einer früheren Anfrage, die mehr Bedingungen hatte als die aktuelle.
  • Eine generierte Anfrage, die überdeklariert — ein Builder fügte :v für eine Filter-Klausel hinzu, die später entfernt wurde.
  • Eine Namen-vs-Werte-Verwechslung — du meintest #status (einen Namens-Alias), hast aber :status (einen Wert) deklariert.
  • Ein Tippfehler — die Expression verwendet :stat, während die Map :status deklariert.

So behebst du es

  1. Lösch den ungenutzten Wert, den die Meldung nennt, aus ExpressionAttributeValues.
  2. Halte die Werte im Gleichschritt mit der Expression — deklarier einen :platzhalter nur dann, wenn eine Expression ihn referenziert.
  3. Kontrollier Namen gegen Werte:-Platzhalter gehören in ExpressionAttributeValues, #-Aliase in ExpressionAttributeNames.
  4. Bau die Expression und ihre Maps zusammen, damit kein Wert übrig bleibt.
  5. Such im Expression-String nach jedem :key deiner Map. Ein Tippfehler von einem Zeichen (:stat statt :status) lässt den deklarierten Wert ungenutzt.

In DynoTable abfragen

DynoTable generates ExpressionAttributeValues from the filter rows you configure — every :placeholder in the output is referenced in the expression string. Öffne eine Tabelle mit ⌘K, add filters in the query panel, and copy the emitted maps into your SDK call to eliminate orphan values.

When debugging a failing request, paste the expression into the Expression Builder and compare its value map to yours. Profilwechsel (⌘P) and Verbindung testen on Einstellungen → Profile confirm you are testing against the same table. Siehe Mit AWS verbinden und Installation.

Quellen

Verwandte Fehler

Referenzen

Zuletzt verifiziert am 2026-07-13 gegen die offizielle, oben verlinkte 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.