DynamoDB의 표현식 속성 이름(별칭) - Amazon DynamoDB

DynamoDB의 표현식 속성 이름(별칭)

표현식 속성 이름은 Amazon DynamoDB 표현식에서 실제 속성 이름의 대체 이름으로 사용하는 별칭(자리 표시자)입니다. 표현식 속성 이름은 파운드 기호(#)로 시작해야 하며, 그 뒤에 하나 이상의 영숫자가 이어져야 합니다. 밑줄(_) 문자도 사용할 수 있습니다.

이 단원에서는 표현식 속성 이름을 사용해야 하는 여러 가지 상황에 대해 설명합니다.

참고

이 단원의 예제에서는 AWS Command Line Interface(AWS CLI)를 사용합니다.

예약어

경우에 따라 DynamoDB 예약어와 충돌하는 속성 이름을 포함하는 표현식을 작성해야 할 때가 있습니다. 전체 예약어 목록은 DynamoDB의 예약어를 참조하십시오.

예를 들어, 다음 AWS CLI 예제는 COMMENT가 예약어이기 때문에 실패합니다.

aws dynamodb get-item \ --table-name ProductCatalog \ --key '{"Id":{"N":"123"}}' \ --projection-expression "Comment"

이 문제를 해결하려면 Comment#c와 같은 표현식 속성 이름으로 대체할 수 있습니다. #(파운드 기호)가 필요하며 이 기호는 속성 이름의 자리 표시자임을 나타냅니다. 이제 AWS CLI 예제는 다음과 같습니다.

aws dynamodb get-item \ --table-name ProductCatalog \ --key '{"Id":{"N":"123"}}' \ --projection-expression "#c" \ --expression-attribute-names '{"#c":"Comment"}'
참고

속성 이름이 숫자로 시작하거나 공백을 포함하거나 예약어를 포함하는 경우, 반드시 표현식 속성 이름을 사용하여 표현식에서 해당 속성의 이름을 대체해야 합니다.

특수 문자가 포함된 속성 이름

식에서 점(".")은 문서 경로의 특수 문자로 해석됩니다. 하지만 DynamoDB에서는 점 문자 및 하이픈('-')과 같은 기타 특수 문자를 속성 이름의 일부로 사용할 수도 있습니다. 이러한 사용은 경우에 따라 의미가 명확하지 않을 수도 있습니다. 설명을 위해 ProductCatalog 항목에서 Safety.Warning 속성을 가져오려 한다고 가정합니다(DynamoDB에서 표현식 사용 시 항목 속성 참조 참조).

프로젝션 표현식을 사용하여 Safety.Warning에 액세스하려 한다고 가정하겠습니다.

aws dynamodb get-item \ --table-name ProductCatalog \ --key '{"Id":{"N":"123"}}' \ --projection-expression "Safety.Warning"

DynamoDB는 예상 문자열("Always wear a helmet")이 아닌 빈 결과를 반환합니다. 이는 DynamoDB가 표현식의 점을 문서 경로 구분 기호로 해석하기 때문입니다. 이 경우 표현식 속성 이름(#sw)을 Safety.Warning의 대체 이름으로 정의해야 합니다. 그러고 나면 다음 프로젝션 표현식을 사용할 수 있습니다.

aws dynamodb get-item \ --table-name ProductCatalog \ --key '{"Id":{"N":"123"}}' \ --projection-expression "#sw" \ --expression-attribute-names '{"#sw":"Safety.Warning"}'

그러면 DynamoDB에서 정확한 결과가 반환됩니다.

참고

속성 이름에 점('.') 또는 하이픈('-') 이 포함된 경우 반드시 표현식 속성 이름을 사용하여 표현식에서 해당 속성의 이름을 대체해야 합니다.

중첩 속성

중첩된 속성 ProductReviews.OneStar에 액세스하려고 한다고 가정해 보겠습니다. 표현식 속성 이름에서 DynamoDB는 점(".")을 속성 이름 내의 문자로 취급합니다. 중첩된 속성을 참조하려면 문서 경로에 있는 각 요소의 표현식 속성 이름을 정의합니다.

  • #pr — ProductReviews

  • #1star — OneStar

이제 프로젝션 표현식에 #pr.#1star를 사용할 수 있습니다.

aws dynamodb get-item \ --table-name ProductCatalog \ --key '{"Id":{"N":"123"}}' \ --projection-expression "#pr.#1star" \ --expression-attribute-names '{"#pr":"ProductReviews", "#1star":"OneStar"}'

그러면 DynamoDB에서 정확한 결과가 반환됩니다.

속성 이름 반복 참조

표현식 속성 이름은 동일한 속성 이름을 반복적으로 참조해야 할 때 도움이 됩니다. 예를 들어 ProductCatalog 항목에서 리뷰 몇 개를 검색하는 다음 식을 살펴보겠습니다.

aws dynamodb get-item \ --table-name ProductCatalog \ --key '{"Id":{"N":"123"}}' \ --projection-expression "ProductReviews.FiveStar, ProductReviews.ThreeStar, ProductReviews.OneStar"

식을 간소화하기 위해 ProductReviews#pr과 같은 식 속성 이름으로 대체할 수 있습니다. 수정된 표현식은 다음과 같습니다.

  • #pr.FiveStar, #pr.ThreeStar, #pr.OneStar

aws dynamodb get-item \ --table-name ProductCatalog \ --key '{"Id":{"N":"123"}}' \ --projection-expression "#pr.FiveStar, #pr.ThreeStar, #pr.OneStar" \ --expression-attribute-names '{"#pr":"ProductReviews"}'

식 속성 이름을 정의하는 경우 전체 식에서 해당 식 속성 이름을 일관되게 사용해야 합니다. 또한 # 기호를 생략하면 안 됩니다.