DynamoDB — The expression can not be empty
TL;DR — Pasaste un parámetro de expresión (FilterExpression, KeyConditionExpression, ProjectionExpression, UpdateExpression o ConditionExpression) como una cadena vacía "". DynamoDB requiere que los parámetros de expresión sean o bien una expresión válida no vacía, o bien estén ausentes por completo — una cadena vacía es inválida. Incluye el parámetro solo cuando realmente tengas una expresión; de lo contrario, omite la clave.
Qué significa
ValidationException: Invalid FilterExpression: The expression can not be empty;
ValidationException: Invalid KeyConditionExpression: The expression can not be empty;DynamoDB trata una cadena vacía de forma diferente a un parámetro omitido. Omitir FilterExpression significa "sin filtro"; pasar FilterExpression: "" significa "aquí hay un filtro" — y entonces no hay nada que analizar, así que la validación falla. Lo mismo se aplica a cada parámetro de expresión.
Por qué ocurre
- Parámetros construidos condicionalmente siempre establecidos — el código siempre adjunta
FilterExpressional objeto de la petición, y luego lo deja como""cuando no se eligió ningún filtro. - Un helper/ORM/conector que emite una cadena de expresión vacía en lugar de eliminar la clave cuando la lista de filtros está vacía.
- Una concatenación de cadenas que no produjo nada — unir un array vacío de condiciones da
"". - Contenido recortado — se eliminaron los marcadores de posición, dejando una expresión vacía.
Cómo solucionarlo
- Establece el parámetro solo cuando no esté vacío. Construye el objeto de parámetros condicionalmente:
if (filter) params.FilterExpression = filter;— nunca asignes"". - Elimina las claves vacías antes de la llamada — quita de la petición cualquier propiedad de expresión cuyo valor sea una cadena vacía o de espacios en blanco.
- Protege tu generador — si la lista de condiciones está vacía, no adjuntes la expresión en absoluto.
- Recuerda que son independientes —
ExpressionAttributeNames/Valuestambién deben omitirse (no{}sin ser referenciado por nada) cuando no hay ninguna expresión que los use. - Para una lectura de tabla completa, un
ScansinFilterExpressiones correcto — omite el parámetro en lugar de pasar uno vacío.
¿Prototipando consultas antes de conectarlas al código? Ejecútalas en la aplicación de escritorio DynoTable — solo envía los parámetros de expresión que realmente rellenas, así que no enviarás un filtro con cadena vacía.
Errores relacionados
- Query key condition not supported — un
KeyConditionExpressionmal formado (no vacío). - Invalid UpdateExpression syntax — una expresión de actualización no vacía pero mal formada.
- Aprende: Filtering strategies · Key condition expressions
References
- 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
Última verificación el 2026-07-13 con la documentación oficial de AWS enlazada arriba.