DynamoDB — L'espressione non può essere vuota

TL;DR — Hai passato un parametro di espressione (FilterExpression, KeyConditionExpression, ProjectionExpression, UpdateExpression o ConditionExpression) come una stringa vuota "". DynamoDB richiede che i parametri dell'espressione siano un'espressione valida non vuota o del tutto assenti: una stringa vuota non è valida. Includi il parametro solo quando hai effettivamente un'espressione; altrimenti omettere la chiave.

Cosa significa

ValidationException: Invalid FilterExpression: The expression can not be empty;
ValidationException: Invalid KeyConditionExpression: The expression can not be empty;

DynamoDB tratta una stringa vuota in modo diverso da un parametro omesso. Omettere "FilterExpression" significa "nessun filtro"; passare FilterExpression: "" significa "ecco un filtro" - e quindi non c'è nulla da analizzare, quindi la convalida fallisce. Lo stesso vale per ogni parametro dell'espressione.

Perché succede

  • Parametri creati in modo condizionale sempre impostati — il codice associa sempre FilterExpression all'oggetto della richiesta, quindi lo lascia "" quando non è stato scelto alcun filtro.
  • Un helper/ORM/connettore che emette una stringa di espressione vuota invece di rilasciare la chiave quando l'elenco dei filtri è vuoto.
  • Concatenazione di stringhe che non ha prodotto nulla — unendo un array vuoto di condizioni si ottiene "".
  • Contenuto tagliato: i segnaposto sono stati rimossi, lasciando un'espressione vuota.

Come risolverlo

  1. Imposta il parametro solo quando non è vuoto. Costruisci l'oggetto params in modo condizionale: if (filter) params.FilterExpression = filter; — non assegnare mai "".
  2. Elimina le chiavi vuote prima della chiamata: elimina dalla richiesta qualsiasi proprietà dell'espressione il cui valore sia una stringa vuota/spazi bianchi.
  3. Proteggi il tuo costruttore: se l'elenco delle condizioni è vuoto, non allegare affatto l'espressione.
  4. Ricorda che sono indipendenti — Anche ExpressionAttributeNames/Values dovrebbero essere omessi (non {} referenziato da nulla) quando non c'è alcuna espressione che li utilizza.
  5. Per una lettura dell'intera tabella, uno Scan senza FilterExpression è corretto: ometti il parametro anziché passarne uno vuoto.

Eseguilo in DynoTable

DynoTable invia solo i parametri di espressione effettivamente configurati: un elenco di filtri vuoto omette completamente FilterExpression invece di passare "". Apri una tabella con ⌘K, aggiungi filtri nel pannello delle query e copia la richiesta generata quando è presente almeno una condizione.

Utilizza il Query Builder per prototipare le letture prima di collegare i parametri condizionali nel codice. La gestione temporanea (⌘S) rileva gli errori di espressione vuota negli aggiornamenti. Cambia profilo con ⌘P; Verifica connessione in Impostazioni → Profili conferma la tabella di destinazione. Consulta Connetti a AWS e Installa. Un parametro omesso e una stringa vuota sono diversi: solo quest'ultima attiva questo errore.

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.