ValidationException: Unexpected from source
In breve — Il nome della tabella nella tua clausola PartiQL FROM contiene caratteri che il parser non accetta nudi — di solito un trattino. Racchiudi il nome tra virgolette doppie (SELECT * FROM "my-table"). Le virgolette singole non funzionano: in PartiQL significano una stringa letterale, non un identificatore.
Cosa significa
ValidationException: Unexpected from sourceIl parser PartiQL legge FROM my-table come l'identificatore my seguito da token inaspettati — il trattino non è valido dentro un identificatore nudo. I nomi delle tabelle DynamoDB possono legalmente contenere -, . e _, quindi un nome di tabella perfettamente valido può comunque essere non analizzabile in PartiQL finché non è tra virgolette. Lo stesso vale per i nomi che collidono con le parole chiave PartiQL.
Perché accade
- Il nome della tabella contiene un trattino o un punto —
users-prod,app.events. Gli identificatori nudi non possono portarli. - Nomi di tabella generati da framework — il tooling che aggiunge un ambiente o uno stage al nome della tabella (es.
Todo-dev) è il modo classico in cui un trattino entra senza che tu lo scelga. - Interrogare un indice senza virgolette — la forma
"table"."index"necessita di virgolette doppie attorno a entrambe le parti. - Virgolette singole invece di doppie — anche
FROM 'my-table'fallisce: le virgolette singole denotano una stringa letterale in PartiQL, non un nome.
Come correggerlo
Metti il nome della tabella tra virgolette doppie:
SELECT * FROM "users-prod" WHERE pk = 'USER#42'Metti entrambe le parti tra virgolette doppie quando interroghi un indice:
SELECT * FROM "users-prod"."email-index" WHERE email = 'ada@example.com'Mantieni le virgolette singole solo per i valori stringa — i nomi tra virgolette doppie, i valori tra virgolette singole. Confonderli produce esattamente questa classe di errore di parsing.
Metti le virgolette in modo difensivo negli statement generati — se il tuo codice interpola i nomi delle tabelle in PartiQL, emettili sempre tra virgolette doppie; è valido anche quando il nome non ne avrebbe strettamente bisogno.
L'app desktop DynoTable include un SQL workbench per DynamoDB che gestisce le virgolette degli identificatori per te, e il DynamoDB Expression Builder mostra la richiesta nativa Query/Scan equivalente quando preferisci evitare del tutto il parsing PartiQL.
Errori correlati
- DuplicateItemException —
INSERTPartiQL su una chiave esistente. - ValidationException — la classe di eccezione genitore.
- Impara: PartiQL examples · SQL for DynamoDB
References
- PartiQL select statements for DynamoDB — Amazon DynamoDB Developer Guide
- Supported data types and naming rules in Amazon DynamoDB — Amazon DynamoDB Developer Guide
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
Ultima verifica 2026-07-13 rispetto alla documentazione ufficiale AWS collegata sopra.