【AWS】DynamoDBのデータをAthenaで分析する | Dev Driven 開発・デザインチーム 【AWS】DynamoDBのデータをAthenaで分析する | 働くひとと組織の健康を創る iCARE

BLOG

【AWS】DynamoDBのデータをAthenaで分析する

MiyakawaKazuya
2021/05/26

こんにちは!
SREチームのずやです!

今回はAWSのDynamoDBのデータをAthenaで分析するまでの手順についてまとめたいと思います。

モチベーション

DynamoDB単体でも簡易なデータスキャンやパーティションキー/ソートキーを用いたクエリ実行が可能です。
しかし、一度に得られるデータ件数が限られたり、パーティションキー/ソートキー以外のカラムで条件式を組めないなど使い勝手はよろしくありません。
DyanmoDBのデータに対して柔軟にクエリを実行するにはAthenaを利用するのが一つの手段です。

手順

0. 準備

手順の流れとして、

  1. DynamoDBのデータをS3バケットにエクスポート
  2. S3バケットのファイルに対してAthenaからクエリを実行する環境を作成

となります。

そのため、まずはデータ置き場としてS3バケットを作成しておく必要があります。

今回は例示用に test-dynamodb-export-20210525 というS3バケットを作成し、以降の説明の中で使用しています。
ここは適宜お手元の環境に合わせてバケット名の部分を置き換えてください。

1. DynamoDBのデータをS3にエクスポートする

[DynamoDB] > [S3へのエクスポート] > [S3へのエクスポート]

「ソーステーブル」にエクスポート対象のDynamoDBテーブル名を、「送信先S3バケット」にエクスポート先のS3バケットのパスを入力し、 [エクスポート] をクリックします。
(エクスポートが完了するまで少し時間がかかります)

このとき、DynamoDBテーブルのポイントインタイムリカバリ(PITR)が無効になっている場合は有効にする必要があります。

エクスポートされたデータの確認

エクスポートされたデータは、指定したS3バケットの

/<プレフィックス(指定した場合)>/AWSDynamoDB/<エクスポートID>/

に配置されています。

この中の data フォルダ下に、DynamoDBのデータの中身が分割、圧縮されて格納されています。

2. Glueクローラの作成

S3にあるファイルに対してAthenaからクエリを実行するために、AWS Glueのクローラを利用してデータカタログを作成します。
まずはGlueクローラの設定から行います。

[AWS Glue] > [クローラ] > [クローラの追加] からクローラを新規作成していきます。

まず初めにクローラの名前を任意に設定します。

「Specify crawler source type」はデフォルトの選択肢のまま次にいきます。

「データストアの追加」ではインクルードパスに

s3://<バケット名>/<プレフィックス>/AWSDynamoDB/<エクスポートID>/data

と入力します。

「別のデータストアの追加」は いいえ のまま次へ

「IAMロールの選択」でクローラに必要な権限を与えるためのIAMロールを選択します。
適切なIAMロールがない場合は新規に作成することも可能です。

スケジュールについては オンデマンドで実行 にします。

次にクローラの出力設定です。
出力先のGlueのデータベースを選択します。
データベースがない場合は、 [データベースの追加] から新規作成が可能です。

最後に設定の確認画面に遷移するので、設定に問題がなければ [完了] をクリックして、クローラの作成はおしまいです。

3. Glueでデータカタログを生成

[AWS Glue] > [クローラ]

先ほど作成したクローラを選択して [クローラの実行] をクリックします。

クローラの実行が開始するので、これが完了すれば準備OKです!

4. Athenaで分析

以上でAthenaでクエリが実行できる環境が整いました。

最後に、クエリ作成時の注意点を一つ!

Athenaのクエリ上でのカラムは、

item.id.s

のように、

item.<DynamoDBでのカラム名>.<カラムの型に応じた文字>

となります。

DynamoDBでのカラム名をそのまま利用しようとするとエラーとなるためご注意ください。

それでは、良き分析人生を!

参考

・新機能 – Amazon DynamoDB テーブルデータを Amazon S3 のデータレイクにエクスポート。コードの記述は不要
https://aws.amazon.com/jp/blogs/news/new-export-amazon-dynamodb-table-data-to-data-lake-amazon-s3/