ValidationException: Unexpected from source
TL;DR — El nombre de tabla en tu cláusula FROM de PartiQL contiene caracteres que el parser no acepta sin comillas — normalmente un guion. Envuelve el nombre en comillas dobles (SELECT * FROM "my-table"). Las comillas simples no funcionan: en PartiQL significan un literal de cadena, no un identificador.
Qué significa
ValidationException: Unexpected from sourceEl parser de PartiQL lee FROM my-table como el identificador my seguido de tokens inesperados — el guion no es válido dentro de un identificador sin comillas. Los nombres de tabla de DynamoDB pueden contener legalmente -, . y _, así que un nombre de tabla perfectamente válido puede seguir siendo imparseable en PartiQL hasta que se pone entre comillas. Lo mismo se aplica a los nombres que colisionan con palabras clave de PartiQL.
Por qué ocurre
- El nombre de tabla contiene un guion o un punto —
users-prod,app.events. Los identificadores sin comillas no pueden llevarlos. - Nombres de tabla generados por frameworks — el tooling que añade como sufijo un entorno o una etapa al nombre de la tabla (p. ej.
Todo-dev) es la forma clásica en que se cuela un guion sin que lo elijas. - Consultar un índice sin comillas — la forma
"table"."index"necesita comillas dobles alrededor de ambas partes. - Comillas simples en lugar de dobles —
FROM 'my-table'también falla: las comillas simples denotan un literal de cadena en PartiQL, no un nombre.
Cómo solucionarlo
Pon el nombre de tabla entre comillas dobles:
SELECT * FROM "users-prod" WHERE pk = 'USER#42'Pon ambas partes entre comillas dobles al consultar un índice:
SELECT * FROM "users-prod"."email-index" WHERE email = 'ada@example.com'Reserva las comillas simples solo para los valores de cadena — los nombres entre comillas dobles, los valores entre comillas simples. Confundirlos produce exactamente esta clase de error de parseo.
Pon comillas de forma defensiva en las sentencias generadas — si tu código interpola nombres de tabla en PartiQL, emítelos siempre entre comillas dobles; es válido incluso cuando el nombre no lo necesitaría estrictamente.
La app de escritorio DynoTable incluye un banco de trabajo SQL para DynamoDB que gestiona el entrecomillado de identificadores por ti, y el DynamoDB Expression Builder muestra la solicitud Query/Scan nativa equivalente cuando prefieres esquivar por completo el parseo de PartiQL.
Errores relacionados
- DuplicateItemException —
INSERTde PartiQL sobre una clave existente. - ValidationException — la clase de excepción padre.
- Aprende: PartiQL examples · SQL for DynamoDB
Referencias
- 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
Verificado por última vez el 2026-07-13 contra la documentación oficial de AWS enlazada arriba.