DynamoDBでPartiQLをjavaSDKで実行してみる。


この記事について

将来的に書く予定の「JavaFX で DynamoDB Viewer作ってみた」記事の1ステップ。
結構大きな話になると思うので、少しずつ技術ポイント毎に記事を書いて、ある一定程度の要件を満たせた段階で前述まとめ記事書く予定。

第一回記事:DynamoDBの情報を読み込んでJavaFXで表示してみる
第二回記事:JavaFXで動的にテーブル列を設定する
第三回記事:AWS java SDKでDynamoDBテーブル情報を取得してみる
第四回記事:JavaFX の TableView の選択範囲をクリップボードにコピーする。
第五回記事:JavaFX でコンポーネント作って動的生成してみる
第六回記事:DynamoDBのデータ型をjava SDKから把握してみる。
第七回記事:JavaFXでジェネリック使って入力ダイアログ作成してみる
第八回記事:JavaFXで各種サイズ制御
第九回記事:JavaFXのDialogで入力値チェック制御

※これまでの記事が基本になってます。メソッドなど細かい部分で再説明していない部分があります。不明点などありましたらコメントなど頂けたら対応しようと思います。

今回の追加機能

PartiQL対応
DynamoDBのレコード更新時、確認メッセージを出すように
表のカラム幅を最大1000に

現在の進捗


この時点でのソース(github)

今回の記事の背景

前回までの状態では、データ読み込みは一括読み込みか、プライマリーキーを1つだけ指定して読み込むという事のみ。実際のデータ取得では、複数のデータを指定して読み込む事を行いたい。
SQLライクに問い合わせ可能な PartiQLAWSがサポートしたという話を聞いた。
確かにJavaSDKのページ Interface DynamoDbClient を見てみると、PartiQLの文字が見える。が、SDKの使用サンプルページは更新されていない様子。
待っていればサンプルも充実すると思うが、ここはチャレンジしておきたい。

前準備

前述のSDKページからすると、現時点でのsoftware.amazon.awssdk最新バージョンは2.16.23らしいので(2021-03-20時点)、pomのバージョンを変更しておく。

SDKページ確認

基本的な問い合わせが出来そうなSDKページのexecuteStatement部分を見る。ちゃんとPartQLが使えると書いてある。

DynamoDbClient#executeStatement

多分一番基本的な問い合わせ。引数にClass ExecuteStatementRequest を指定するらしい。

テストしてみる。

そして、ちょっとEclipseのコード補完を頼りにやってみたらあっさり出来た。

    String partiQLString = "select * from hogehoge_table";
    DynamoDbClient dbclient = DynamoDbClient.builder().region(Region.AP_NORTHEAST_1).build();
    ExecuteStatementRequest executeStatementRequest = ExecuteStatementRequest.builder().statement(partiQLString).build();
    ExecuteStatementResponse executeStatementResponse = dbclient.executeStatement(executeStatementRequest);
    List<Map<String, AttributeValue>> items = executeStatementResponse.items();

もうちょっと苦労するかと思っていたが、ちょっと拍子抜け。もちろんRDBのSQLの様な好き勝手は出来ず、基本的にはDynamoDBの読み込みで可能な範囲のみ出来る。例:キー属性出ないとwhere句に指定できない。しかし、キー値でin句が使えるのは個人的には嬉しい。

次回予定

csv、json形式などでのファイル出力

累積残課題

  • 変更ダイアログで取り消しボタンでもチェックが走ってしまう
  • 新要素を追加した時、テーブルに列が追加されない

参考にさせて頂いたページ

公式ページ

Interface DynamoDbClient
executeStatement
Class ExecuteStatementRequest