Valore fornito in ExpressionAttributeNames non utilizzato nelle espressioni

TL;DR — Hai dichiarato un segnaposto del nome in "ExpressionAttributeNames" (ad esempio "#status") a cui nessuna espressione fa riferimento. DynamoDB richiede che ogni alias dichiarato venga utilizzato in una KeyConditionExpression, FilterExpression, UpdateExpression, ConditionExpression o ProjectionExpression. Rimuovi l'alias inutilizzato o correggi l'espressione che avrebbe dovuto farvi riferimento.

Cosa significa

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

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

"ExpressionAttributeNames" è una mappa di sostituzione per gli alias dei nomi degli attributi (necessari per parole riservate o nomi con caratteri speciali). DynamoDB applica un rigido contratto a doppio senso: ogni alias utilizzato in un'espressione deve essere dichiarato, e ogni alias dichiarato deve essere utilizzato. Una voce rimanente e senza riferimenti attiva questa "ValidationException" HTTP 400. È lato client e non è possibile riprovare finché la mappa non corrisponde alle espressioni.

Perché succede

  • Un alias obsoleto rimasto dopo aver modificato un'espressione — hai rimosso #status = :s dall'espressione ma hai dimenticato di eliminare #status dalla mappa dei nomi.
  • Una mappa generata che dichiara in eccesso: un livello di mappatura emette alias per ogni attributo, anche quelli che l'espressione finale non tocca.
  • L'alias è nella mappa dei valori, non nei nomi — intendevi :status (un valore) ma hai dichiarato #status (un nome).
  • Un errore di battitura: l'espressione utilizza #stat mentre la mappa dichiara #status, quindi #status è tecnicamente inutilizzato.

Come risolverlo

  1. Elimina l'alias inutilizzato i nomi dei messaggi da "ExpressionAttributeNames".
  2. Mantieni la mappa in sincronia con le espressioni — dichiara un #name solo quando un'espressione fa effettivamente riferimento ad esso.
  3. Verifica la presenza di una confusione tra nome e valore — Gli alias # risiedono in ExpressionAttributeNames, i segnaposto : in ExpressionAttributeValues.
  4. Rigenera la richiesta in modo che nomi, valori e testo dell'espressione siano costruiti insieme anziché assemblati manualmente.

Ispeziona in DynoTable

DynoTable alias nomi di attributi riservati negli editor di aggiornamento e filtro: nell'espressione viene fatto riferimento a ogni #segnaposto nell'output. Apri una tabella con ⌘K, modifica un elemento e copia la mappa ExpressionAttributeNames generata.

Effettua un controllo incrociato delle richieste SDK non riuscite nel reservedwordschecker: stampa la mappa degli alias per i nomi che necessitano del prefisso "#". Cambia profilo con ⌘P; vedere Connetti a AWS e Installa.

Fonti

Riproducilo

Una voce "ExpressionAttributeNames" a cui nessuna espressione fa riferimento:

await client.send(
  new UpdateItemCommand({
    TableName: 'orders',
    Key: {pk: {S: 'ORDER#1'}, sk: {S: 'META'}},
    UpdateExpression: 'SET stat = :v', // note: 'stat', not '#unused'
    ExpressionAttributeNames: {'#unused': 'status'},
    ExpressionAttributeValues: {':v': {S: 'shipped'}}
  })
);

Produzione reale:

ValidationException: 1 validation error detected: Value provided in ExpressionAttributeNames unused in expressions: keys: {#unused}
HTTP 400

Il messaggio nomina la chiave incriminata, il che rende questo uno dei pochi errori di convalida DynamoDB su cui puoi agire senza leggere nient'altro. Di solito appare dopo che una modifica rimuove un segnaposto dall'espressione ma lascia dietro di sé la sua dichiarazione.

Errori correlati

Riferimenti

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

Riprodotto il 26-07-2026 rispetto a DynamoDB Local 2.x con AWS SDK per JavaScript v3.1095.0: l'output sopra è letterale.

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.