Skip to content

DynamoDBのスキャン時に「Attribute name is a reserved keyword; reserved keyword: type」が出る

   

DynamoDBのスキャン時に「Attribute name is a reserved keyword; reserved keyword: type」が出る時の対処法です。 カラム名にDynamoDBの予約語が使われていると出ました。

具体的にはテーブルに以下のようなアイテムを追加し、type でスキャンするとエラーが起きました。

aws dynamodb put-item \
--table-name pokemon-table \
--item '{ "number": { "N": "143" }, "name": { "S": "Snorlax" }, "type": { "S": "Normal" } }'
aws dynamodb scan \
--table-name pokemon-table \
--filter-expression 'type = :tp' \
--expression-attribute-values '{ ":tp": { "S": "Normal" } }'
An error occurred (ValidationException) when calling the Scan operation: Invalid FilterExpression: Attribute name is a reserved keyword; reserved keyword: type

expression-attribute-names を使い、type に別名を付けることで回避できました。

aws dynamodb scan \
--table-name pokemon-table \
--filter-expression '#tp = :tp' \
--expression-attribute-values '{ ":tp": { "S": "Normal" } }' \
--expression-attribute-names '{"#tp":"type"}'

そもそも予約語をカラム名にしない方が良いのかもしれません。

関連記事

  1. プロファイルを使って複数のAWSアカウントを使い分ける
  2. SwiftUIでのプッシュ通知の最小構成
  3. LambdaのコードをCLIから更新する
  4. ALBに独自ドメインを設定してHTTPSにする
  5. EC2インスタンスにnginxをインストールしてブラウザからアクセスする
  6. LambdaとEvent BridgeでDiscordの目覚ましBotを作る
  7. AWS CLI を使ってS3バケットを作成する