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 = :statusde la expresión pero dejaste:statusen 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ó
:vpara 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
:statmientras el mapa declara:status.
Cómo solucionarlo
- Elimina el valor sin usar que el mensaje nombra de
ExpressionAttributeValues. - Mantén los valores al unísono con la expresión — declara un
:placeholdersolo cuando una expresión lo referencie. - Confirma nombres vs valores — los placeholders
:van enExpressionAttributeValues; los alias#van enExpressionAttributeNames. - Construye la expresión y sus mapas juntos para que ningún valor quede colgando.
- Busca en la cadena de la expresión cada
:keyde tu mapa. Una errata de un solo carácter (:statfrente 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
- Using expression attribute values in DynamoDB (verificado el 2026-07-13)
- DynamoDB condition expression examples (verificado el 2026-07-13)
Errores relacionados
- Valor proporcionado en ExpressionAttributeNames no utilizado en expresiones — la misma regla para los alias
#name. - ExpressionAttributeValues contains invalid value — un valor malformado o vacío en el mapa, y el desajuste inverso: un
:placeholderreferenciado pero nunca proporcionado. - La expresión proporcionada hace referencia a un atributo que no existe en el Item — la expresión lee un atributo del Item que no existe.
- Aprende: Nombres y valores de expresión
Referencias
- Using expression attribute values in DynamoDB — Amazon DynamoDB Developer Guide
- DynamoDB condition expression examples — Amazon DynamoDB Developer Guide
- Query — Amazon DynamoDB API Reference
Verificado por última vez el 2026-07-13 contra la documentación oficial de AWS enlazada arriba.