ValidationException: Unexpected from source
TL;DR — O nome da tabela na sua cláusula FROM do PartiQL contém caracteres que o parser não aceita nus — normalmente um traço. Envolva o nome em aspas duplas (SELECT * FROM "my-table"). Aspas simples não funcionam: no PartiQL elas significam um literal de string, não um identificador.
O que significa
ValidationException: Unexpected from sourceO parser do PartiQL lê FROM my-table como o identificador my seguido de tokens inesperados — o traço não é válido dentro de um identificador nu. Nomes de tabela do DynamoDB podem conter legalmente -, . e _, então um nome de tabela perfeitamente válido ainda pode ser impossível de fazer parse no PartiQL até que esteja entre aspas. O mesmo se aplica a nomes que colidem com palavras-chave do PartiQL.
Por que acontece
- O nome da tabela contém um traço ou ponto —
users-prod,app.events. Identificadores nus não podem carregá-los. - Nomes de tabela gerados por framework — ferramentas que anexam um ambiente ou stage ao nome da tabela (por exemplo,
Todo-dev) são a forma clássica de um traço entrar sem você escolher. - Consultar um índice sem aspas — a forma
"table"."index"precisa de aspas duplas em torno de ambas as partes. - Aspas simples em vez de duplas —
FROM 'my-table'também falha: aspas simples denotam um literal de string no PartiQL, não um nome.
Como corrigir
Coloque o nome da tabela entre aspas duplas:
SELECT * FROM "users-prod" WHERE pk = 'USER#42'Coloque ambas as partes entre aspas duplas ao consultar um índice:
SELECT * FROM "users-prod"."email-index" WHERE email = 'ada@example.com'Mantenha aspas simples apenas para valores de string — nomes em aspas duplas, valores em aspas simples. Trocá-los produz exatamente essa classe de erro de parse.
Coloque entre aspas defensivamente em instruções geradas — se seu código interpola nomes de tabela no PartiQL, sempre emita-os entre aspas duplas; é válido mesmo quando o nome não precisaria estritamente.
O app desktop DynoTable traz um workbench SQL para DynamoDB que trata o quoting de identificadores por você, e o DynamoDB Expression Builder mostra a requisição nativa Query/Scan equivalente quando você prefere desviar do parsing do PartiQL inteiramente.
Erros relacionados
- DuplicateItemException —
INSERTdo PartiQL em uma chave existente. - ValidationException — a classe de exceção pai.
- Aprenda: PartiQL examples · SQL for DynamoDB
Referências
- 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 pela última vez em 2026-07-13 contra a documentação oficial da AWS vinculada acima.