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 FilterExpression al 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

  1. Establece el parámetro solo cuando no esté vacío. Construye el objeto de parámetros condicionalmente: if (filter) params.FilterExpression = filter; — nunca asignes "".
  2. 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.
  3. Protege tu generador — si la lista de condiciones está vacía, no adjuntes la expresión en absoluto.
  4. Recuerda que son independientesExpressionAttributeNames/Values también deben omitirse (no {} sin ser referenciado por nada) cuando no hay ninguna expresión que los use.
  5. Para una lectura de tabla completa, un Scan sin FilterExpression es 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

References

Última verificación el 2026-07-13 con la documentación oficial de AWS enlazada arriba.

Trabaja con DynamoDB sin la Consola

DynoTable es un cliente de escritorio rápido para DynamoDB: explora tablas, ejecuta consultas estilo SQL y edita Items localmente.