ValidationException: Unexpected from source
En bref — Le nom de table dans ta clause FROM PartiQL contient des caractères que l'analyseur n'accepte pas nus — le plus souvent un tiret. Entoure le nom de guillemets doubles (SELECT * FROM "my-table"). Les guillemets simples ne fonctionnent pas : en PartiQL ils désignent un littéral de chaîne, pas un identifiant.
Ce que ça signifie
ValidationException: Unexpected from sourceL'analyseur PartiQL lit FROM my-table comme l'identifiant my suivi de jetons inattendus — le tiret n'est pas valide au sein d'un identifiant nu. Les noms de table DynamoDB peuvent légalement contenir -, . et _, donc un nom de table parfaitement valide peut quand même être inanalysable en PartiQL tant qu'il n'est pas entre guillemets. Il en va de même pour les noms qui entrent en collision avec des mots-clés PartiQL.
Pourquoi ça arrive
- Le nom de table contient un tiret ou un point —
users-prod,app.events. Les identifiants nus ne peuvent pas les porter. - Des noms de table générés par un framework — l'outillage qui suffixe un environnement ou une étape au nom de la table (par ex.
Todo-dev) est la façon classique dont un tiret s'y glisse sans que tu l'aies choisi. - Interroger un index sans guillemets — la forme
"table"."index"nécessite des guillemets doubles autour des deux parties. - Des guillemets simples au lieu de doubles —
FROM 'my-table'échoue aussi : les guillemets simples désignent un littéral de chaîne en PartiQL, pas un nom.
Comment le corriger
Mets le nom de table entre guillemets doubles :
SELECT * FROM "users-prod" WHERE pk = 'USER#42'Mets les deux parties entre guillemets doubles pour interroger un index :
SELECT * FROM "users-prod"."email-index" WHERE email = 'ada@example.com'Réserve les guillemets simples aux valeurs de chaîne uniquement — les noms entre guillemets doubles, les valeurs entre guillemets simples. Les confondre produit exactement cette classe d'erreur d'analyse.
Mets les guillemets par défaut dans les instructions générées — si ton code interpole des noms de table dans du PartiQL, émets-les toujours entre guillemets doubles ; c'est valide même quand le nom n'en aurait pas strictement besoin.
L'application de bureau DynoTable intègre un atelier SQL pour DynamoDB qui gère la mise entre guillemets des identifiants pour toi, et le DynamoDB Expression Builder montre la requête Query/Scan native équivalente quand tu préfères contourner entièrement l'analyse PartiQL.
Erreurs liées
- DuplicateItemException — un
INSERTPartiQL sur une clé existante. - ValidationException — la classe d'exception parente.
- Apprends : Exemples PartiQL · SQL pour DynamoDB
Références
- 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
Dernière vérification le 2026-07-13 par rapport à la documentation officielle AWS liée ci-dessus.