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만 그렇게 함).
  • 접근 패턴이 진화하면서 쿼리의 필요에서 드리프트한 프로젝션.

어떻게 해결하는가

  1. 프로젝션된 속성만 요청하세요ProjectionExpression을 GSI의 키 + 프로젝션된 집합으로 제한하거나, Select: ALL_ATTRIBUTES를 빼세요.
  2. 속성을 GSI 프로젝션에 추가하세요 — 새 속성의 경우 ProjectionType: INCLUDE(그것을 나열) 또는 ALL로 GSI를 생성/교체하세요. 기존 GSI의 프로젝션은 제자리에서 편집할 수 없습니다. 새 GSI를 추가하거나 다시 만드세요.
  3. 기본 테이블에서 가져오세요 — GSI가 실제로 반환하는 키를 사용해 전체 항목에 대해 기본 테이블에서 GetItem/BatchGetItem을 수행하세요.
  4. 인덱스에서 일상적으로 모든 속성이 필요하면 ProjectionType: ALL을 사용하세요(추가 스토리지/쓰기 비용을 감수).

쿼리하기 전에 GSI가 실제로 어떤 속성을 지녔는지 보고 싶나요? DynoTable 데스크톱 앱은 각 인덱스의 프로젝션을 보여주므로 거기 있는 것만 요청합니다 — does not project 놀라움이 없습니다.

관련 오류

참고 자료

공식 AWS 문서(위 링크)를 기준으로 2026-07-13에 마지막으로 검증되었습니다.

Console 없이 DynamoDB 작업하기

DynamoDB로는 실행할 수 없는 진짜 SQL(JOINs, GROUP BY, 집계)을 실행하는 빠른 DynamoDB 데스크톱 클라이언트. 시각적 편집과 여러분 자신의 Bedrock 키로 동작하는 AI 에이전트를 제공합니다.

30일 무료 체험, 신용카드 불필요 — 이후 기간 제한 없는 무료 요금제.