내용으로 건너뛰기

DynamoDB에서 "provided key element does not match the schema" 오류를 해결하려면 어떻게 해야 합니까?

3분 분량
0

Amazon DynamoDB 테이블에 대해 GetItem 요청을 실행하려고 하면 "provided key element does not match the schema" 오류가 나타납니다.

간략한 설명

이 오류는 다음과 같은 이유로 발생할 수 있습니다.

  • 키에 잘못된 데이터 유형을 지정했습니다.
  • 속성 이름을 잘못 지정했습니다.
  • 키의 일부만 지정했습니다.
  • 데이터가 잘못된 테이블에 기록되고 있습니다.
  • 불필요한 추가 키가 있습니다.
  • GetItem 요청을 실행하여 단일 항목 대신 다양한 항목을 가져오려고 합니다.
  • 테이블에는 복합 프라이머리 키가 있으므로 GetItem 요청을 실행하고 파티션 키와 정렬 키는 지정하지 않습니다.
  • 테이블에 정렬 키가 없으므로 GetItem 요청을 실행하고 파티션 키만 지정합니다.

해결 방법

프라이머리 키 및 정렬 키 데이터 유형 검토

GetItem 명령이 성공하려면 프라이머리 키 및 정렬 키 데이터가 DynamoDB 테이블의 데이터와 동일한 데이터 유형이어야 합니다. 다음 예제 명령에서 정렬 키 Year에는 문자열(S) 데이터 유형이 있습니다.

aws dynamodb get-item --table-name Key-Element --key '{"EventID":{"S":"test-item01"}, "Year":{"S":"2024"}}'

테이블은 숫자(N) 데이터 유형을 사용하기 때문에 다음과 같은 오류 메시지가 나타납니다.

"An error occurred (ValidationException) when calling the GetItem operation: The provided key element does not match the schema"

대신 숫자 데이터 형식을 사용하는 다음 명령을 실행합니다.

aws dynamodb get-item --table-name Key-Element --key '{"EventID":{"S":"test-item01"}, "Year":{"N":"2024"}}'

다음과 유사한 출력이 표시됩니다.

{
    "Item": {
        "EventID": {
            "S": "test-item01"
        },
        "Year": {
            "N": "2024"
        },
        "Works?": {
            "N": "1"
        }
    }
}

사용 사례에 맞는 작업 선택

BatchGetItem 또는 GetItem 작업 사용

DynamoDB 테이블에서 데이터를 검색할 때 Getitem 또는 BatchGetitem 작업을 사용할 수 있습니다. GetItem 작업은 한 번에 하나의 레코드를 검색합니다. 요청에는 테이블의 키 스키마가 포함되어야 합니다.

BatchGetItem 작업을 수행하려면 파티션 키만 있는 테이블의 파티션 키를 제공해야 합니다. 복합 프라이머리 키가 있는 테이블의 경우 BatchGetItem을 사용할 때 파티션 및 정렬 키를 제공해야 합니다.

쿼리 작업 사용

정렬 키를 지정하지 않은 상태에서 데이터를 검색하려면 Query(쿼리) 작업을 사용합니다. Query(쿼리)를 사용하면 데이터를 검색할 때 파티션 키만 지정할 수 있으므로 복합 프라이머리 키가 있는 테이블에 이 작업을 사용하십시오.

DynamoDB 스캔 API 사용

키가 아닌 속성을 기반으로 데이터를 검색하려면 DynamoDB Scan(스캔) API를 사용합니다. Scan(스캔) 작업을 사용하면 FilterExpression을 사용하여 프라이머리 키를 지정하지 않고도 모든 특성을 기반으로 데이터를 필터링할 수 있습니다.

키가 아닌 속성을 사용하여 데이터를 검색하려면 FilterExpression 내에서 중첩 검색을 사용하십시오. 예를 들어 중첩된 Data(데이터) 속성에서 특정 값과 일치하는 userId 속성이 있는 항목을 검색하려면 다음 표현식을 사용합니다.

"Data.userId": your_expression_values."

**중요:**Scan(스캔) 작업은 모든 항목을 반복하여 필터 조건이 충족되는지 검사하기 때문에 작업 요금이 빠르게 발생할 수 있습니다. Scan(스캔) 작업을 사용해야 하는 경우 큰 테이블을 스캔할 때 페이지 매김을 추가하십시오. 스캔 API는 직접 호출당 최대 1MB의 데이터만 반환합니다. 페이지 매김을 사용하여 새 데이터만 스캔합니다.

AWS 공식업데이트됨 2년 전
댓글 없음

관련 콘텐츠