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 source

L'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 pointusers-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 doublesFROM 'my-table' échoue aussi : les guillemets simples désignent un littéral de chaîne en PartiQL, pas un nom.

Comment le corriger

  1. Mets le nom de table entre guillemets doubles :

    SELECT * FROM "users-prod" WHERE pk = 'USER#42'
  2. Mets les deux parties entre guillemets doubles pour interroger un index :

    SELECT * FROM "users-prod"."email-index" WHERE email = 'ada@example.com'
  3. 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.

  4. 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

Références

Dernière vérification le 2026-07-13 par rapport à la documentation officielle AWS liée ci-dessus.

Travaille avec DynamoDB sans la Console

DynoTable est un client de bureau rapide pour DynamoDB — parcours les tables, exécute des requêtes de style SQL et édite les items en local.