L'espressione filtro può contenere solo attributi di chiave non primaria
TL;DR — Inserisci un attributo di chiave primaria (chiave di partizione o chiave di ordinamento) della tabella o dell'indice che stai interrogando) all'interno di un FilterExpression. DynamoDB vieta che: gli attributi chiave vadano nella KeyConditionExpression e un filtro possa fare riferimento solo ad attributi non chiave. Sposta la condizione chiave al suo posto.
Cosa significa
ValidationException: Filter Expression can only contain non-primary key attributes:
Primary key attribute: <name>
# what the engine actually returns, reproduced against DynamoDB Local:
ValidationException: Filter Expression can only contain non-primary key attributes: Primary key attribute: pkFilterExpression viene eseguito dopo che gli elementi sono stati letti, per scartare le righe che non desideri; KeyConditionExpression viene eseguito prima, per selezionare quali elementi vengono letti dalla chiave. Il riferimento a una chiave di partizione/ordinamento nel filtro mescola tali ruoli, quindi DynamoDB lo rifiuta con una ValidationException HTTP 400 — lato client e non riprovabile finché non si ristruttura.
Perché succede
- Una condizione chiave scritta come filtro —
FilterExpression: 'sk = :v'doveskè la chiave di ordinamento; appartiene a "KeyConditionExpression". - Filtro sulla chiave dell'indice — quando
interroghiun GSI/LSI, la chiave di partizione/ordinamento di quell'indice sono "attributi della chiave primaria" per questa query e non possono apparire nel filtro. - Copia e incolla un filtro di scansione su una query in cui un attributo filtrato risulta essere una chiave.
- Cercando di aggiungere una seconda condizione sulla chiave di ordinamento tramite il filtro (ad esempio un intervallo) invece di esprimerla nella condizione chiave.
Come risolverlo
- Sposta le condizioni chiave in "KeyConditionExpression":
KeyConditionExpression: 'pk = :pk AND begins_with(sk, :prefix)', // FilterExpression: only NON-key attributes, e.g. 'status = :active' - Utilizza l'indice corretto. Se è necessario filtrare/selezionare un attributo che non è una chiave, modellarlo come chiave di partizione/ordinamento di un GSI ed eseguire una query sull'indice per chiave.
- Mantieni il filtro solo per gli attributi non chiave: riduce i risultati ma consuma comunque capacità di lettura per ogni elemento scansionato, quindi affidati a chiavi/indici per la selezione.
- Interrogazione su un GSI? Ricorda che anche i suoi attributi chiave sono vietati nel filtro: condizione su di essi nella condizione chiave.
- Controlla le richieste generate. Registra insieme sia "KeyConditionExpression" che "FilterExpression": gli attributi chiave nel filtro sono un errore comune di copia e incolla del codice di scansione.
Eseguilo in DynoTable
Il pannello delle query di DynoTable mantiene le condizioni chiave e i filtri in campi separati: i vincoli delle chiavi di partizione e ordinamento non arrivano mai a "FilterExpression". Apri una tabella con ⌘K, imposta la condizione chiave, quindi aggiungi filtri non chiave; copia la richiesta generata nel tuo SDK.
Utilizza il Query Builder per prototipare GSI query in cui le chiavi dell'indice devono rimanere in "KeyConditionExpression". Cambia profilo con ⌘P; Verifica connessione in Impostazioni → Profili conferma che l'indice esiste. Consulta Connetti a AWS e Installa.
Fonti
- Query: riferimento Amazon DynamoDB API (verificato il 13-07-2026)
- Espressioni di filtro per Query (verificato il 13-07-2026)
Errori correlati
- Condizione della chiave di query non supportata: un operatore/forma non valida nella condizione della chiave stessa.
- Elemento chiave schema mancante nella condizione della query: la query non ha fornito la chiave di partizione.
- Esempio di codice: Query in Node.js: condizione della chiave e filtro suddivisi correttamente.
- Impara: Strategie di filtro · Espressioni di condizioni chiave
Riferimenti
- Query: riferimento Amazon DynamoDB API
- Espressioni di filtro per query: Guida per sviluppatori Amazon DynamoDB
- Utilizzo degli indici secondari globali in DynamoDB - Guida per sviluppatori di Amazon DynamoDB
Ultima verifica il 13-07-2026 rispetto alla documentazione ufficiale del AWS collegata sopra.