0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AWS java SDKでDynamoDBテーブル情報を取得してみる

Posted at

この記事について

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

第一回記事:DynamoDBの情報を読み込んでJavaFXで表示してみる
第二回記事:JavaFXで動的にテーブル列を設定する

※前回の記事が基本になってます。メソッドなど再説明していない部分があります。

今回の進捗

image.png

今回終了時のソースはこちら。Github

今回つけた機能

  • localDynamoDb対応
  • テーブルリスト表示
  • 選択したテーブルの構造から検索条件に主キー情報を自動設定
  • ついでにレコード件数とテーブルサイズも表示
  • 検索条件無指定も可能に
  • パーティションキーとソートキーを表の冒頭に表示

それぞれのポイント

localDynamoDb対応

各dynamoDB機能(Scan、Query)のベースとなるAbstructクラスを準備し、そのクラス中でConnectorの分岐を行う。それぞれの継承先では気にしなくて良い様に。

テーブルリスト表示

基本は公式サンプル。読み込みクラスである ListTablesRequest では検索条件が指定できなさそうなので、java側でフィルタリング。
※読み込み条件を指定できる手法が見つかったら変更予定。

選択したテーブルの構造から検索条件に主キー情報を自動設定(ついでにレコード件数とテーブルサイズも表示)

同じく公式サンプル から DescribeTable 機能を使用。
TableDescription 形式の情報が取得可能。以下の情報が解る。

  • tableName:テーブル名
  • tableArn:ARN
  • tableStatus:ステータス
  • itemCount:レコード数
  • tableSizeBytes:テーブルサイズ
  • provisionedThroughput:プロビジョン済みスループット
  • readCapacityUnits:読み込みキャパシティ
  • writeCapacityUnits:書き込みキャパシティ
  • attributeDefinitions:属性定義のリスト
  • keySchema:キー情報

検索条件無指定も可能

検索条件がある時はQuery、全読み込みはScanを使う

パーティションキーとソートキーを頭に表示

今回一番面倒だった部分。
DynamoDBは、RDBの様にテーブル構造が明確に定義されているわけではない。取得されるデータのフィールド順は不定。そのままだと表にした時にデータの把握がしにくい。パーティションキー、ソートキーを冒頭にセットしたい。
その為にフィールド情報を以下の情報から組み立てる必要がある。今回はキーのフィールド名とデータ型情報は最初の2つから。それ以外のフィールド名とデータ型は実データから取得するようにした。

  • TableDescription.keySchema から取得できるKeySchemaElementクラス。
    KeySchemaElement.keyTypeでpartitionKey(HASH)とsortKey(RANGE)が解る。
    KeySchemaElement.attributeNameでフィールド名が解る。
  • TableDescription.attributeDefinitions から取得できる各フィールドのAttributeDefinitionクラス。
    AttributeDefinition.attributeTypeでEnumのScalarAttributeTypeクラスで文字列か数値かが解る。
    AttributeDefinition.attributeNameでフィールド名が解る。
    ※全フィールドがある訳ではない。キーやインデックスに使用していないフィールドは無いと思われる。
  • 検索結果(QueryResponse、ScanResponseのitems)から List>が取得できる。
    AttributeValueにはhasSs,hasNsなどがあり、ある程度のデータ型が解る。
    しかし文字型と数値型などが解らず、一旦toStringで文字列を取得後「AttributeValue(N=」で始まるかなどで判断。

次回予定

  • テーブル表示内容のコピー(キー値の取得など)
  • 検索結果の複数表示(タブ表示で複数テーブル検索結果切り替え)
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?