3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DynamoDB のデータを Athena を使ってクエリする

Posted at

はじめに

新年、明けましておめでとうございます!
今回は Amazon DynamoDB のデータを Amazon Athena でクエリを実行して表示させるまでの流れを紹介いたします。

DynamoDB に値を格納し、S3にエクスポート

今回は仮として以下のデータを DynamoDB に格納しました。

image.png

この DynamoDB に格納したデータを S3 バケットにエクスポートします。
その前にポイントインタイムリカバリ(PITR)を有効化する必要があります。PITRとは、指定した過去の任意の時点にデータベースを復元できる機能です。バックアップリカバリ期間は最大35日まで選択できます。
デフォルトではオフの状態のため、これを編集で有効化します。

image.png

image.png

これで、DynamoDB から S3 バケットにエクスポートが可能となります。
エクスポートおよびストリームタブからS3へのエクスポートを選択し、設定を入力していきます。
送信先のS3バケットは任意のバケット名を入力してください。その他はデフォルトのまま、エクスポートします。エクスポートにはだいたい10分程度かかりました。

image.png

エクスポートが完了したら、指定したS3バケットにデータが格納されていることを確認します。

image.png

Crawler でテーブルを作成

Athena でクエリを実行するために Crawler で新しくテーブルを作成します。
※ Glue は日本語が未対応のため、英語表示になります。

Step 1 Set crawler properties

Crawler の名前を設定します。

image.png

Step 2 Choose data sources and classifiers

Data sources を追加します。ここで、先ほどエクスポートした S3 バケットの中身を指定します。S3 path は以下になります。(途中の値は環境によって変わります。)

s3://ari-hirose-query-test/AWSDynamoDB/01736385088969-cd8dea7e/data/

image.png

Step 3 Configure security settings

IAM role を新しく作成しました。名前は任意に設定できます。

image.png

Step 4 Set output and scheduling

今回は新しくデータベースを作成しました。Add database をクリックすると作成ページに
遷移します。
また、デフォルトのままだとテーブル名は自動生成されるため、必要に応じて prefix を設定します。

image.png

Step 5 Review and create

最後に設定内容を確認し、問題なければ Crawler を作成します。
作成完了後、Run Crawler をクリックし、Crawler を実行します。こちらは1分程度で実行が完了しました。Status が Completed になれば、成功です。

ここで、私が躓いたポイントなのですが、作成されたテーブルを見てみると Schema が登録されていませんでした。そのため、手動で Column name に item を追加します。

image.png

また、Actions から Edit table を選択し、以下の内容を登録します。

  • Input format:org.apache.hadoop.mapred.TextInputFormat
  • Output format:org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
  • Serde name:org.openx.data.jsonserde.JsonSerDe
  • Serialization:liborg.openx.data.jsonserde.JsonSerDe

image.png

Athena でクエリを実行

Athena でテーブルのプレビューを実行すると、以下のように問題なく結果が表示されました。

image.png

例えば、num の値が 600 以上のデータを表示させたい場合は、以下のクエリ文を実行すると表示が可能です。

example.sql
SELECT
  json_extract_scalar(item, '$.date.s') AS date_value,
  CAST(json_extract_scalar(item, '$.num.s') AS INT) AS num_value,
  json_extract_scalar(item, '$.text.s') AS text_value
FROM "ari-hirose-database-test"."hirosedata"
WHERE CAST(json_extract_scalar(item, '$.num.s') AS INT) >= 600;

image.png

無事表示されましたね!

仲間を募集しています!

ARIではエンジニア・ITコンサルタント・PM職全方位で仲間を募集しております。
カジュアル面談、随時受付中です!
ご興味ある方はこちらをご覧ください。

3
0
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
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?