Value provided in ExpressionAttributeValues unused in expressions
TL;DR — Tu as fourni un espace réservé de valeur dans ExpressionAttributeValues (par ex. :status) qu'aucune expression ne référence. DynamoDB exige que chaque :value déclarée soit utilisée dans une KeyConditionExpression, une FilterExpression, une UpdateExpression ou une ConditionExpression. Supprime la valeur orpheline — ou corrige l'expression censée l'utiliser.
Ce que ça signifie
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 est la table de substitution des valeurs littérales auxquelles tes expressions se comparent (:status, :min, …). DynamoDB applique un contrat à double sens : chaque :placeholder utilisé dans une expression doit être déclaré, et chaque espace réservé déclaré doit être utilisé. Une valeur restante qu'aucune expression ne référence déclenche cette ValidationException HTTP 400 — côté client et non réessayable tant que les tables ne concordent pas.
Pourquoi ça arrive
- Une valeur périmée après avoir modifié l'expression — tu as retiré
#s = :statusde l'expression mais laissé:statusdans la table de valeurs. - Dérive de copier-coller — réutilisation d'une table de valeurs d'une requête précédente qui comportait plus de conditions que celle-ci.
- Une requête générée qui sur-déclare — un générateur a ajouté
:vpour une clause de filtre supprimée par la suite. - Une confusion nom/valeur — tu voulais
#status(un alias de nom) mais tu as déclaré:status(une valeur). - Une faute de frappe — l'expression utilise
:statalors que la table déclare:status.
Comment le corriger
- Supprime la valeur inutilisée que le message nomme dans
ExpressionAttributeValues. - Garde les valeurs synchronisées avec l'expression — ne déclare un
:placeholderque lorsqu'une expression le référence. - Vérifie noms vs valeurs — les espaces réservés
:vont dansExpressionAttributeValues; les alias#vont dansExpressionAttributeNames. - Construis l'expression et ses tables ensemble pour qu'aucune valeur ne reste orpheline.
Interroge dans DynoTable
DynoTable génère les ExpressionAttributeValues à partir des lignes de filtre que tu configures — chaque :placeholder de la sortie est référencé dans la chaîne d'expression. Ouvre une table avec ⌘K, ajoute des filtres dans le panneau de requête, et copie les maps émises dans ton appel SDK pour éliminer les valeurs orphelines.
Quand tu débogues une requête en échec, colle l'expression dans l'Expression Builder et compare sa map de valeurs à la tienne. Le changement de profil (⌘P) et Test Connection dans Settings → Profiles confirment que tu testes bien contre la même table. Vois Se connecter à AWS et Installation.
Sources
- Using expression attribute values in DynamoDB (vérifié le 2026-07-13)
- DynamoDB condition expression examples (vérifié le 2026-07-13)
Erreurs liées
- Value provided in ExpressionAttributeNames unused in expressions — la même règle pour les alias
#name. - ExpressionAttributeValues contains invalid value — une valeur malformée ou vide dans la table, et l'incohérence inverse : un
:placeholderréférencé mais jamais fourni. - The provided expression refers to an attribute that does not exist in the item — l'expression lit un attribut d'élément qui n'existe pas.
- Apprends : Noms et valeurs d'expression
Références
- Using expression attribute values in DynamoDB — Amazon DynamoDB Developer Guide
- DynamoDB condition expression examples — Amazon DynamoDB Developer Guide
- Query — Amazon DynamoDB API Reference
Dernière vérification le 2026-07-13 par rapport à la documentation officielle AWS liée ci-dessus.