Expected(레거시) - Amazon DynamoDB

Expected(레거시)

참고

가능하면 이러한 레거시 파라미터 대신 새 표현식 파라미터를 사용하는 것이 좋습니다. 자세한 내용은 DynamoDB에서 표현식 사용 단원을 참조하십시오. 이 파라미터를 대체하는 새 파라미터에 대한 자세한 내용은 대신 ConditionExpression을 사용합니다. 섹션을 참조하세요.

레거시 조건 파라미터 ExpectedUpdateItem 작업의 조건부 블록입니다. Expected는 속성/조건 페어의 맵입니다. 각 속성은 속성 이름, 비교 연산자 및 하나 이상의 값으로 구성됩니다. DynamoDB는 비교 연산자를 사용하여 속성을 제공된 값과 비교합니다. 각 Expected 요소에 대한 평가 결과는 true 또는 false입니다.

Expected 맵의 요소를 다수 지정하는 경우, 기본적으로 모든 조건이 true로 평가되어야 합니다. 즉, 조건은 AND 연산자를 사용하여 결합됩니다. (대신 ConditionalOperator 파라미터를 사용하여 조건을 OR로 연결할 수 있습니다. 이렇게 하는 경우 모든 조건이 아니라 조건 중 하나 이상이 true로 평가되어야 합니다.)

Expected 맵이 true로 평가되면 조건부 작업이 성공하지만, 그렇지 않으면 실패합니다.

