
DynamoDBのGSIのキーの値は変更できるよ!
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは、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)のキーの値は変更可能であることを確認してみました。
変更出来るんだっけっけ?とたまに迷うことがあるので、備忘のためこうして残しておきます。
以上






