DynamoDB — La expresión no puede estar vacía

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 una expresión válida y no vacía o que estén completamente ausentes: una cadena vacía no es válida. Sólo incluya el parámetro cuando realmente tenga una expresión; de lo contrario, omita 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.

Ejecútalo en DynoTable

DynoTable solo envía los parámetros de expresión que realmente configuras — una lista de filtros vacía omite FilterExpression por completo en lugar de pasar "". Abre una tabla con ⌘K, añade filtros en el panel de consulta y copia la petición generada cuando haya al menos una condición presente.

Usa el Query Builder para prototipar lecturas antes de cablear parámetros condicionales en el código. El área de preparación (⌘S) detecta los errores de expresión vacía en las actualizaciones. Cambia de perfil con ⌘P; Test Connection en Ajustes → Perfiles confirma la tabla de destino. Consulta Conectar con AWS e Instalación. Un parámetro omitido y una cadena vacía no son lo mismo — solo esta última provoca este error.

Fuentes

Errores relacionados

Referencias

Verificado por última vez el 2026-07-13 contra la documentación oficial de AWS enlazada arriba.

Trabaja con DynamoDB sin la Consola

Un cliente de escritorio rápido para DynamoDB que ejecuta el SQL real que DynamoDB no puede — JOINs, GROUP BY, agregaciones — con edición visual y un agente de IA con tus propias claves de Bedrock.

Prueba gratuita de 30 días, sin tarjeta — después, el plan Free sin límite de tiempo.