はじめに
DynamoDB上に格納されたデータをQuickSightで可視化しようとAthena Federated Query(DynamoDBコネクタ)を使用したところ、DynamoDB上に定義された属性(カラム)が一部しか取得できないという状況が発生しました。
本記事ではその解消手順について記載しています。
実際の設定手順
DynamoDBコネクタに組み込まれているスキーマの推論機能が完全ではないらしく、このような現象が発生してしまっているようです。
これを解消してあげるために、GlueでDynamoDBのスキーマを定義します。
Glue上でスキーマを定義する
GlueのCrawlerを使用して自動でテーブルスキーマを生成した場合、DynamoDBのテーブル名の-(ハイフン)が_(アンダーバー)に自動的に変換されてテーブル名の整合が取れなくなる場合があります。なので、ここでは手動で作成する手順を紹介します。
まず、コンソール上からGlueのページを開き、データベースを作成します。
その際、Database名はdefaultを指定します。(それ以外は空欄でOK)
次にtableを作成します。
NameにはDynamoDBのテーブル名を指定してください。
Databaseには先程作成したdefaultを指定します。
それ以外はデフォルト値のまま作成してください。
tableの作成が完了したら、テーブルの詳細ページ → Actions → Edit tableより設定を変更します。
以下の図のように各項目を修正してください。
- Table details
- input format: 削除
- Output format: 削除
- Serialization lib: 削除
- Table properties
- classification: json → dynamodb へ変更
その後、dynamodb上の実際のスキーマ定義を設定します。
スキーマ定義が完了し、Athena上でスキーマ定義が正常に参照可能か確認します。
Glue上で定義したdynamoDBの定義がAthena上で参照できることが確認できました!
終わりに
Athena Federated Queryを使用した際、dynamoDBのテーブル定義をGlueで実施する方法を記載しました。
本記事がどなたかのお役に立てれば幸いです。
参考記事
https://docs.aws.amazon.com/ja_jp/athena/latest/ug/connectors-dynamodb.html
https://github.com/awslabs/aws-athena-query-federation/issues/348