4
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 1 year has passed since last update.

DynamoDBのデータをAmazon Athenaでクエリ実行まで

Last updated at Posted at 2022-03-27

はじめに

DynamoDBのデータをAthenaで分析したい、という話です。
基本的には以下の記事の内容そのままですが、一部そのままだと使いにくい部分があるので補足しています。

新機能 – Amazon DynamoDB テーブルデータを Amazon S3 のデータレイクにエクスポート。コードの記述は不要

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

まず、DynamoDBのデータをS3に保存します。
Athenaから直接DynamoDBにつなぐ方法もありますが、DynamoDBのキャパシティを消費するので今回は候補から除外しました。
Amazon Athena DynamoDB コネクタ

今回対象とするデータは以下になります。
Snag_47819f4.png

DynamoDBデータをS3に保存するためにはS3エクスポートの機能を使います。
「S3へのエクスポート」をクリックします。
Snag_4799048.png

テーブルにPITRを有効化する必要があるため、「PITRの有効化」をクリックします。
Snag_47a4d4e.png

保存先のS3バケットを選択して「エクスポート」をクリックします。
Snag_47b093c.png

エクスポート完了まで数分待ちます。(5~10分程度)
Snag_47be93c.png

エクスポートが完了すると以下のような構成でS3にファイルが保存されます。
対象とするデータは「data/」に保存されます。
Snag_47cc5b1.png

Athena分析用にGlueの設定を実施する

AWS Glueの「クローラ」を選択し、「クローラの追加」をクリックします。
Snag_47f0466.png

クローラの名前を入力して、「次へ」をクリックします
Snag_48dc7c2.png

今回はクローラがテーブルを作成する構成のため、以下の画像の設定で「次へ」をクリックします。
Snag_48e6598.png

データストアの追加では対象とするS3バケットを選択し、エクスクルードパターンには以下のように設定します。
Snag_48fc16f.png

別のデータストアは追加しないので以下のようにします。
Snag_490ca82.png

IAMロールは今回新規作成します。
Snag_4915b49.png

スケジュールは「オンデマンドで実行」とします。
Snag_491d626.png

クローラの出力はデフォルトのままで「次へ」をクリックします。
Snag_49296f5.png

クローラができたら、選択して「クローラの実行」をクリックします。
Snag_4939b17.png

Athenaでデータを検索する

前述のクローラの実行でAthena側に一つ新規テーブルが作成されていると思います。
S3に出力されるデータ形式がDynamoDB JSONのため、クエリ形式は少し工夫する必要があります。

SELECT Item.Id.S as id, Item.name.S as name, Item.age.N FROM "default"."athena_sample_12345" where  limit 10;

Snag_496a2d9.png

再度S3エクスポートを実施してS3には以下のようにデータが保存されているとします。
Snag_4a20110.png

データを検索すると同じデータが2セット確認できます。
Snag_4a25971.png

パーティションが設定されているので、partition_1で検索すると検索対象のデータ数が半分になっていることが確認できます。
※Athenaは検索対象のデータ量に応じて課金されるため、パーティションをうまく利用することで料金を押させることができます。
Snag_4a33673.png

Step Functionsで自動化する

今回の一連の作業を自動化してみたいと思います。
一連の流れを整理すると以下になります。

  • 対象のS3バケット内のデータを空にする
    • DB内のデータが重複してS3に保存されるのを避けるため
  • DynamoDBのS3エクスポートでデータをS3に出力する
  • Glueのクローラを実行する

今回の入力値としては以下のようになります。
複数テーブルに対応できるようにしてみました。
※今回は検証のため同じテーブルのデータを別のS3のディレクトリに出力するようにしています。
Snag_4e7dfa9.png

最終的なステートマシンは以下のようになりました。
Snag_4e4f87f.png

Athenaでデータ検索すると以下のようになります。
しっかりパーティションも設定されているのでテーブルデータごとの検索もできますね。
Snag_4f5b691.png

まとめ

DynamoDBのテーブルをS3に保存してS3に保存されている他のデータを組み合わせて分析したい、というユースケースは結構あるかと思います。
今回はマネジメントサービスのみを使ってノーコードで実装してみました。
もちろん、Lambdaなどを作っても同じようなことはできるかと思いますが、ノーコードでの実装だとLambdaの実装になれていない人でも簡単に分析基盤を作れそう、というのは理解頂けたのかなと思います。

4
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
4
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?