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 = :status de l'expression mais laissé :status dans 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é :v pour 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 :stat alors que la table déclare :status.

Comment le corriger

  1. Supprime la valeur inutilisée que le message nomme dans ExpressionAttributeValues.
  2. Garde les valeurs synchronisées avec l'expression — ne déclare un :placeholder que lorsqu'une expression le référence.
  3. Vérifie noms vs valeurs — les espaces réservés : vont dans ExpressionAttributeValues ; les alias # vont dans ExpressionAttributeNames.
  4. 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

Erreurs liées

Références

Dernière vérification le 2026-07-13 par rapport à la documentation officielle AWS liée ci-dessus.

Travaille avec DynamoDB sans la Console

Un client de bureau rapide pour DynamoDB qui exécute le vrai SQL que DynamoDB ne peut pas — JOINs, GROUP BY, agrégations — avec édition visuelle et un agent IA sur tes propres clés Bedrock.

Essai gratuit de 30 jours, sans carte bancaire — ensuite la formule Gratuit, sans limite de durée.