ValidationException: Unexpected from source
요약 — PartiQL FROM 절의 테이블 이름에 파서가 그대로 받아들이지 않는 문자가 있습니다 — 보통 대시입니다. 이름을 큰따옴표로 감싸세요(SELECT * FROM "my-table"). 작은따옴표는 작동하지 않습니다: PartiQL에서 작은따옴표는 식별자가 아니라 문자열 리터럴을 의미합니다.
무엇을 의미하나요
ValidationException: Unexpected from sourcePartiQL 파서는 FROM my-table을 식별자 my 뒤에 예상치 못한 토큰이 오는 것으로 읽습니다 — 대시는 그대로의 식별자 안에서 유효하지 않습니다. DynamoDB 테이블 이름은 합법적으로 -, ., _를 포함할 수 있으므로, 완벽하게 유효한 테이블 이름도 따옴표로 묶기 전까지는 PartiQL에서 파싱할 수 없을 수 있습니다. 같은 것이 PartiQL 키워드와 충돌하는 이름에도 적용됩니다.
왜 발생하나요
- 테이블 이름에 대시나 점이 있음 —
users-prod,app.events. 그대로의 식별자는 그것들을 담을 수 없습니다. - 프레임워크가 생성한 테이블 이름 — 테이블 이름에 환경이나 스테이지를 접미사로 붙이는 도구(예:
Todo-dev)가 여러분이 선택하지 않은 채 대시가 들어가는 고전적 방법입니다. - 따옴표 없이 인덱스를 쿼리 —
"table"."index"형식은 양쪽 부분 모두에 큰따옴표가 필요합니다. - 큰따옴표 대신 작은따옴표 —
FROM 'my-table'도 실패합니다: PartiQL에서 작은따옴표는 이름이 아니라 문자열 리터럴을 나타냅니다.
어떻게 고치나요
테이블 이름에 큰따옴표를 붙이세요:
SELECT * FROM "users-prod" WHERE pk = 'USER#42'인덱스를 쿼리할 때 양쪽 부분에 큰따옴표를 붙이세요:
SELECT * FROM "users-prod"."email-index" WHERE email = 'ada@example.com'작은따옴표는 문자열 값에만 유지하세요 — 이름은 큰따옴표, 값은 작은따옴표. 이를 혼동하면 정확히 이 부류의 파싱 오류가 발생합니다.
생성된 문에서 방어적으로 따옴표를 붙이세요 — 코드가 테이블 이름을 PartiQL에 삽입한다면 항상 큰따옴표로 방출하세요. 이름이 엄격히 필요하지 않을 때도 유효합니다.
DynoTable 데스크톱 앱은 식별자 따옴표를 대신 처리하는 DynamoDB용 SQL 워크벤치를 제공하고, DynamoDB Expression Builder는 PartiQL 파싱을 완전히 우회하고 싶을 때 동등한 네이티브 Query/Scan 요청을 보여줍니다.
관련 오류
- DuplicateItemException — 기존 키에 대한 PartiQL
INSERT. - ValidationException — 부모 예외 클래스.
- 학습: PartiQL examples · SQL for DynamoDB
References
- 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
공식 AWS 문서(위 링크)를 기준으로 2026-07-13에 마지막으로 검증되었습니다.