AWS Glue で構築する ETL パイプライン - クローラーとジョブの設計
クローラーでスキーマを自動検出し、Glue ジョブで ETL 処理を実行する。データカタログの活用パターンと Glue Studio によるビジュアル開発を紹介します。
クローラーとデータカタログ
Glue クローラーは S3、RDS、Redshift、DynamoDB など 30 以上のデータソースを自動スキャンし、スキーマ (テーブル定義、カラム名、データ型) を検出してデータカタログに登録します。S3 のパスを指定すると、ファイル形式 (CSV、JSON、Parquet、ORC など) を自動判別し、パーティション構造も検出します。クローラーのスケジュール実行で新しいパーティションやスキーマ変更を自動的にカタログに反映できます。データカタログは Hive メタストア互換で、Athena、Redshift Spectrum、EMR から共通のテーブル定義を参照してクエリを実行できます。
Glue ジョブの設計
Glue ジョブは Python (PySpark) または Scala で ETL スクリプトを記述し、サーバーレスの Spark 環境で実行します。DynamicFrame は Glue 独自のデータ構造で、同一カラムに異なるデータ型が混在するスキーマの不整合を ResolveChoice で柔軟に処理します。Glue Studio のビジュアルエディターではソース (S3、RDS、Kafka など)、変換 (フィルター、結合、集計)、ターゲット (S3、Redshift、DynamoDB など) をノードとして配置し、ノーコードで ETL ジョブを設計できます。ジョブブックマークは処理済みデータの位置を記録し、次回実行時に未処理データのみを対象とする増分処理を実現します。
データ品質と Glue Studio
Glue Data Quality はデータ品質ルール (DQDL) を定義し、 ETL パイプライン内でデータの検証を自動実行します。完全性 (NULL 値の割合)、一意性 (重複チェック)、参照整合性 (外部キーの存在確認) などのルールを宣言的に記述し、品質スコアが閾値を下回った場合にジョブを停止またはアラートを発行します。 Glue Studio はビジュアル ETL エディターで、ドラッグ&ドロップでソース、変換、ターゲットを接続し、コーディングなしで ETL ジョブを構築できます。ノートブック環境で PySpark コードを対話的にテストし、本番ジョブに変換するワークフローも提供します。 Glue のバージョニングでジョブスクリプトの変更履歴を管理し、問題発生時にロールバックできます。 ETL の分析手法を深く理解するには、専門書籍 (Amazon)が役立ちます。
Glue のコスト最適化
Glue ジョブの料金は DPU (Data Processing Unit) 時間で課金され、1 DPU は 4 vCPU と 16 GB メモリに相当します。Glue 4.0 は Auto Scaling でジョブの負荷に応じて DPU 数を自動調整し、過剰なリソース割り当てを防止します。Flex 実行クラスは非緊急のバッチジョブ向けで、標準実行より約 35% 安価です。クローラーの実行頻度をデータ更新頻度に合わせて最適化し、不要なスキャンを避けます。ジョブブックマークで前回処理済みのデータをスキップし、増分処理でコストと処理時間を削減します。CloudWatch メトリクスで DPU 使用率を監視し、常に低い使用率のジョブは DPU 数を削減します。
ジョブの種類とランタイムの選択
Glue のジョブにはいくつかの種類があり、処理規模で使い分けます。大量データの分散処理には Spark ベースのジョブが適し、ワーカーの種類と数を調整してスループットを確保します。小規模な変換や軽い処理には、シンプルな Python のジョブが起動も速く経済的です。継続的に流入するデータを扱うストリーミングジョブもあります。データ量と処理特性に合わせて種類とリソースを選ぶことで、無駄なコストをかけずに必要な性能を得られます。過剰なワーカー割り当ては費用を膨らませるため、実測しながら適正値に調整するのが効果的です。
パーティショニングと性能最適化
ETL の性能とコストは、データの読み込み方で大きく変わります。日付や属性でパーティション分割されたデータに対し、必要な範囲だけを読むよう絞り込めば、スキャン量を抑えて処理を高速化できます。差分だけを処理するブックマーク機能を使うと、毎回全件を処理せず、前回以降に増えた分だけを取り込めます。出力は列指向形式で保存し、後段の分析クエリを効率化します。不要な列を早い段階で落とす、フィルタを処理の前段に寄せる、といった工夫を積み重ねることで、ジョブの実行時間と費用を着実に削減できます。
オーケストレーションとトリガー
ETL は単独のジョブで完結せず、複数の処理を順序立てて実行することが多くなります。Glue のワークフローやトリガーを使えば、クローラーとジョブを連鎖させ、前段の完了を起点に次を起動する流れを組めます。スケジュール実行や、データ到着をきっかけとしたイベント駆動の起動も設定できます。より複雑な分岐や他サービスとの連携が必要なら、Step Functions で全体を統括する構成も有効です。処理の依存関係を明確にし、失敗時の再実行や通知を組み込むことで、安定して回り続けるパイプラインになります。
スキーマ進化とデータレイク連携
実運用では、取り込むデータの構造が時間とともに変化します。列の追加や型の変更に対応できるよう、スキーマの進化を扱える設計にしておくことが重要です。データカタログを中心的なメタデータの管理場所として位置づけ、テーブル定義を一元化すれば、複数の分析サービスから一貫してデータを参照できます。アクセス制御の仕組みと組み合わせれば、データレイク全体のガバナンスも確立できます。スキーマの変化を前提に設計しておくことで、データソースの進化に振り回されず、長く使えるパイプラインを維持できます。
まとめ
Glue はクローラーによるスキーマ自動検出、サーバーレスの Spark ベース ETL ジョブ、Hive 互換のデータカタログを統合的に提供します。Data Quality でデータ品質ルールを自動検証し、Glue Studio のビジュアルエディターでコーディングなしに ETL ジョブを構築できます。ジョブブックマークで増分処理を実現し、Flex 実行クラスで非緊急ジョブのコストを約 35% 削減します。