はじめに
新年、明けましておめでとうございます!
今回は Amazon DynamoDB のデータを Amazon Athena でクエリを実行して表示させるまでの流れを紹介いたします。
DynamoDB に値を格納し、S3にエクスポート
今回は仮として以下のデータを DynamoDB に格納しました。
この DynamoDB に格納したデータを S3 バケットにエクスポートします。
その前にポイントインタイムリカバリ(PITR)を有効化する必要があります。PITRとは、指定した過去の任意の時点にデータベースを復元できる機能です。バックアップリカバリ期間は最大35日まで選択できます。
デフォルトではオフの状態のため、これを編集で有効化します。
これで、DynamoDB から S3 バケットにエクスポートが可能となります。
エクスポートおよびストリームタブからS3へのエクスポートを選択し、設定を入力していきます。
送信先のS3バケットは任意のバケット名を入力してください。その他はデフォルトのまま、エクスポートします。エクスポートにはだいたい10分程度かかりました。
エクスポートが完了したら、指定したS3バケットにデータが格納されていることを確認します。
Crawler でテーブルを作成
Athena でクエリを実行するために Crawler で新しくテーブルを作成します。
※ Glue は日本語が未対応のため、英語表示になります。
Step 1 Set crawler properties
Crawler の名前を設定します。
Step 2 Choose data sources and classifiers
Data sources を追加します。ここで、先ほどエクスポートした S3 バケットの中身を指定します。S3 path は以下になります。(途中の値は環境によって変わります。)
s3://ari-hirose-query-test/AWSDynamoDB/01736385088969-cd8dea7e/data/
Step 3 Configure security settings
IAM role を新しく作成しました。名前は任意に設定できます。
Step 4 Set output and scheduling
今回は新しくデータベースを作成しました。Add database をクリックすると作成ページに
遷移します。
また、デフォルトのままだとテーブル名は自動生成されるため、必要に応じて prefix を設定します。
Step 5 Review and create
最後に設定内容を確認し、問題なければ Crawler を作成します。
作成完了後、Run Crawler をクリックし、Crawler を実行します。こちらは1分程度で実行が完了しました。Status が Completed になれば、成功です。
ここで、私が躓いたポイントなのですが、作成されたテーブルを見てみると Schema が登録されていませんでした。そのため、手動で Column name に item を追加します。
また、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
Athena でクエリを実行
Athena でテーブルのプレビューを実行すると、以下のように問題なく結果が表示されました。
例えば、num の値が 600 以上のデータを表示させたい場合は、以下のクエリ文を実行すると表示が可能です。
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;
無事表示されましたね!
仲間を募集しています!
ARIではエンジニア・ITコンサルタント・PM職全方位で仲間を募集しております。
カジュアル面談、随時受付中です!
ご興味ある方はこちらをご覧ください。