DynamoDB 조건 표현식 CLI 예제
다음은 조건 표현식을 사용하는 몇 가지 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
및 기타 함수에 대한 자세한 내용은 DynamoDB의 조건 및 필터 표현식, 연산자, 함수을 참조하십시오.
조건부 삭제
조건부 삭제를 수행하려면 조건 표현식과 함께 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"} }
참고
조건 표현식에서 :
(콜론 문자)은 실제 값의 자리 표시자인 표현식 속성 값을 나타냅니다. 자세한 내용은 DynamoDB에서 표현식 속성 값 사용 단원을 참조하십시오.
IN
, AND
및 기타 키워드에 대한 자세한 내용은 DynamoDB의 조건 및 필터 표현식, 연산자, 함수 단원을 참조하십시오.
이 예에서 ProductCategory
비교는 true로 평가되지만 Price
비교는 false로 평가됩니다. 이로 인해 조건 표현식이 false로 평가되고 DeleteItem
작업이 실패합니다.
조건부 업데이트
조건부 업데이트를 수행하려면 조건 표현식과 함께 UpdateItem
작업을 사용합니다. 작업이 성공하려면 조건식이 true로 평가되어야 하며, 그렇지 않으면 작업이 실패합니다.
참고
UpdateItem
은 업데이트 표현식도 지원하는데, 이 표현식에서 사용자는 항목에 대해 변경하고자 하는 사항을 지정합니다. 자세한 내용은 DynamoDB에서 업데이트 표현식 사용 단원을 참조하십시오.
위에서 정의한 항목으로 시작했다고 가정합니다.
다음 예제에서는 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에서 표현식 속성 값 사용 단원을 참조하십시오.
">" 및 기타 연산자에 대한 자세한 내용은 DynamoDB의 조건 및 필터 표현식, 연산자, 함수를 참조하십시오.
조건부 표현식 예시
다음 예에 사용된 함수에 대한 자세한 내용은 DynamoDB의 조건 및 필터 표현식, 연산자, 함수 단원을 참조하십시오. 표현식에서 다양한 속성 유형을 지정하는 방법에 대한 자세한 내용은 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"} }