DynamoDB — The expression can not be empty

TL;DR — Du hast einen Expression-Parameter (FilterExpression, KeyConditionExpression, ProjectionExpression, UpdateExpression oder ConditionExpression) als leeren String "" übergeben. DynamoDB verlangt, dass Expression-Parameter entweder eine gültige, nicht leere Expression sind oder ganz fehlen — ein leerer String ist ungültig. Nimm den Parameter nur auf, wenn du wirklich eine Expression hast; sonst lass den Key weg.

Was es bedeutet

ValidationException: Invalid FilterExpression: The expression can not be empty;
ValidationException: Invalid KeyConditionExpression: The expression can not be empty;

DynamoDB behandelt einen leeren String anders als einen weggelassenen Parameter. FilterExpression wegzulassen bedeutet „kein Filter"; FilterExpression: "" zu übergeben bedeutet „hier ist ein Filter" — und dann gibt es nichts zu parsen, sodass die Validierung fehlschlägt. Dasselbe gilt für jeden Expression-Parameter.

Warum es passiert

  • Bedingt gebaute Parameter immer gesetzt — Code hängt immer FilterExpression an das Request-Objekt an und lässt es dann "", wenn kein Filter gewählt wurde.
  • Ein Helper/ORM/Connector, der einen leeren Expression-String ausgibt, statt den Schlüssel wegzulassen, wenn die Filterliste leer ist.
  • String-Verkettung, die nichts erzeugte — das Verbinden eines leeren Arrays von Bedingungen ergibt "".
  • Weggetrimmter Inhalt — Platzhalter wurden entfernt und eine leere Expression blieb zurück.

So behebst du es

  1. Setze den Parameter nur, wenn er nicht leer ist. Baue das Params-Objekt bedingt: if (filter) params.FilterExpression = filter; — weise nie "" zu.
  2. Lösche leere Schlüssel vor dem Aufruf — entferne jede Expression-Eigenschaft, deren Wert ein leerer/Whitespace-String ist, aus dem Request.
  3. Sichere deinen Builder ab — wenn die Liste der Bedingungen leer ist, hänge die Expression gar nicht an.
  4. Denk daran, dass sie unabhängig sindExpressionAttributeNames/Values sollten ebenfalls weggelassen werden (nicht {}, auf das nichts verweist), wenn keine Expression sie verwendet.
  5. Für einen Volltabellen-Read ist ein Scan ohne FilterExpression korrekt — lass den Parameter weg, statt einen leeren zu übergeben.

Prototypst du Abfragen, bevor du sie in Code einbaust? Führe sie in der DynoTable-Desktop-App aus — sie sendet nur die Expression-Parameter, die du tatsächlich ausfüllst, sodass du keinen Leerer-String-Filter auslieferst.

In DynoTable ausführen

DynoTable only sends expression parameters you actually configure — an empty filter list omits FilterExpression entirely instead of passing "". Öffne eine Tabelle mit ⌘K, add filters in the query panel, and copy the generated request when at least one condition is present.

Nutze den Query Builder to prototype reads before wiring conditional params in code. Staging (⌘S) catches empty-expression mistakes on updates. Wechsle Profile mit ⌘P; Verbindung testen on Einstellungen → Profile confirms the target table. Siehe Mit AWS verbinden und Installation. An omitted parameter and an empty string are different — only the latter triggers this error.

Quellen

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.