Expected는 다음을 포함합니다.

  • AttributeValueList - 제공된 속성에 대해 평가되는 하나 이상의 값. 목록에 있는 값의 개수는 사용되는 ComparisonOperator에 따라 달라집니다.

    숫자 유형의 경우 값 비교가 숫자입니다.

    크다, 같다 또는 작다 등의 문자열 값 비교는 UTF-8 이진 인코딩을 사용하는 유니코드를 기준으로 합니다. 예를 들어 aA보다 크고 aB보다 큽니다.

    이진수 유형의 경우, DynamoDB가 이진수 값을 비교할 때 이진수 데이터의 각 바이트를 부호가 없는 것으로 처리합니다.

  • ComparisonOperator - AttributeValueList의 속성을 평가하는 비교기입니다. 비교를 수행하면 DynamoDB가 강력한 일관된 읽기(Strongly Consistent Read)를 사용합니다.

    다음 비교 연산자를 사용할 수 있습니다.

    EQ | NE | LE | LT | GE | GT | NOT_NULL | NULL | CONTAINS | NOT_CONTAINS | BEGINS_WITH | IN | BETWEEN

    다음은 각 비교 연산자에 대한 설명입니다.

    • EQ : 같음. EQ는 모든 데이터 형식(목록 및 맵 포함)에 대해 지원됩니다.

      AttributeValueList에는 문자열, 숫자, 이진수, 문자열 집합, 숫자 집합 또는 이진수 집합 유형의 AttributeValue 요소 하나만 포함될 수 있습니다. 요청에서 제공된 형식과 다른 형식의 AttributeValue 요소가 항목에 포함되어 있으면 값이 일치하지 않습니다. 예를 들어 {"S":"6"}{"N":"6"}과 같지 않습니다. 또한 {"N":"6"}{"NS":["6", "2", "1"]}과 같지 않습니다.

    • NE : 같지 않음. NE는 모든 데이터 형식(목록 및 맵 포함)에 대해 지원됩니다.

      AttributeValueList에는 문자열, 숫자, 이진수, 문자열 집합, 숫자 집합 또는 이진수 집합 유형의 AttributeValue 하나만 포함될 수 있습니다. 항목에 요청에서 제공한 형식과 다른 형식의 AttributeValue가 포함되어 있으면 값이 일치하지 않습니다. 예를 들어 {"S":"6"}{"N":"6"}과 같지 않습니다. 또한 {"N":"6"}{"NS":["6", "2", "1"]}과 같지 않습니다.

    • LE : 작거나 같음.

      AttributeValueList에는 문자열, 숫자, 이진수 유형의 AttributeValue 요소 하나만 포함될 수 있습니다(집합 유형 제외). 요청에서 제공된 형식과 다른 형식의 AttributeValue 요소가 항목에 포함되어 있으면 값이 일치하지 않습니다. 예를 들어 {"S":"6"}{"N":"6"}과 같지 않습니다. 또한 {"N":"6"}{"NS":["6", "2", "1"]}과 비교할 수 없습니다.

    • LT : 작음.

      AttributeValueList에는 문자열, 숫자, 이진수 유형의 AttributeValue 하나만 포함될 수 있습니다(집합 유형 제외). 요청에서 제공된 형식과 다른 형식의 AttributeValue 요소가 항목에 포함되어 있으면 값이 일치하지 않습니다. 예를 들어 {"S":"6"}{"N":"6"}과 같지 않습니다. 또한 {"N":"6"}{"NS":["6", "2", "1"]}과 비교할 수 없습니다.

    • GE : 크거나 같음.

      AttributeValueList에는 문자열, 숫자, 이진수 유형의 AttributeValue 요소 하나만 포함될 수 있습니다(집합 유형 제외). 요청에서 제공된 형식과 다른 형식의 AttributeValue 요소가 항목에 포함되어 있으면 값이 일치하지 않습니다. 예를 들어 {"S":"6"}{"N":"6"}과 같지 않습니다. 또한 {"N":"6"}{"NS":["6", "2", "1"]}과 비교할 수 없습니다.

    • GT : 큼.

      AttributeValueList에는 문자열, 숫자, 이진수 유형의 AttributeValue 요소 하나만 포함될 수 있습니다(집합 유형 제외). 요청에서 제공된 형식과 다른 형식의 AttributeValue 요소가 항목에 포함되어 있으면 값이 일치하지 않습니다. 예를 들어 {"S":"6"}{"N":"6"}과 같지 않습니다. 또한 {"N":"6"}{"NS":["6", "2", "1"]}과 비교할 수 없습니다.

    • NOT_NULL : 속성 있음. NOT_NULL은 모든 데이터 형식(목록 및 맵 포함)에 대해 지원됩니다.

      참고

      이 연산자는 속성의 데이터 형식이 아닌 존재 여부를 테스트합니다. 속성 "a"의 데이터 형식이 null이고 NOT_NULL을 사용하여 평가하는 경우, 결과가 부울 true가 됩니다. 속성 "a"가 존재하기 때문에 이러한 결과가 나오는 것이며, 데이터 형식은 NOT_NULL 비교 연산자와 관련 없습니다.

    • NULL : 속성 없음. NULL은 모든 데이터 형식(목록 및 맵 포함)에 대해 지원됩니다.

      참고

      이 연산자는 속성의 데이터 형식이 아닌 비존재 여부를 테스트합니다. 속성 "a"의 데이터 형식이 null이고 NULL을 사용하여 평가하는 경우, 결과가 부울 false가 됩니다. 속성 "a"가 존재하기 때문에 이러한 결과가 나오는 것이며, 데이터 형식은 NULL 비교 연산자와 관련 없습니다.

    • CONTAINS: 세트의 하위 시퀀스 또는 값 확인.

      AttributeValueList에는 문자열, 숫자, 이진수 유형의 AttributeValue 요소 하나만 포함될 수 있습니다(집합 유형 제외). 비교 대상의 속성이 문자열 유형이라면 연산자가 하위 문자열이 일치하는지 확인합니다. 비교 대상의 속성이 이진수 유형이라면 연산자가 대상에서 입력 이진수와 일치하는 부분 수열을 찾습니다. 비교 대상의 속성이 집합("SS", "NS" 또는 "BS")이라면 집합을 구성하는 어떤 요소든지 정확히 일치하는 것을 찾아야만 연산자가 true로 평가됩니다.

      CONTAINS는 목록의 경우 지원됩니다. "a CONTAINS b"를 평가할 때, "a"는 목록이 될 수 있지만, "b"는 집합, 맵 또는 목록이 될 수 없습니다.

    • NOT_CONTAINS: 세트의 하위 시퀀스 부재 또는 값의 부재 확인.

      AttributeValueList에는 문자열, 숫자, 이진수 유형의 AttributeValue 요소 하나만 포함될 수 있습니다(집합 유형 제외). 비교 대상의 속성이 문자열이라면 연산자가 하위 문자열이 일치하지 않는지 확인합니다. 비교 대상의 속성이 이진수라면 연산자가 대상에서 입력 이진수와 일치하는 부분 수열이 없는지 확인합니다. 비교 대상의 속성이 집합("SS", "NS" 또는 "BS")이라면 집합을 구성하는 어떤 요소든지 정확히 일치하는 것을 찾지 못해야만(does not) 연산자가 true로 평가됩니다.

      NOT_CONTAINS는 목록의 경우 지원됩니다. "a NOT CONTAINS b"를 평가할 때, "a"는 목록이 될 수 있지만, "b"는 집합, 맵 또는 목록이 될 수 없습니다.

    • BEGINS_WITH: 접두사 여부 확인.

      AttributeValueList에는 문자열 또는 이진수 유형의 AttributeValue 하나만 포함될 수 있습니다(숫자 또는 집합 유형 제외). 비교 대상의 속성은 문자열 또는 이진수 유형이 되어야 합니다(숫자 또는 집합 유형 제외).

    • IN: 두 집합 안의 일치하는 요소 확인.

      AttributeValueList에는 문자열, 숫자 또는 이진수 유형 중 하나 이상의 AttributeValue 요소가 포함될 수 있습니다(집합 유형 제외). 이 속성들은 기존 집합 유형 항목 속성과 비교됩니다. 입력된 집합 요소 중 하나라도 항목 속성에 있으면 표현식은 true로 평가됩니다.

    • BETWEEN: 첫 번째 값보다 크거나 같음 및 두 번째 값보다 작거나 같음.

      AttributeValueList에는 문자열, 숫자 또는 이진수(집합 유형 제외) 중에서 동일한 형식으로 2개의 AttributeValue 요소가 들어 있어야 합니다. 대상 값이 첫 번째 요소보다 크거나 같을 때, 그리고 두 번째 요소보다 작거나 같을 때 대상 속성이 일치합니다. 요청에서 제공된 형식과 다른 형식의 AttributeValue 요소가 항목에 포함되어 있으면 값이 일치하지 않습니다. 예를 들어 {"S":"6"}{"N":"6"}과 비교할 수 없습니다. 또한 {"N":"6"}{"NS":["6", "2", "1"]}과 비교할 수 없습니다.

