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 oder ganz abwesend sind — ein leerer String ist ungültig. Nimm den Parameter nur auf, wenn du tatsächlich eine Expression hast; andernfalls lass den Schlüssel 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.
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.