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 source

El 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 puntousers-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 doblesFROM 'my-table' también falla: las comillas simples denotan un literal de cadena en PartiQL, no un nombre.

Cómo solucionarlo

  1. Pon el nombre de tabla entre comillas dobles:

    SELECT * FROM "users-prod" WHERE pk = 'USER#42'
  2. Pon ambas partes entre comillas dobles al consultar un índice:

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

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

Referencias

Verificado por última vez el 2026-07-13 contra la documentación oficial de AWS enlazada arriba.

Trabaja con DynamoDB sin la Consola

DynoTable es un cliente de escritorio rápido para DynamoDB: explora tablas, ejecuta consultas estilo SQL y edita Items localmente.