조건 표현식 - Amazon DynamoDB

조건 표현식

다음은 조건 표현식을 사용하는 몇 가지 AWS Command Line Interface(AWS CLI) 예제입니다. 이 예제는 DynamoDB에서 표현식 사용 시 항목 속성 참조에서 소개된 ProductCatalog 테이블을 기반으로 합니다. 이 테이블의 파티션 키는 Id이며 정렬 키는 없습니다. 다음 PutItem 작업은 예제에서 참조할 샘플 ProductCatalog 항목을 생성합니다.

aws dynamodb put-item \ --table-name ProductCatalog \ --item file://item.json

--item의 인수는 item.json 파일에 저장됩니다. 간소화를 위해 항목 속성 몇 개만 사용됩니다.

{ "Id": {"N": "456" }, "ProductCategory": {"S": "Sporting Goods" }, "Price": {"N": "650" } }

조건부 추가

PutItem 작업은 동일한 프라이머리 키가 있는 항목을 덮어씁니다(있는 경우). 이 동작을 방지하려면 조건 표현식을 사용합니다. 이렇게 하면 해당 항목에 동일한 프라이머리 키가 아직 없는 경우에만 쓰기를 진행할 수 있습니다.

다음 예제에서는 attribute_not_exists()를 사용하여, 쓰기 작업을 시도하기 전에 테이블에 프라이머리 키가 있는지 확인합니다.

참고

프라이머리 키가 파티션 키(pk)와 정렬 키(sk)로 구성된 경우 이 파라미터는 쓰기 작업을 시도하기 전에 attribute_not_exists(pk) AND attribute_not_exists(sk) 전체 문이 true로 평가되는지 아니면 false로 평가되는지 확인합니다.

aws dynamodb put-item \ --table-name ProductCatalog \ --item file://item.json \ --condition-expression "attribute_not_exists(Id)"

조건 표현식이 false로 평가되는 경우 DynamoDB는 조건부 요청 실패라는 오류 메시지를 반환합니다.

참고

attribute_not_exists 및 기타 함수에 대한 자세한 내용은 조건 및 필터 표현식, 연산자, 함수을 참조하십시오.

조건부 삭제

조건부 삭제를 수행하려면 조건 표현식과 함께 DeleteItem 작업을 사용합니다. 작업이 성공하려면 조건식이 true로 평가되어야 하며, 그렇지 않으면 작업이 실패합니다.

위에서 정의한 항목을 고려해 보겠습니다.

다음 조건에서만 항목을 삭제하려 한다고 가정합니다.

  • ProductCategory는 "스포츠 상품" 또는 "원예용 소모품"입니다.

  • Price는 500에서 600 사이입니다.

다음 예제에서는 항목을 삭제하려고 시도합니다.

aws dynamodb delete-item \ --table-name ProductCatalog \ --key '{"Id":{"N":"456"}}' \ --condition-expression "(ProductCategory IN (:cat1, :cat2)) and (Price between :lo and :hi)" \ --expression-attribute-values file://values.json

--expression-attribute-values의 인수는 values.json 파일에 저장됩니다.

{ ":cat1": {"S": "Sporting Goods"}, ":cat2": {"S": "Gardening Supplies"}, ":lo": {"N": "500"}, ":hi": {"N": "600"} }
참고

조건 표현식에서 :(콜론 문자)은 실제 값의 자리 표시자인 표현식 속성 값을 나타냅니다. 자세한 내용은 표현식 속성 값 단원을 참조하십시오.

IN, AND 및 기타 키워드에 대한 자세한 내용은 조건 및 필터 표현식, 연산자, 함수 단원을 참조하십시오.

이 예에서 ProductCategory 비교는 true로 평가되지만 Price 비교는 false로 평가됩니다. 이로 인해 조건 표현식이 false로 평가되고 DeleteItem 작업이 실패합니다.

조건부 업데이트

조건부 업데이트를 수행하려면 조건 표현식과 함께 UpdateItem 작업을 사용합니다. 작업이 성공하려면 조건식이 true로 평가되어야 하며, 그렇지 않으면 작업이 실패합니다.

참고

UpdateItem업데이트 표현식도 지원하는데, 이 표현식에서 사용자는 항목에 대해 변경하고자 하는 사항을 지정합니다. 자세한 내용은 업데이트 표현식 단원을 참조하십시오.

위에서 정의한 항목으로 시작했다고 가정합니다.

다음 예제에서는 UpdateItem 작업을 수행합니다. 이 작업은 제품의 Price를 75만큼 감소시키려고 시도하지만, 조건 표현식은 현재 Price가 500보다 작거나 같은 경우 업데이트를 방지합니다.

aws dynamodb update-item \ --table-name ProductCatalog \ --key '{"Id": {"N": "456"}}' \ --update-expression "SET Price = Price - :discount" \ --condition-expression "Price > :limit" \ --expression-attribute-values file://values.json

--expression-attribute-values의 인수는 values.json 파일에 저장됩니다.

{ ":discount": { "N": "75"}, ":limit": {"N": "500"} }