다음 파라미터는 AttributeValueListComparisonOperator 대신 사용할 수 있습니다.

  • Value - DynamoDB가 속성과 값을 비교할 값.

  • Exists - DynamoDB가 조건부 작업을 시도하기 전에 값을 평가하도록 할 부울 값:

    • Existstrue이면, DynamoDB가 속성 값이 테이블에 이미 있는지를 확인합니다. 있으면, 조건이 true로 평가되고, 없으면 조건이 false로 평가됩니다.

    • Existsfalse이면, DynamoDB가 속성 값이 테이블에 없다고(not) 가정합니다. 값이 실제로 없으면, 가정이 유효하고 조건이 true로 평가됩니다. 값이 있으면, 값이 없다는 가정에도 불구하고 조건이 false로 평가됩니다.

    Exists의 기본값은 true입니다.

ValueExists 파라미터는 AttributeValueListComparisonOperator와 호환되지 않습니다. 두 파라미터 집합을 한 번에 사용하면 DynamoDB에서 ValidationException 예외를 반환합니다.

참고

이 파라미터는 목록 또는 맵 유형의 속성을 지원하지 않습니다.

대신 ConditionExpression 사용 - 예

특정 조건이 true인 경우에만 Music 테이블의 항목을 수정하길 원한다고 가정합니다. 다음 AWS CLI 예제에서와 같이 UpdateItem 요청을 Expected 파라미터와 함께 사용할 수 있습니다.

aws dynamodb update-item \ --table-name Music \ --key '{ "Artist": {"S":"No One You Know"}, "SongTitle": {"S":"Call Me Today"} }' \ --attribute-updates '{ "Price": { "Action": "PUT", "Value": {"N":"1.98"} } }' \ --expected '{ "Price": { "ComparisonOperator": "LE", "AttributeValueList": [ {"N":"2.00"} ] } }'

대신에 ConditionExpression을 사용할 수 있습니다.

aws dynamodb update-item \ --table-name Music \ --key '{ "Artist": {"S":"No One You Know"}, "SongTitle": {"S":"Call Me Today"} }' \ --update-expression 'SET Price = :p1' \ --condition-expression 'Price <= :p2' \ --expression-attribute-values '{ ":p1": {"N":"1.98"}, ":p2": {"N":"2.00"} }'