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
FilterExpressionan 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
- Setze den Parameter nur, wenn er nicht leer ist. Baue das Params-Objekt bedingt:
if (filter) params.FilterExpression = filter;— weise nie""zu. - Lösche leere Schlüssel vor dem Aufruf — entferne jede Expression-Eigenschaft, deren Wert ein leerer/Whitespace-String ist, aus dem Request.
- Sichere deinen Builder ab — wenn die Liste der Bedingungen leer ist, hänge die Expression gar nicht an.
- Denk daran, dass sie unabhängig sind —
ExpressionAttributeNames/Valuessollten ebenfalls weggelassen werden (nicht{}, auf das nichts verweist), wenn keine Expression sie verwendet. - Für einen Volltabellen-Read ist ein
ScanohneFilterExpressionkorrekt — 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
- Using expressions in DynamoDB (verifiziert 2026-07-13)
- Query — Amazon DynamoDB API Reference (verifiziert 2026-07-13)
Verwandte Fehler
- Query key condition not supported — eine fehlerhafte (nicht leere)
KeyConditionExpression. - Invalid UpdateExpression syntax — eine nicht leere, aber fehlerhafte Update-Expression.
- Learn: Filterstrategien · Key-Condition-Expressions
Referenzen
- Using expressions in DynamoDB — Amazon DynamoDB Developer Guide
- Query — Amazon DynamoDB API Reference
- Scan — Amazon DynamoDB API Reference
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
Zuletzt verifiziert am 2026-07-13 gegen die oben verlinkte offizielle AWS-Dokumentation.