시작 Price가 650이면 UpdateItem 작업은 Price를 575로 감소시킵니다. UpdateItem 작업을 다시 실행하면 Price는 500으로 감소됩니다. 세 번째로 작업을 실행하면 조건 표현식이 false로 평가되고 업데이트가 실패합니다.

참고

조건 표현식에서 :(콜론 문자)은 실제 값의 자리 표시자인 표현식 속성 값을 나타냅니다. 자세한 내용은 표현식 속성 값 단원을 참조하십시오.

">" 및 기타 연산자에 대한 자세한 내용은 조건 및 필터 표현식, 연산자, 함수를 참조하십시오.

조건부 표현식 예시

다음 예에 사용된 함수에 대한 자세한 내용은 조건 및 필터 표현식, 연산자, 함수 단원을 참조하십시오. 표현식에서 다양한 속성 유형을 지정하는 방법에 대한 자세한 내용은 DynamoDB에서 표현식 사용 시 항목 속성 참조 단원을 참조하십시오.

항목의 속성 확인

속성이 존재하는지(또는 존재하지 않는지)를 확인할 수 있습니다. 조건 표현식이 true로 평가되는 경우 작업이 성공하고, 그렇지 않으면 작업이 실패합니다.

다음 예제에서는 attribute_not_exists를 사용하여 Price 속성이 없는 경우에만 제품을 삭제합니다.

aws dynamodb delete-item \ --table-name ProductCatalog \ --key '{"Id": {"N": "456"}}' \ --condition-expression "attribute_not_exists(Price)"

DynamoDB는 attribute_exists 함수도 제공합니다. 다음 예제에서는 좋지 않은 평가를 받은 경우에만 제품을 삭제합니다.

aws dynamodb delete-item \ --table-name ProductCatalog \ --key '{"Id": {"N": "456"}}' \ --condition-expression "attribute_exists(ProductReviews.OneStar)"

속성 유형 확인

attribute_type 함수를 사용하여 속성 값의 데이터 형식을 확인할 수 있습니다. 조건 표현식이 true로 평가되는 경우 작업이 성공하고, 그렇지 않으면 작업이 실패합니다.

다음 예제에서는 문자열 집합 형식의 Color 속성이 있는 경우에만 attribute_type을 사용하여 제품을 삭제합니다.

aws dynamodb delete-item \ --table-name ProductCatalog \ --key '{"Id": {"N": "456"}}' \ --condition-expression "attribute_type(Color, :v_sub)" \ --expression-attribute-values file://expression-attribute-values.json

--expression-attribute-values의 인수는 expression-attribute-values.json 파일에 저장됩니다.

{ ":v_sub":{"S":"SS"} }

문자열 시작 값 확인

begins_with 함수를 사용하여 문자열 속성 값이 특정 하위 문자열로 시작하는지 확인할 수 있습니다. 조건 표현식이 true로 평가되는 경우 작업이 성공하고, 그렇지 않으면 작업이 실패합니다.

다음 예제에서는 Pictures 맵의 FrontView 요소가 특정 값으로 시작하는 경우에만 begins_with를 사용하여 제품을 삭제합니다.

aws dynamodb delete-item \ --table-name ProductCatalog \ --key '{"Id": {"N": "456"}}' \ --condition-expression "begins_with(Pictures.FrontView, :v_sub)" \ --expression-attribute-values file://expression-attribute-values.json

--expression-attribute-values의 인수는 expression-attribute-values.json 파일에 저장됩니다.

{ ":v_sub":{"S":"http://"} }

세트의 요소 확인

contains 함수를 사용하여 집합의 요소를 확인하거나 문자열 내의 하위 문자열을 찾을 수 있습니다. 조건 표현식이 true로 평가되는 경우 작업이 성공하고, 그렇지 않으면 작업이 실패합니다.

다음 예제에서는 Color 문자열 집합에 특정 값을 가진 요소가 있는 경우에만 contains를 사용하여 제품을 삭제합니다.

aws dynamodb delete-item \ --table-name ProductCatalog \ --key '{"Id": {"N": "456"}}' \ --condition-expression "contains(Color, :v_sub)" \ --expression-attribute-values file://expression-attribute-values.json

--expression-attribute-values의 인수는 expression-attribute-values.json 파일에 저장됩니다.

{ ":v_sub":{"S":"Red"} }

속성 값의 크기 확인

size 함수를 사용하여 속성 값의 크기를 확인할 수 있습니다. 조건 표현식이 true로 평가되는 경우 작업이 성공하고, 그렇지 않으면 작업이 실패합니다.

다음 예제에서는 VideoClip 이진 속성의 크기가 64000바이트보다 큰 경우만 size를 사용하여 제품을 삭제합니다.

aws dynamodb delete-item \ --table-name ProductCatalog \ --key '{"Id": {"N": "456"}}' \ --condition-expression "size(VideoClip) > :v_sub" \ --expression-attribute-values file://expression-attribute-values.json

--expression-attribute-values의 인수는 expression-attribute-values.json 파일에 저장됩니다.

{ ":v_sub":{"N":"64000"} }