内容
S3にログをアップロードして、それをAthenaで集計するというケースにのみ焦点をあてます。
AWSのGlueのクローラーで1度クロールするとテーブルが作成され、Athenaからselectできるようになります。
しかし、Glueのクローラには定期的に動かす設定もあります。
どのような時に定期的にクロールした方が良いのか一例を紹介します。
Glueのクローラがやってくれること
S3においてあるファイルの内容からよしなにテーブルスキーマを作成してくれます。
カラム名の設定、データの型の設定に加えて パーティション の追加も行なってくれます。
定期的にクローラを動かした方が良い例1
あまりないケースだと思いますが、頻度高めで項目が追加されるような場合は、定期的にクローラを実行してスキーマを更新すると良いでしょう。
定期的にクローラを動かした方が良い例2
おそらくほぼこちらのケースでクローラの定期実行が使われると思います。
それはパーティションの更新です。
https://docs.aws.amazon.com/ja_jp/athena/latest/ug/glue-best-practices.html#schema-crawlers-schedule
基本的には指定のprefixが付いて入れば、S3にファイルを置くだけでAthenaからselectできるようになります。
しかしパーティションがあると、そうならない場合があります
新規で追加されたパーティションの以下にあるファイルはAthenaのselect対象になりません。
具体的には
- S3のkeyに年月日が入っている
BUCKET_NAME/logs/YYYY-MM-DD/AAA.json
- 年月日がパーティションになっている
以上のような場合を考えます。
keyに年月日が入っているので、毎日ファイルがアップロードされるようなケースです。
パーティションになっている年月日の部分が毎日追加されていきます。
この場合、新しく追加された日のデータはクローラでパーティションを更新しないとAthenaからselectできるようになりません。
- 2018-06-01のファイルが新たに置かれる
- 新しいパーティションが追加された
- この後何もしないでAthenaでselectしても2018-06-01のデータはselectできない
- Glueでクローラを動かして、パーティションを更新する
- Athenaで2018-06-01のデータもselectできるようになる
まとめ
パーティションがあるとGlueのクローラを動かして更新しないとselect対象にならない場合があるので注意です