DynamoDB で SQL を使ってみる

Yossy
2023-04-14
2023-04-14

DynamoDB に興味があったものの敷居が高いなと思っていたところ、DynamoDB も SQL で操作できるらしいと知ったので、試してみようと思います。(実際は、MySQL とまったく同じ構文ではなかったのですが、かなり近い書き方ができました。)

まずは、細かいことは置いといて、SELECT / INSERT / UPDATE / DELETE を実行してみようと思います。

■ テーブルを作る

早速、SQL でアクセスするために、MySQL 同様、データの入れ物になるテーブルを作ってみようと思います。DynamoDB の管理画面を見てみると、テーブルメニューがあったので、ここからテーブルを作ってみます。

テーブル名とパーティションキー(MySQL のプライマリーキーのようなもの)を指定するだけでテーブルは作成できました。パフォーマンス、メンテナンス、バックアップに関する設定なども細かくできるようですが、今回は、デフォルトのまま変更せずにテーブルを作ります。

テーブル名:`productInformation`
パーティションキー:`productId`

として作成してみます。

20230301-0010

■ テーブルにフィールド情報を追加

次は、フィールド情報(カラムや列情報)の追加かなと思っていたのですが、そもそもメニューが見当たらず?どうやら、データ(行)を追加するときに指定したフィールド名が、自動的に追加されることになるようです。

この前提の元

pdoructId : 0010
productName : LE-7A

というデータを追加すると、productName というフィールドが作成されます。

この状態で、

pdoructId : 0020
productName : NX-01
productType : Space Ship

というデータを追加すると、productType というフィールが追加されます。

この点、ちょっと躓きました。

■ SQL によるデータ操作

テーブルができたので、実際にSQLでデータを操作してみようと思います。管理画面から、SQL を実行することができるので、今回は、その状態で試してみます。

20230301-0020

■ データの追加

ちょっと構文が違いますが、感覚的には SQL と同じような感じです。

INSERT INTO productInformation value {'productId' : '0010','productName' : 'LE-7A'};
INSERT INTO productInformation value {'productId' : '0020','productName' : 'NX-01', 'productType' : 'Space Ship'};



登録したデータは管理画面から参照できました。ちゃんと、3つフィールドができてました。
https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/ql-reference.insert.html

20230301-0030

■ データの削除

DELETE FROM productInformation WHERE "productId" = '0010';

https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/ql-reference.delete.html

■ データの更新

UPDATE "productInformation" SET productName='NCC-1701' WHERE productId='0020';

https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/ql-reference.update.html

■ データの選択

SELECT * FROM productInformation;

https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/ql-reference.delete.html

 

まずは、最初の一歩は踏み出せたかもしれません。次は、AWS-SDK などを試してみようと思います。あと、記事書いていて思ったのですが、この記事のタイトルは「Dynamo で、SQL 互換の PQL(PartiQL) を使ってみる」の方がいいのかも?と、思ったりもしました。