Valore fornito in ExpressionAttributeValues non utilizzato nelle espressioni

TL;DR — Hai fornito un segnaposto di valore in "ExpressionAttributeValues" (ad esempio ":status") a cui nessuna espressione fa riferimento. DynamoDB richiede che ogni :value dichiarato venga utilizzato in una KeyConditionExpression, FilterExpression, UpdateExpression o ConditionExpression. Rimuovi il valore orfano o correggi l'espressione che doveva utilizzarlo.

Cosa 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" è la mappa di sostituzione per i valori letterali rispetto ai quali le tue espressioni vengono confrontate (:status, :min, ...). DynamoDB applica un contratto a due vie: ogni :segnaposto utilizzato in un'espressione deve essere dichiarato, e ogni segnaposto dichiarato deve essere utilizzato. Un valore rimanente a cui nessuna espressione fa riferimento attiva questa ValidationException HTTP 400: lato client e non riprovabile finché le mappe non corrispondono.

Perché succede

  • Un valore obsoleto dopo aver modificato l'espressione — hai eliminato #s = :status dall'espressione ma hai lasciato :status nella mappa dei valori.
  • Deriva copia-incolla: riutilizzo di una mappa di valori di una richiesta precedente che aveva più condizioni di quella corrente.
  • Una richiesta generata che dichiara in eccesso: un builder ha aggiunto :v per una clausola di filtro che è stata successivamente rimossa.
  • Un miscuglio di nome e valore: intendevi #status (un alias di nome) ma hai dichiarato :status (un valore).
  • Un errore di battitura — l'espressione utilizza :stat mentre la mappa dichiara :status.

Come risolverlo

  1. Elimina il valore inutilizzato i nomi dei messaggi da "ExpressionAttributeValues".
  2. Mantieni i valori in sincronia con l'espressione — dichiara un :placeholder solo quando un'espressione vi fa riferimento.
  3. Conferma nomi e valori — I segnaposto : vanno in ExpressionAttributeValues; Gli alias "#" vanno in "ExpressionAttributeNames".
  4. Costruisci insieme l'espressione e le sue mappe in modo che nessun valore rimanga in sospeso.
  5. Cerca nella stringa dell'espressione ogni :key nella tua mappa. Un errore di battitura di un singolo carattere (:stat vs :status) lascia inutilizzato il valore dichiarato.

Interroga in DynoTable

DynoTable genera "ExpressionAttributeValues" dalle righe del filtro che configuri: a ogni ":placeholder" nell'output viene fatto riferimento nella stringa dell'espressione. Apri una tabella con ⌘K, aggiungi filtri nel pannello delle query e copia le mappe emesse nella chiamata SDK per eliminare i valori orfani.

Durante il debug di una richiesta non riuscita, incolla l'espressione nel Generatore di espressioni e confronta la sua mappa di valori con la tua. Il cambio di profilo (⌘P) e Test connessione in Impostazioni → Profili confermano che stai testando rispetto alla stessa tabella. Consulta Connetti a AWS e Installa.

Fonti

Errori correlati

Riferimenti

Ultima verifica il 13-07-2026 rispetto alla documentazione ufficiale del AWS collegata sopra.

Lavora con DynamoDB senza la Console

Un client desktop veloce per DynamoDB che esegue il vero SQL che DynamoDB non può — JOINs, GROUP BY, aggregazioni — con modifica visuale e un agente AI sulle tue chiavi Bedrock.

Prova gratuita di 30 giorni, senza carta di credito — poi il piano Free senza limiti di tempo.