AWS Glue Crawler で Athena のパーティション作成を自動化する

2020年5月29日

概要

やりたいこと

Athena でパーティションを作成し、クエリ実行を行った。このパーティション作成するのに ALTER TABLE クエリを実行したが、この部分を自動化したい。

S3://waf-test-cross-account/2020/05/16/01/waflog.gz のように保存されているログに対して、パーティションを自動で区切られるようにする。

AWS Glue Crawlers

AWS Glue はクローラ(Crawlers)によって様々なデータストアからテーブルを定義でき、 ETL 処理を行うサービス。

今回は AWS Glue のサービスの一つであるクローラ を利用して Athena のパーティションを作成する。

  • クローラ : 指定したデータストア (S3やRDSなど) を調べて、データカタログに登録する。定期実行をする事で、スキーマやパーティションの定期的な自動更新が可能。
  • Glue データカタログ : データストアから自動的に作成されたメタデータ定義

コンソールから操作

Glue でクローラを作成

waf-test-cross-account バケットに対して Athena のテーブルを作成するクローラを作成する。
クローラの実行頻度は毎日 01:00 として、このタイミングパーティションが区切られる。

  • AWS Glue コンソール
  • 左メニューよりクローラ
  • クローラの追加
  • waf_log_crawler
  • Data stores
  • データストアの追加
    • データストアの選択 : S3
    • インクルードパス : s3://waf-test-cross-account/
  • 別のデータストア追加 : いいえ
  • IAM ロールを作成
  • 頻度 : 毎日
  • データベースの追加 : aws_waf_logs

クローラが作成されるので実行すると、データベースとテーブルが作成される。

このテーブルではパーティションが自動で区切られている。

WIP : パーティション名を変更

※クローラが実行されるとパーティション名が partition_0 に戻ってしまう

パーティション名が partition_0 や partition_1 とわかりにくいため、修正する。

テーブルを選択後、スキーマの編集より、パーテイょん名をクリックすることで編集できる。

編集したパーティション名で登録されていることを確認できる。

参考

AWS Athena + Glueを使ったデータ分析(パーティション自動化)

Athena と AWS Glue を併用する際のベストプラクティス

GlueのクローラでS3のCSVデータを検出し、Athenaでクエリを実行する