DynamoDBのGSIのキーの値は変更できるよ!

2021.10.03

こんにちは、CX事業本部 IoT事業部の若槻です。

今回は、DynamoDBのGSI(Global Secondary Index)のキーの値は変更可能であることを確認してみました。

使用したDynamoDBテーブル

下記のようなGSIおよびLSI含むキーから成るDynamoDBテーブルを作りました。

用途 属性 タイプ
テーブル パーティションキー id 文字列
テーブル ソートキー createdAt 数値
GSI パーティションキー productOf 文字列
GSI ソートキー updatedAt 数値

現在の格納データはこんな感じ。

[
  {
  "id": "f001",
  "createdAt": 11111111,
  "productOf": "山形",
  "name": "りんご",
  "updatedAt": 11111111
  },
  {
  "id": "f002",
  "createdAt": 22222222,
  "productOf": "福島",
  "updatedAt": 22223333,
  "name": "桃"
  },
  {
  "id": "f003",
  "createdAt": 33333333,
  "productOf": "岩手",
  "updatedAt": 33334444,
  "name": "シャインマスカット"
  }
]

GSIを使ってこんな感じに検索できます。

テーブルのキーの値の変更(不可)

まずテーブルのパーティションキーとソートキーを変更不可であることを確認します。

りんごデータに対して、テーブルのパーティションキーであるid属性の値をf001からf005に変更しようとしたら、項目の再作成が必要となります。

りんごデータに対して、テーブルのソートキーであるcreatedAt属性の値を00000000から00001111に変更しようとしたら、こちらもまた項目の再作成が必要となります。

GSIのキーの値の変更(可能)

それでは今回の主目的、GSIのパーティションキーとソートキーを変更可能であることを確認します。

GSIのパーティションキーの値の変更

桃データに対して、GSIのパーティションキーであるproductOfを福島から福島県福島市に変更してみます。

変更できました。

GSIのソートキーの値の変更

シャインマスカットデータに対して、GSIのソートキーであるupdatedAtを33334444から44444444に変更してみます。

変更できました。

GSIの両方のキーの値の変更

念の為。

りんごデータに対して、GSIのパーティションキーproductOfを山形から山形県朝日町に、ソートキーupdatedAtを11111111から11112222に変更します。

変更できました。

おわりに

DynamoDBのGSI(Global Secondary Index)のキーの値は変更可能であることを確認してみました。

変更出来るんだっけっけ?とたまに迷うことがあるので、備忘のためこうして残しておきます。

以上