[アップデート]AWS Glueがジョブ実行後のパーティション更新に対応しました!

AWS Glueがジョブ実行後のパーティション更新に対応いたしました! 今までパーティションの更新をするためには、Glueクローラを実行する必要がありました。 それがジョブ実行時に更新できるようになったので、パーティション更新のためにわざわざGlueクローラを動かす必要がなくなる可能性があります。
2020.04.07

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

AWS Glueがジョブ実行後のパーティション更新に対応いたしました!

今までパーティションの更新をするためには、Glueクローラを実行する必要がありました。

それがジョブ実行時に更新できるようになったので、パーティション更新のためにわざわざGlueクローラを動かす必要がなくなる可能性があります。

図で分かる概要

たとえば、AWS WAFのログをjson形式から年、月でパーティション分割したjson形式に変換するGlueジョブを考えます。

Glueジョブを定期的に動かし、2020/04月分が増えた時にGlueジョブを動かすと、S3には4月分のデータが連携されますが、Glueデータカタログのパーティションが更新されません。
パーティションが反映されないので、Athenaでは4月分のクエリがヒットしません。
別途Glueクローラを動かして、パーティションを反映する必要がありました。

今回のアップデートで、Glueジョブ実行後にGlueデータカタログのパーティションを更新できるようになり、パーティションの更新がGlueジョブで完結するようになりました。

やってみる

読み込み元のS3(json)には4月分のログデータが有り、書き込み先のS3(json)にはまだ4月分のデータが無い状況とお考えください。

公式ドキュメントを参考にして、Glueジョブのpythonスクリプトにデータカタログのパーティション更新処理を追加します。

Glueジョブを実行後、書き込み先のS3を確認すると4月分のデータが書き込まれていることがわかります。

Gluedデータカタログのパーティションキーを見てみると、2020/04月分のパーティションが更新されていることがわかります。

パーティションが更新されているので、Glueクローラを実行することなくAthenaで新規パーティションの4月分のデータもクエリで取ってこれます。

注意点

Glueジョブ内でのデータカタログの更新は、次の制限事項があることに注意してください。

  • Amazon Simple Storage Service (Amazon S3) ターゲットのみがサポートされます。
  • json、csv、avro、および glueparquet の形式のみがサポートされます。
  • DynamicFrame スキーマは、Data Catalog テーブルのスキーマと同等またはそのサブセットである必要があります。
  • partitionKey は、ジョブ内のスクリプトで渡されたパラメーターと、データカタログの partitionKey とで、同じ順序で同じ名称である必要があります。

終わりに

これまでパーティションの更新のためにGlueクローラを動かす必要がありましたが、今回のアップデートによりGlueジョブ内で更新できるようになりました。

注意点として対応していない形式があるのですが、手間が減るのはうれしいところです。 今後Glueのワークフローを構築する際には、利用してみてください。