📚

【NoSQL Workbench】DynamoDB Local に CSV インポートする

2023/12/26に公開

この記事で、DockerDynamoDB の環境を構築しました。
テストデータを何件か入れようと、Web サービスの方の DynamoDB からエクスポートした CSV をそのままインポートしたかったのですが、dynamodb-admin の方では対応していないようです。
なので、今回は NoSQL Workbench を導入し、Docker 環境の DynamoDB に CSV をインポートします。

手順

  • CSV を用意する
  • NoSQL Workbench をインストールする
  • local の DynamoDB との接続を設定する
  • NoSQL Workbench でデータモデル・テーブルを作成する
  • 作成したデータモデル・テーブルに CSV をインポートする
  • データモデルを DynamoDB の実テーブルに反映させる

CSV を用意する

適当な CSV を用意してください。
Web サービスの DynamoDB からエクスポートした CSV でも構いませんし、
お試し目的であれば、PartitionKey, SortKey, name のような感じでも構いません。
ただし、後述するデータモデルの属性名と属性の数、定義順が一致する必要があるので、不要な属性がある場合はここで削除しておいた方がいいでしょう。

今回使用する CSV

こんな感じの CSV を作成しました。

key type about
pk String 都道府県コード, Partition Key
sk String 郵便番号, Sort Key
name String 氏名

NoSQL Workbench をインストールする

↓からインストールすることができます。特別なことはありません。

https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/workbench.settingup.html

NoSQL Workbench でデータモデル・テーブルを作成する

NoSQL Workbench を起動して、Amazon DynamoDB の方の Launch を押下してください。

左側のナビゲーションペインから Visualizer を選択します。

Visualizer 画面から Create new data model を押下してください。

選択画面が表示されるので、Make model from scratch を選択します。
Name, Author, Description の入力を促されるので、NoSQL Workbench 上での設定になるので、ご自身がわかりやすい名前で入力してください。

左側のナビゲーションペインから Data modeler を選択し、Data model から、先ほど作成したモデルを選択し、Create new table を押下してください。

テーブルを定義する画面が表示されるので、キーや属性の設定を行ってください。テーブル名はなんでも大丈夫です。
ただし、先述したように先ほど作成した CSV の列名、列数、表示順と一致する必要があるので、注意してください。
今回は、テーブル名を area として、こんな感じに定義します。また GSI などの設定は今回使用しません。

attr key name type
Partition Key pk String
Sort Key sk String
Other Attr1 name String

作成することができたらこんな感じの画面が表示されます。

作成したデータモデル・テーブルに CSV をインポートする

Visualizer 画面に移動すると、Data model とテーブルを選択することができるようになっているので、定義したものを選択してください。
以下のような画面が表示されるので、右上の Actions から Edit data を選択してください。

テーブルのレコードを設定するような画面に移動します。
右上の Actions から Import CSV file を選択してください。

エクスプローラーが開くので、先ほど作成した CSV ファイルを選択して開いてください。
すると、Visualizer に反映されるので、Save Changes を押下して変更を保存してください。

local の DynamoDB との接続を設定する

左側のナビゲーションペインから Operation builder を選択します。

Add Connection を選択すると、ダイアログが開くので、DynamoDB local タブを選択し、
接続名(Connection name), ホスト名(Hostname), ポート(Port) をそれぞれ入力します。
今回は以下のように設定しました(この記事 からの続きの場合は同じ設定でいいはずです)。

id name
Connection name local-example
Hostname localhost
Port 8000

Connect を選択すると、新しい接続設定が追加されます。

データモデルをローカルの DynamoDB のテーブルに反映する

先ほどの Visualizer 画面に戻り、希望の Data model, table を選択します。

Commit to Amazon DynamoDB を選択してください。

ダイアログが表示されるので、先ほど設定した接続先を選択し、Commit を選択します。
成功した場合はその旨を知らせるトーストが表示されるはずです。
dynamodb-adminawscli などを利用している場合はそちらから確認してください。

Overwrite existing tables オプションに関する注意点

Overwrite existing tables オプションは、既に同名のテーブルが存在する場合に上書きするかどうかを決めるオプションです。
例えば既に空の area テーブルが存在する場合にこのオプションを外した場合、Commit は失敗します。レコードの有無は関係ありません。
このような場合は、Overwrite existing tables オプションにチェックを入れないとデータ追加はできません。

https://repost.aws/questions/QU9z6FnL8fTFGDVakE1zeIyg/i-can-t-commit-changes-to-dynamodb

さいごに

今回はローカルで作成した DynamoDB にテストデータを作成するために、NoSQL Workbench を導入し CSV インポート作業を行いました。
すでに本番環境で使用しているデータを何件かピックアップしてエクスポートし、CSV で加工してテスト環境に反映させたいときなどは便利に使えそうです。
ただし、本番環境での反映には気を付けたいですね。
以上、ありがとうございました。

参考

NoSQL Workbench

https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/workbench.html
https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/workbench.Visualizer.ImportCSV.html
https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/DynamoDBLocal.UsageNotes.html
https://repost.aws/questions/QU9z6FnL8fTFGDVakE1zeIyg/i-can-t-commit-changes-to-dynamodb

テストデータ生成

https://tm-webtools.com/Tools/TestData

Discussion