Valor proporcionado en ExpressionAttributeValues no utilizado en expresiones

TL;DR: proporcionó un marcador de posición de valor en ExpressionAttributeValues (por ejemplo, :status) al que no hace referencia ninguna expresión. DynamoDB requiere que cada :value declarado se utilice en un KeyConditionExpression, FilterExpression, UpdateExpression, o ConditionExpression. Elimine el valor huérfano o corrija la expresión que debía usarlo.

Qué significa

ValidationException: 1 validation error detected: Value provided in ExpressionAttributeValues unused in
expressions: keys: {:status}

# what the engine actually returns, reproduced against DynamoDB Local:
ValidationException: 1 validation error detected: Value provided in ExpressionAttributeValues unused in expressions: keys: {:status}

ExpressionAttributeValues es el mapa de sustitución para los valores literales que tus expresiones comparan (:status, :min, …). DynamoDB impone un contrato de doble sentido: cada :placeholder usado en una expresión debe declararse, y cada placeholder declarado debe usarse. Un valor sobrante que ninguna expresión referencia dispara este ValidationException HTTP 400 — del lado del cliente y no reintentable hasta que los mapas coincidan.

Por qué ocurre

  • Un valor obsoleto tras editar la expresión — quitaste #s = :status de la expresión pero dejaste :status en el mapa de valores.
  • Deriva por copiar y pegar — reutilizar un mapa de valores de una solicitud anterior que tenía más condiciones que la actual.
  • Una solicitud generada que sobredeclara — un builder añadió :v para una cláusula de filtro que luego se eliminó.
  • Confusión entre nombre y valor — querías #status (un alias de nombre) pero declaraste :status (un valor).
  • Una errata — la expresión usa :stat mientras el mapa declara :status.

Cómo solucionarlo

  1. Elimina el valor sin usar que el mensaje nombra de ExpressionAttributeValues.
  2. Mantén los valores al unísono con la expresión — declara un :placeholder solo cuando una expresión lo referencie.
  3. Confirma nombres vs valores — los placeholders : van en ExpressionAttributeValues; los alias # van en ExpressionAttributeNames.
  4. Construye la expresión y sus mapas juntos para que ningún valor quede colgando.
  5. Busca en la cadena de la expresión cada :key de tu mapa. Una errata de un solo carácter (:stat frente a :status) deja el valor declarado sin usar.

Consulta en DynoTable

DynoTable genera ExpressionAttributeValues a partir de las filas de filtro que configuras — cada :placeholder de la salida está referenciado en la cadena de la expresión. Abre una tabla con ⌘K, añade filtros en el panel de consulta y copia los mapas emitidos a tu llamada del SDK para eliminar los valores huérfanos.

Cuando depures una solicitud que falla, pega la expresión en el Expression Builder y compara su mapa de valores con el tuyo. El cambio de perfil (⌘P) y Probar conexión en Ajustes → Perfiles confirman que estás probando contra la misma tabla. Consulta Conectar con AWS e Instalación.

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.