AWS-Glue

AWS Glue ETL ジョブからのスキーマの更新、新規パーティションの追加する際のテーブルの更新範囲を検証してみた

はじめに

こんにちは、omkです。

Glueジョブでパーティションを追加する際にクローラーを利用せずにテーブルに反映するやつを検証しています。
その際に気になったのが更新時に実質的にクローリングされているかどうかというところです。
データの書き込み範囲のみの更新であればケースによっては利用中のクローラーを完全に廃止することは出来ないと考えているため本検証を行うこととなりました。

以下のページに記載の内容に関する検証です。
https://docs.aws.amazon.com/ja_jp/glue/latest/dg/update-from-job.html

前提

  • クローラーは利用しない
  • Glue4.0でPython3、Spark3.3を利用
  • Glueジョブ中にglueContext.write_dynamic_frame_from_catalog()でparquet形式で出力する際にパーティションを更新する
  • 既存のパーティションを削除してから実行して、パーティションが更新される範囲が書き込むデータの範囲だけであるかそれ以外も更新されるかを確認する

検証

次のテーブルを用意しました。

date name comment
20221031 hoge hogehoge
20221101 fuga fugafuga
20221115 piyo piyopiyo

「date」をパーティションとして設定します。

このテーブルに対してS3から既存のパーティションを削除して、新規に次のデータを追加します。

date name comment
20221214 moga mogamoga

データの更新範囲が書き込むデータ分のみであればテーブルの過去分のパーティションは更新されず残ることになり、
全体を読み込みなおすのであればパーティションは追加したデータのみとなる想定です。

S3からデータを消しましたがテーブルのパーティションは変わらず残ります。
では、ジョブを実行します。

ジョブの実行が完了したらテーブルのパーティションを確認します。

削除したパーティションは残ったままですので更新範囲は書き込むデータ分のみということがわかりました。

ということでパーティションの削除が発生するテーブルにおいては完全にクローラーの代替として利用出来るわけではなく、
削除されたパーティションを反映するためには依然としてクローラーが必要であるように思われます。

※補足ですが、glueContext.purge_table()でデータを消せばテーブルのパーティションも合わせて削除されます。

おわり

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA