본문 바로가기
IT/Serverless

DynamoDB : Attribute name is a reserved keyword 해결방법

by DOSGamer 2019. 8. 1.
반응형

에러 원인

DynamoDB TABLE 의 컬럼명과 DynamoDB 의 예약어가 충돌이 나서 발생하는 에러입니다

 

해결방법

TABLE 의 컬럼명을 사용할 때 (select 나 update 를 할 때) ExpressionAttributeNames 을 사용합니다

TABLE 컬럼명으로 Data 를 썼더니 사용할 때 마다 reserved keyword 라고 에러가 발생해서

 

SET 부분에서 Data 를 바로 쓰지 않고

ExpressionAttributeNames 으로 #push_data 라고 변경해서 사용하고

ExpressionAttributeNames 에서 #push_data 는 Data 컬럼이야 라고 지정해주니 잘 되네요

 

근본적으로는 예약어를 피해서 컬럼명을 만드는 게 좋겠지만

https://docs.aws.amazon.com/ko_kr/amazondynamodb/latest/developerguide/ReservedWords.html

 

DynamoDB의 예약어 - Amazon DynamoDB

DynamoDB의 예약어 다음 키워드는 DynamoDB에서 사용하기 위해 예약되어 있습니다. 이러한 단어를 식에서 속성 이름으로 사용하지 마십시오. DynamoDB 예약어와 충돌하는 속성 이름을 포함한 식을 작성해야 하는 경우, 식 속성 이름을 정의하여 예약어 대신 사용할 수 있습니다. 자세한 내용은 식 속성 이름 단원을 참조하십시오. ABORT ABSOLUTE ACTION ADD AFTER AGENT AGGREGATE ALL ALLOCATE ALTER

docs.aws.amazon.com

 

예약어를 사용했을 경우에는 ExpressionAttributeNames 을 사용하세요

 

그외에  ExpressionAttributeNames 를 사용해야 하는 경우는

  • 점이 포함된 속성 이름을 사용할 때
  • 중첩 속성
  • 속성이름을 반복적으로 사용할 때 단축어로 사용

https://docs.aws.amazon.com/ko_kr/amazondynamodb/latest/developerguide/Expressions.ExpressionAttributeNames.html

 

식 속성 이름 - Amazon DynamoDB

식 속성 이름 표현식 속성 이름은 표현식에서 실제 속성 이름의 대체 이름으로 사용하는 자리 표시자입니다. 식 속성 이름은 #로 시작해야 하며, 그 뒤에 하나 이상의 영숫자가 이어져야 합니다. 이 단원에서는 표현식 속성 이름을 사용해야 하는 여러 가지 상황에 대해 설명합니다. 참고 이 단원의 예제에서는 AWS CLI를 사용합니다. 프로그래밍 언어별 코드 샘플에 대한 자세한 내용은 DynamoDB SDK 시작하기 단원을 참조하십시오. 예약어 경우에 따라 Dy

docs.aws.amazon.com

예시는 링크에서 찾아볼 수 있습니다

반응형