はじめに
S3の保管方法によってAthenaのクエリ効率が変わるのは何となく知っていましたが、保管形式によっても大きく変わってくるんですね。
今回はCSVで吐き出されるファイルをParquetに変換してS3に保管して、効率良くAthenaで分析したいといった要望に対して検証したことをまとめます
Athenaのパフォーマンスとファイル形式については以下サイトをご参考に、、
Amazon Athena のパフォーマンスチューニング Tips トップ 10
アーキテクチャ
ざっくりこんな感じです。
FirehoseでParquetに変換するためにGlueが必要なんですね。(初耳学)
検証開始
以下手順で作成していきます
- Kinesis Data Firehoseの作成
- Glue Databeseの作成
- Kinesis Data Firehoseの作成続き
- Firehose⇒S3のデータ転送テスト
- Glue Crawlerの設定
- Athenaでクエリを投げてみる
1. Kinesis Data Firehoseの作成
「Kinesisストリームを作成」からパッと作成しちゃいます。
「レコードを変換および転換」で「レコード形式の変換を有効にする」にチェックを入れます。
すると、AWS Glueのデータベースとテーブルを選択しろと言われます。。
2. Glue Databeseの作成
ここで作成したDatabaseとTableを1.で作成したFirehoseに設定します。
Glue Databaseの作成
「Glue」→「Database」→「Add database」から作成できます。
名前はご自由に~
Tableの作成
「Table」から作成できます。フォーマットはデフォルトのモノでOK
保管先にはS3を選択し、各々保管先のS3を指定します。
一旦Shemaの設定は不要です。
作成完了したらFirehoseに設定しちゃいます。
3. Kinesis Data Firehoseの作成続き
Athenaでクエリ投げるところまでを検証するので、S3のプレフィックスも設定しておきます。
(参考:Amazon S3 オブジェクトのカスタムプレフィックス)
4. Firehose⇒S3のデータ転送テスト
Firehoseにはデモデータをストリームに配置することでテストすることが可能です。
「デモデータの送信を開始」をクリックするとデータがFirehose経由でS3に格納されます。
Firehoseで設定したプレフィックスでデータが格納されます。
さらにParquet形式に変換されていますね。
5. Glue Crawlerの設定
先ほど無視したShemaを設定するためにCrawlerを設定します。
Data Sourceは各々のS3のパスを設定しましょう。
自分の場合"s3://backet/firehose"になります。
ETL用に新しいDatabaseを作成してTargetにしました。
Crawlerを実行させます。
Shemaが設定されたGlue Databaseの完成です。
6. Athenaでクエリを投げてみる
投げてみました。
こんな感じで見られます。
おわり
ここからQuickSightを使った見える化なども考えていけるかと。
データ分析基盤の構築はやってみると色々考慮事項があって大変だなあ、