La dimensione dell'espressione ha superato la dimensione massima consentita

TL;DR — DynamoDB limita ogni singola stringa di espressione a 4 KB (i parametri dell'espressione: UpdateExpression, ConditionExpression, FilterExpression, ProjectionExpression). Il tuo è andato oltre: di solito un aggiornamento generato automaticamente su un oggetto di grandi dimensioni o un gigantesco filtro "IN (...)" / "OR". Riduci l'espressione, non l'oggetto.

Cosa significa

ValidationException: 1 validation error detected: Invalid ConditionExpression: Expression size has exceeded the maximum allowed size; expression size: 27785

Il conteggio dei byte finali corrisponde alla dimensione misurata dell'espressione, quindi è diverso per ogni richiesta.

Il limite di 4 KB corrisponde alla lunghezza della stringa dell'espressione stessa, indipendentemente dalla dimensione di 400 KB dell'elemento. Un elemento ben inferiore a 400 KB può comunque eccedere il budget dell'espressione se l'SDK crea una clausola per attributo (i nomi dei segnaposto dettagliati si sommano rapidamente). Si tratta di una ValidationException HTTP 400 — non riprovabile senza modificare l'espressione.

Il budget delle espressioni ha fratelli che puoi colpire per primi: ogni segnaposto #name/:value ha un limite di 255 byte, la combinazione di "ExpressionAttributeNames" + "ExpressionAttributeValues" a 2 MB, una singola espressione a 300 operatori/funzioni e un comparatore "IN" a 100 operandi.

Perché succede

  • UpdateExpression generato automaticamente su un elemento ampio — un ORM/mapper emette SET #a0 = :v0, #a1 = :v1, … per ogni attributo e i nomi dei segnaposto + i separatori attraversano 4 KB.
  • Un'enorme FilterExpression: un lungo attr IN (:0, :1, …) o una catena di condizioni OR.
  • Scritture condizionali in blocco con molti attribute_not_exists/confronti in una ConditionExpression.
  • Modifiche da console di elementi di grandi dimensioni: il salvataggio di un elemento di grandi dimensioni ripropone un'espressione di aggiornamento/condizione di grandi dimensioni.

Come risolverlo

  1. Aggiorna solo ciò che è cambiato. Costruisci UpdateExpression dalle differenze, non dall'intero elemento: la maggior parte degli aggiornamenti tocca una manciata di attributi.
  2. Abbreviare i nomi dei segnaposto. #a/:v sostituisce i nomi descrittivi lunghi; la lunghezza che conta è la stringa dell'espressione, quindi i nomi concisi acquistano un vero margine.
  3. Dividi un filtro gigante in query più ristrette o ristrutturalo in modo che il filtro non sia necessario (una chiave/indice migliore significa meno condizioni OR).
  4. Dividi una scrittura di grandi dimensioni in diversi aggiornamenti più piccoli o modella l'elemento in modo che un singolo cambiamento logico non riscriva tutto.
  5. Riduci la nidificazione: i percorsi della mappa profondamente nidificati aumentano la lunghezza dell'espressione; appiattisci dove puoi.
  6. Cap IN elenca a 100 operandi. Questo è un limite documentato separato che può fallire prima del limite di stringa di 4 KB.

Da DynoTable

DynoTable crea espressioni di aggiornamento dai campi effettivamente modificati, non da tutti gli attributi dell'elemento, mantenendo le espressioni ben al di sotto dei 4 KB. Apri un elemento con ⌘K, modifica campi specifici e copia la lunghezza della stringa dell'espressione generata.

Utilizza il Generatore di espressioni per controllare la dimensione dell'espressione mentre aggiungi clausole. Il calcolatore della dimensione dell'elemento aiuta quando gli elementi di grandi dimensioni richiedono aggiornamenti generati automaticamente. Cambia profilo con ⌘P; vedere 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.