DynamoDB GSI does not project the requested attribute
요약 — 글로벌 보조 인덱스를 쿼리하며 인덱스가 프로젝션하지 않는 속성을 (ProjectionExpression이나 Select=ALL_ATTRIBUTES를 통해) 요청했습니다. GSI는 자체 키 속성, 기본 테이블의 키 속성, 그리고 프로젝션에 나열한 것만 반환합니다 — 그 외에는 없습니다. 요청을 프로젝션된 속성으로 좁히거나, 속성을 GSI의 프로젝션에 추가하거나, 기본 키로 기본 테이블을 쿼리하세요.
무엇을 의미하는가
ValidationException: One or more parameter values were invalid: Global secondary
index <index_name> does not project <attribute_name>
# or, with Select=ALL_ATTRIBUTES on a KEYS_ONLY / INCLUDE index:
ValidationException: Select type ALL_ATTRIBUTES is not supported for global
secondary index <index_name> because its projection type is not ALL
# what the engine actually returns, reproduced against DynamoDB Local:
ValidationException: One or more parameter values were invalid: Global secondary index gsi1 does not project [unprojected]로컬 보조 인덱스(추가 비용으로 기본 항목에서 프로젝션되지 않은 속성을 가져올 수 있음)와 달리, GSI는 자체 완결적 복사본입니다. 프로젝션의 속성만 물리적으로 저장합니다 — AWS 자체 문서는 단도직입적입니다: "글로벌 보조 인덱스 쿼리는 기본 테이블에서 속성을 가져올 수 없습니다." GSI 쿼리에 그 집합 밖의 것을 요청하는 것은 충족할 수 없으므로, DynamoDB는 부분 데이터를 조용히 반환하는 대신 요청을 거부합니다(ValidationException, HTTP 400 — 재시도할 수 없음).
왜 발생하는가
ProjectionType: KEYS_ONLY인덱스를 키가 아닌 속성으로 쿼리.ProjectionType: INCLUDE인덱스를NonKeyAttributes목록에 없는 속성으로 쿼리.ProjectionType: ALL이 아닌 GSI에 대한Select: ALL_ATTRIBUTES.- LSI 동작을 가정 — GSI가 기본 테이블에서 프로젝션되지 않은 속성을 가져오기를 기대(LSI만 그렇게 함).
- 접근 패턴이 진화하면서 쿼리의 필요에서 드리프트한 프로젝션.
어떻게 해결하는가
- 프로젝션된 속성만 요청하세요 —
ProjectionExpression을 GSI의 키 + 프로젝션된 집합으로 제한하거나,Select: ALL_ATTRIBUTES를 빼세요. - 속성을 GSI 프로젝션에 추가하세요 — 새 속성의 경우
ProjectionType: INCLUDE(그것을 나열) 또는ALL로 GSI를 생성/교체하세요. 기존 GSI의 프로젝션은 제자리에서 편집할 수 없습니다. 새 GSI를 추가하거나 다시 만드세요. - 기본 테이블에서 가져오세요 — GSI가 실제로 반환하는 키를 사용해 전체 항목에 대해 기본 테이블에서
GetItem/BatchGetItem을 수행하세요. - 인덱스에서 일상적으로 모든 속성이 필요하면
ProjectionType: ALL을 사용하세요(추가 스토리지/쓰기 비용을 감수).
쿼리하기 전에 GSI가 실제로 어떤 속성을 지녔는지 보고 싶나요? DynoTable 데스크톱 앱은 각 인덱스의 프로젝션을 보여주므로 거기 있는 것만 요청합니다 — does not project 놀라움이 없습니다.
관련 오류
- Index not found — 인덱스 이름 자체가 잘못되었거나 아직 빌드 중.
- Query condition missed key schema element — GSI 키 조건이 불완전함.
- 코드 예제: Query a GSI in Node.js — 비교할 작동하는 GSI 쿼리.
- 학습: Index projections · GSI vs LSI · 인덱스(Indexes)
참고 자료
- Using Global Secondary Indexes in DynamoDB — Amazon DynamoDB Developer Guide
- Managing Global Secondary Indexes in DynamoDB — Amazon DynamoDB Developer Guide
- Query — Amazon DynamoDB API Reference
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
공식 AWS 문서(위 링크)를 기준으로 2026-07-13에 마지막으로 검증되었습니다.