Glueクローラを利用したAthenaによる分析環境の構築手順
Athenaで分析を行うにはデータカタログ(データ構造、パーティションなどのメタデータ)が必要になります。このデータカタログはAWS Glue内で保持され、AthenaからのDDL実行、AWS Glue Crawler(以下、クローラ)などで作成することが可能です。
今回はデータソースをS3とし、クローラにてデータカタログを作成し、Athenaからクエリを実行する手順を紹介します。クローラの利用と直接関係ありませんが、Athenaからクエリを実行することで、データ分析や、Athenaのユースケース *1にあるような低頻度のETL処理といったことが可能になります。
構成
分析データはCSVファイルとし、ここでは手動でアップロードを行いました。また、Glue(クローラ)からS3への接続は、VPCエンドポイントを利用する構成としています。 *2
前提
ここでは以下リソースが構築済みであることを前提とします。
- S3 VPCエンドポイントなどVPCリソース
- 分析データ格納済みのS3バケット
- データはGlueのチュートリアルにあるフライトデータ *3を利用
- AWS Glue用のセキュリティグループ
- AWS Glue用のIAMロール
構築/実行
接続の追加
GlueがS3エンドポイントなどVPCリソースにアクセスするために、ENIが必要です *4今回の構成における「接続」はVPCの情報を指定します。Glueのコンソールより「接続」をクリックします。
「接続名」は任意の名称で、「接続タイプ」はNetwork
を指定します。
利用するVPC、S3エンドポイントがルーティングされたサブネットを指定します。Glue(ENI)が利用するセキュリティググループを指定します。
設定が指定どおりであることを確認し、接続の追加は完了です。
接続が追加されたことを確認し「接続のテスト」を実施します。
ここでは、データソースがS3のため、該当バケットへのアクセス権限を有したIAMロール、分析データが格納されたS3パスを指定します。
接続テストが開始され、しばらくすると結果が表示されますので、正常に接続できたことを確認します。
接続に失敗した場合は以下を参考に、IAMロールなど、前提に記載したリソースを見直してください。
クローラ作成
データソースをクロールするクローラを作成していきます。Glueのコンソールより「クローラ」をクリックします。
任意のクローラ名を指定します。
ソースタイプにData stores
を選択します。
データストアはS3、先程追加した接続、クロールするS3バケットを指定します。
別のデータソースは今回は不要です。
クローラが利用するIAMロールを指定します。
ここでは、クローラは手動実行を想定しているため、オンデマンドで実行
を選択します。なお、クローラはスケジュールなどトリガーから実行することも可能です。
データカタログが保存されるGlueデータベースを指定します。ここではデータベースの追加より新規データベースを作成しました。
設定が指定どおりであることを確認し、クローラの作成は完了です。
クローラおよび、データベースが作成されました。
クローラ実行
クローラを実行し、データソースからテーブル(データカタログ)を作成します。「クローラの実行」をクリックします。
しばらくすると、クロールが完了し作成されたテーブルなどの情報が表示されます。
指定したデータベース内にテーブルが作成されました。
テーブルの詳細を表示すると、作成されたテーブルのスキーマなどが確認できます。なお、こちらのスキーマは手動で変更することも可能です。
Athenaからクエリ実行
データカタログは、スキーマ等の情報が保存されているだけで、データ自体は保存されていません。データはクエリを実行してを読み取る必要がありますので、テーブル(データカタログ)に対してクエリを実行していきます。
Athenaのコンソールより、作成したデータベースを選択します。
データベースを指定するとデータベース内のテーブルがリストされ、スキーマを確認することが可能です。
分析要件に沿ってクエリを実行します。ここではフライトデータより目的地の名称と、その件数を取得しました。
SELECT dest_state_nm, COUNT( dest_state_nm ) AS count FROM kiss_shot_acerola_source_bucket_xxxxx GROUP BY dest_state_nm ORDER BY count DESC
クエリの実行については、以上になります。
冒頭でも少しふれましたが、Athenaのクエリ結果はS3にファイルとして保存されるので、実行結果を利用して、Redshiftへのロードなど簡易なETLも可能になります。
余談になりますが、VPCエンドポイントを介した接続については、S3アクセスログから確認することができるます。確認される場合は以下が参考になります。なお、S3アクセスログはベストエフォート型の配信となりますので出力まで時間がかかることがありますのでご留意ください。
- Amazon S3 サーバーアクセスログの形式
- S3へのアクセスにEndpointが利用されているかS3サーバーアクセスログより確認してみた − S3のサーバーアクセスログから、接続失敗ログを洗い出す
さいごに
クローラにてデータカタログを作成し、Athenaから分析(クエリ)を実施する手順を紹介しました。今回はクローラにてデータカタログを作成しましたが、AthenaからDDLを実行することでデータカタログを作成することもできます。簡易な要件であればGlueを利用せずとも、ETLは実現できると思いますので、データ量や要件に応じアーキテクチャを検討いただければと思います。
参考
脚注
- Amazon Athena で実現する データ分析の広がり ↩
- VPCエンドポイントを作成しなくてもAthenaの分析環境は構築可能です。その際は本エントリ内の「接続の追加」は不要となります。 ↩
- s3://crawler-public-us-east-1/flight/2016/csv/mon=1/January2016.csv ↩
- 必要になったタイミングで自動で作成され、役目を終えると自動で削除されます。 ↩