제공된 항목 키 목록에 중복 항목이 포함되어 있습니다(BatchGetItem)

TL;DR — 한 테이블에 대한 BatchGetItem Keys 배열에는 동일한 기본 키가 두 번 이상 나열됩니다. DynamoDB는 배치의 모든 키가 고유해야 하며 전체 요청을 거부합니다. 즉, 속이는 키를 자동으로 삭제하지 않습니다. 보내기 전에 키 목록의 중복을 제거하세요.

무엇을 의미하는가

ValidationException: Provided list of item keys contains duplicates

BatchGetItem은 테이블 전체에서 최대 100개의 항목을 읽습니다. 단일 테이블의 Keys 목록 내에서 각 항목은 고유한 기본 키(파티션 키 또는 복합 테이블의 경우 파티션 + 정렬 키)여야 합니다. 동일한 키로 확인되는 두 항목이 이 HTTP 400ValidationException`를 통과하고 전체 호출이 실패합니다. 항목이 반환되지 않습니다. 현재 상태로는 재시도할 수 없습니다.

왜 발생하는가

  • 동일한 키가 목록에 두 번 나타납니다. 이는 ID가 여러 소스에서 수집되어 병합되지 않은 경우가 많기 때문입니다.
  • 소스에 중복 행이 있는 생성된 키 목록(예: 레코드 목록을 키에 매핑)
  • 복합 키 혼동 — 두 항목이 파티션 키를 공유하지만 정렬 키가 다르다는 사실을 잊었습니다. 또는 둘 다 실제로 동일합니다.
  • 실제 중복을 가리는 사례/유형 차이 — 동일한 값으로 마샬링되는 두 개의 키.
  • 중복 제거 단계 없이 키를 일괄 처리하는 파이프라인(Glue, 맞춤형 ETL)을 로드합니다.

어떻게 해결하는가

  1. 통화 전에 중복을 제거합니다. 안정적인 문자열로 각 항목을 입력하고 다음 중 하나를 유지합니다.

    const seen = new Set();
    const keys = raw.filter((k) => {
      const id = `${k.pk.S}#${k.sk?.S ?? ''}`;
      if (seen.has(id)) return false;
      seen.add(id);
      return true;
    });
  2. 배치는 가방이 아니라 세트라는 점을 기억하세요 — 키당 한 번의 읽기만 필요합니다. 항목은 관계없이 한 번만 돌아옵니다.

  3. BatchGetItem100개 키로 청크하고 응답에서 UnprocessedKeys를 처리합니다(중복이 아닌 제한).

  4. 문제가 업스트림에서 재발되지 않도록 동일한 중복 제거 기능으로 ETL/로더를 보호하세요.

  5. 각 배치 전에 키 목록 길이를 기록합니다. 중복 항목이 들어오면 오류로 인해 색인이 제공되지 않습니다. 로그에는 ID를 반복하는 업스트림 소스가 표시되어야 합니다.

DynoTable 경로

프로덕션에서 키를 일괄 읽기 전에 DynoTable에서 중복 항목을 찾아냅니다. ⌘K로 테이블을 열고 가져오려는 ID로 필터링한 다음 각 기본 키가 한 번 나타나는지 확인합니다. 항목 목록에는 파티션 키와 정렬 키가 나란히 표시되므로 복합 키 충돌이 분명합니다.

읽기를 코드로 이동할 때 Query Builder를 사용하여 먼저 단일 키 읽기의 프로토타입을 만든 다음 청크 BatchGetItem로 크기를 조정합니다. ⌘P로 프로필을 전환합니다. 설정 → 프로필에서 연결 테스트를 사용하여 구성합니다. Connect to AWSInstall를 참조하세요.

출처

관련 오류

참고 자료

위에 링크된 공식 AWS 문서를 기준으로 2026년 7월 13일에 마지막으로 확인되었습니다.

Console 없이 DynamoDB 작업하기

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

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