표현식에서 사용되지 않는 ExpressionAttributeValues에 제공된 값
TL;DR — 표현식이 참조하지 않는 ExpressionAttributeValues(예: :status)에 값 자리 표시자를 제공했습니다. DynamoDB에서는 선언된 모든 :value를 KeyConditionExpression, FilterExpression, UpdateExpression 또는 ConditionExpression에서 사용해야 합니다. 고아 값을 제거하거나 해당 값을 사용하려는 표현식을 수정하세요.
무엇을 의미하는가
ValidationException: 1 validation error detected: Value provided in ExpressionAttributeValues unused in
expressions: keys: {:status}
# what the engine actually returns, reproduced against DynamoDB Local:
ValidationException: 1 validation error detected: Value provided in ExpressionAttributeValues unused in expressions: keys: {:status}ExpressionAttributeValues는 표현식을 비교하는 리터럴 값(:status, :min, …)에 대한 대체 맵입니다. DynamoDB는 양방향 계약을 시행합니다. 즉, 표현식에 사용된 모든 :placeholder를 선언해야 하며 **그리고** 선언된 모든 자리 표시자를 사용해야 합니다. 표현식 참조가 없는 남은 값은 이 HTTP 400 ValidationException`를 트리거합니다. 클라이언트 측에서는 맵이 일치할 때까지 재시도할 수 없습니다.
왜 발생하는가
- 식을 편집한 후 오래된 값 — 식에서
#s = :status를 삭제했지만 값 맵에는:status를 남겼습니다. - 복사-붙여넣기 드리프트 — 현재 요청보다 조건이 더 많은 이전 요청의 값 맵을 재사용합니다.
- 과대 선언된 생성된 요청 - 나중에 제거된 필터 절에 대해 빌더가
:v을 추가했습니다. - 이름 대 값 혼합 —
#status(이름 별칭)을 의미했지만:status(값)으로 선언했습니다. - 오타 — 지도에서는
:status을 선언하는 반면 표현식은:stat를 사용합니다.
어떻게 해결하는가
ExpressionAttributeValues의 메시지 이름 사용하지 않은 값을 삭제합니다.- 표현식을 사용하여 값을 고정 상태로 유지 — 표현식이 참조하는 경우에만
:placeholder을 선언합니다. - 이름과 값 확인 —
:자리 표시자는ExpressionAttributeValues에 들어갑니다.#별칭은ExpressionAttributeNames에 들어갑니다. - 표현식과 해당 맵을 함께 작성하여 값이 남아 있지 않도록 합니다.
- 지도에서 모든
:key에 대한 표현식 문자열을 검색합니다. 단일 문자 오타(:stat대:status)로 인해 선언된 값이 사용되지 않습니다.
DynoTable에서 쿼리
DynoTable은 사용자가 구성한 필터 행에서 ExpressionAttributeValues를 생성합니다. 출력의 모든 :placeholder는 표현식 문자열에서 참조됩니다. ⌘K가 포함된 테이블을 열고, 쿼리 패널에 필터를 추가하고, 방출된 맵을 SDK 호출에 복사하여 고아 값을 제거하세요.
실패한 요청을 디버깅할 때 표현식을 Expression Builder에 붙여넣고 해당 값 맵을 사용자의 값과 비교하세요. 프로필 전환(⌘P) 및 설정 → 프로필의 연결 테스트는 동일한 테이블에 대해 테스트하고 있음을 확인합니다. Connect to AWS 및 Install를 참조하세요.
출처
- Using expression attribute values in DynamoDB (2026-07-13 인증)
- DynamoDB condition expression examples (2026-07-13 인증)
관련 오류
- Value provided in ExpressionAttributeNames unused in expressions —
#name별칭에 대해서도 동일한 규칙입니다. - ExpressionAttributeValues contains invalid value — 맵의 형식이 잘못되었거나 비어 있는 값 및 역방향 불일치: 참조되었지만 제공되지 않은
:placeholder. - The provided expression refers to an attribute that does not exist in the item — 표현식이 존재하지 않는 항목 속성을 읽습니다.
- 학습: Expression names & values
참고 자료
- Using expression attribute values in DynamoDB — Amazon DynamoDB Developer Guide
- DynamoDB condition expression examples — Amazon DynamoDB Developer Guide
- Query — Amazon DynamoDB API Reference
위에 링크된 공식 AWS 문서를 기준으로 2026년 7월 13일에 마지막으로 확인되었습니다.