Glue講座

この講座では、AWSのフルマネージドETL/ELTサービスであるGlueについて学びます。

  • AWS Glueの概要と役割
  • GlueジョブによるETL処理
  • Glueデータカタログ(データベース・テーブル・クローラー)
  • Glueと連携するAWSサービス
  • Glueジョブの実行方法
  • Glueジョブの設定項目
  • 主なユースケース
  • 設計のポイント

1. Glueの概要

1.1 AWS Glueとは

AWS Glueは、データの検出・準備・変換・ロードを行うETL/ELTサービスです。サーバのプロビジョニングや管理が不要で、データ分析基盤の中核を担うサービスです。

Glueの主な役割は大きく分けて2つあります。

1つ目はGlueジョブです。さまざまなデータソースからデータを抽出(Extract)し、分析に適した形式に変換(Transform)したうえで、指定した保存先にロード(Load)する一連の処理を自動化する機能です。例えば、CSV形式の生データをParquet形式に変換してS3に保存する、といった処理を定期的に実行できます。

2つ目はデータカタログです。データレイク(S3など)に保存されているデータの「メタデータ(データに関する情報)」を一元管理する機能です。具体的には、データがどこに保存されているか、どのような構造(カラム名やデータ型)を持っているかといった情報を管理し、AthenaなどからSQLでデータにアクセスできるようにします。

1.2 なぜGlueが必要なのか

データ分析基盤では、さまざまなデータソースから異なる形式のデータが集まります。あるデータはCSV形式、別のデータはJSON形式、また別のデータはデータベースのテーブルとして存在しています。

これらのデータをそのまま分析に使おうとすると、以下の問題が発生します。

まず、データの所在がわからないという問題があります。どのストレージに、どのようなデータが保存されているのかが管理されていないと、必要なデータを探すだけで多くの時間がかかってしまいます。

次に、データの構造がわからないという問題があります。各ファイルにどのようなカラム(列)が含まれていて、それぞれがどのようなデータ型なのかが不明だと、データを正しく読み取ることができません。

最後に、データの形式が統一されていないという問題があります。CSV、JSON、ログファイルなど、バラバラの形式のデータがそのままでは分析に使えず、事前に形式を揃える作業が必要になります。

Glueは、データカタログでデータの「所在と構造」を管理し、Glueジョブでデータの「形式と品質」を整えることで、これらの問題を解決します。

2. GlueジョブによるETL処理

2.1 Glueジョブとは

Glueジョブは、データの抽出・変換・ロードを行う処理の実行単位です。主にPythonで記述されたスクリプトを、Glueのマネージド環境上で実行します。使用する実行エンジンに応じて複数のジョブタイプが用意されており、データの規模や用途に合わせて選択できます。

2.2 ジョブの種類

Glueジョブには、使用する実行エンジンによって主に3つの種類があります。

Spark

1つ目はSparkです。Apache Sparkベースの分散処理エンジンを使用し、大量データの変換に最適なジョブタイプです。大規模なETL処理や、複数のデータセットの結合・集計といった処理に使用されます。Sparkジョブのスクリプトは、PySpark(PythonでSparkを扱うためのライブラリ)またはScalaで記述します。

📝 Apache Sparkとは
Apache Sparkは、大規模なデータを複数のマシンに分散して高速に処理するためのオープンソースの分散処理フレームワークです。データを分割して複数のノードで並列処理するため、単一マシンでは処理しきれないような大量データでも効率的に扱うことができます。Glueでは、このApache Sparkの実行環境をマネージドで提供しており、ユーザはインフラの構築や管理を意識することなくSparkの処理能力を利用できます。

Python Shell

2つ目はPython Shellです。軽量なPythonスクリプトを実行するジョブタイプで、小〜中規模のデータ処理に向いています。pandasやboto3などの標準的なPythonライブラリをそのまま使えるため、Spark固有のAPIを学ぶ必要がなく、シンプルで可読性の高いコードを書くことができます。簡単なデータ変換や外部APIの呼び出しなど、Sparkほどの処理能力を必要としない場面で使用されます。

Ray

3つ目はRayです。Rayフレームワークによる分散処理を行うジョブタイプで、主に機械学習のデータ前処理に使用されます。

📝 Rayとは
Rayは、Pythonベースの分散処理フレームワークです。Apache Sparkがデータの変換・集計処理に強みを持つのに対し、Rayは機械学習のモデル学習やデータ前処理など、Python中心のワークロードに特化しています。既存のPythonコードを少ない変更で分散処理に対応させることができる点が特徴です。

2.3 Glue Studio

Glue Studioは、GlueジョブをGUI(グラフィカルユーザインターフェース)で視覚的に作成できるツールです。ドラッグ&ドロップの操作でETLパイプラインを構築でき、コードを書くことなくデータの変換処理を定義できます。

通常、SparkベースのGlueジョブを作成するにはPySparkなどでコードを記述する必要がありますが、Glue Studioを使えばコードを書かずに画面操作のみでGlueジョブを作成することができます。

Glue Studioでは、データソース、変換処理、出力先をノードとして配置し、それらを線で繋げることでETLフローを定義します。各ノードの設定画面でカラムの選択、フィルタリング条件、変換ルールなどを指定できます。

作成したビジュアルジョブは、自動的にPySparkスクリプトとして生成されるため、必要に応じてスクリプトを直接編集することも可能です。

2.4 Glueが扱うデータ形式

Glueジョブでは、さまざまなデータ形式を扱います。データ分析でよく使われるファイル形式は以下の通りです。

形式 特徴 用途
CSV テキストベース。可読性が高い。圧縮効率が低い データの受け渡し、小規模データ
JSON テキストベース。ネスト構造に対応。柔軟性が高い APIレスポンス、ログデータ
Parquet 列指向バイナリ形式。圧縮効率が高く、クエリが高速 分析用データ、大規模データ

前の講座で学んだ通り、データ分析基盤では列指向で圧縮効率の高いParquet形式の利用が推奨されています。GlueジョブでCSVやJSONの生データをParquet形式に変換してS3に保存し、Athenaでクエリを実行する、というパターンがデータ分析基盤の基本構成です。

3. Glueデータカタログ

3.1 データカタログとは

Glueデータカタログは、データレイク内のデータのメタデータを一元管理する「データの目録」です。図書館の蔵書目録が「どの本が、どの棚に、どのような内容で存在するか」を管理しているように、データカタログは「どのデータが、どこに、どのような構造で存在するか」を管理します。

例えば、GlueジョブでCSVをParquetに変換してS3に保存したとします。しかし、S3上のファイルはそのままではただのデータであり、Athenaなどの分析サービスからは参照できません。データカタログにメタデータ(保存場所、カラム名、データ型など)を登録することで、初めてAthenaからSQLでクエリできるようになります。このように、Glueデータカタログはデータ分析基盤全体の「共通の辞書」としての役割を果たします。

3.2 データベースとテーブル

Glueデータカタログでは、メタデータをデータベーステーブルの階層で管理します。

データベースはテーブルをグループ化するための論理的な入れ物です。リレーショナルデータベースの「データベース」と概念は似ていますが、実際のデータは保存されず、メタデータのみが管理されます。

テーブルは、データの構造(スキーマ)とデータの保存場所を定義するメタデータです。具体的には以下の情報を含みます。

情報 説明
テーブル名 データの識別名 sales_data
カラム定義 各列の名前とデータ型 id: string, amount: int, date: string
データの場所 S3上のパス s3://my-bucket/sales/
データ形式 ファイルのフォーマット CSV, JSON, Parquet
パーティション データの分割キー year=2025/month=01
💡 ポイント
Glueデータカタログのテーブルは、実際のデータを保存しているわけではありません。データはS3に保存されたままで、テーブルはその「場所」と「構造」を記録しているだけです。これにより、データを移動することなく、AthenaなどからSQLでクエリできるようになります。

3.3 クローラー

クローラーは、S3やデータベースなどのデータソースを自動的にスキャンし、データの構造を検出してデータカタログにテーブルを自動登録する機能です。AWS公式のUsing crawlers to populate the Data Catalog(AWS Glue公式ドキュメント)では、クローラーが「Classifies data to determine the format, schema, and associated properties of the raw data」「Groups data into tables or partitions」「Writes metadata to the Data Catalog」という3つのアクションを行うと説明されており、形式・スキーマの自動判別からカタログへの書き込みまでを一気通貫で担うことが示されています。

手動でテーブルを定義することもできますが、データソースのファイル数が多い場合や、スキーマが頻繁に変更される場合は、クローラーによる自動検出が非常に便利です。

クローラーを実行すると、まず指定したデータソース(S3パスなど)をスキャンし、保存されているファイルの形式やカラム構造を自動的に検出します。検出が完了すると、その結果をもとにGlueデータカタログにテーブルを自動登録します。既にテーブルが登録されている場合は、前回との差分を検出し、カラムの追加や型の変更などスキーマに変更があれば自動的に更新します。

💡 ポイント
クローラーはスキャンするデータ量に応じてコストが発生します。不要な頻度で実行しないよう、スケジュールを適切に設定してください。新しいデータが追加されるタイミングに合わせて実行するのが効率的です。

4. Glueと連携するAWSサービス

Glueを中心としたAWSサービスの連携関係を以下に示します。

flowchart LR
  S3_IN[Amazon S3] --> Glue[AWS Glue ジョブ]
  RDS[Amazon RDS] --> Glue
  DDB[Amazon DynamoDB] --> Glue
  Glue --> S3_OUT[S3 / Parquet]
  Glue --> Redshift[Amazon Redshift]
  Catalog[Glue データカタログ] --> Athena[Amazon Athena]
  Glue -. "メタデータ登録" .-> Catalog

Glueは単体で使うサービスではなく、さまざまなAWSサービスと連携して動作します。ここでは、Glueジョブの入力元・出力先となるサービスと、データカタログを参照するサービスについて紹介します。

4.1 データソース(入力元)

Glueジョブは、以下のようなサービスからデータを抽出できます。

サービス 説明
Amazon S3 データレイクに蓄積されたCSV、JSON、Parquetなどのファイルを読み込む。最も一般的なデータソース
Amazon RDS / Aurora リレーショナルデータベースからJDBC接続でデータを抽出する。オンプレミスのデータベースにも対応可能
Amazon DynamoDB NoSQLデータベースからデータを抽出する
Amazon Kinesis Data Streams ストリーミングデータをリアルタイムに取り込む

4.2 出力先

変換後のデータの出力先としても、さまざまなサービスを指定できます。

サービス 説明
Amazon S3 Parquet形式などに変換したデータを保存する。Athenaで分析するパターンが最も一般的
Amazon Redshift データウェアハウスにデータを直接ロードする。大量データの集計・分析用途
Amazon RDS / Aurora 変換・集計したデータをリレーショナルデータベースに書き戻す。アプリケーションからの参照用途

4.3 データカタログを参照するサービス

Glueデータカタログに登録されたメタデータは、複数の分析サービスから共通の辞書として参照されます。

サービス 説明
Amazon Athena データカタログのテーブル定義をもとに、S3上のデータに対してSQLクエリを実行する
Amazon Redshift Spectrum データカタログを参照して、S3上のデータをRedshiftから直接クエリする

このように、Glueはデータの変換(Glueジョブ)とメタデータの管理(データカタログ)を通じて、AWSのデータ分析基盤全体をつなぐハブのような役割を果たしています。

5. Glueジョブの実行方法

Glueジョブを実行する方法はいくつかあります。単発の実行から、イベント駆動、複雑なワークフロー制御まで、用途に応じて使い分けます。

5.1 トリガーによる実行

トリガーは、Glueに組み込まれたジョブの実行制御機能です。最もシンプルにGlueジョブを実行する方法で、以下の3種類があります。

トリガーの種類 説明 用途
スケジュール cron式で定期実行 日次・週次の定期的なETL処理
オンデマンド 手動で即座に実行 テスト実行、臨時のデータ処理
イベント 別のジョブの完了をきっかけに実行 ジョブの連鎖(ジョブA完了後にジョブBを実行)

シンプルな定期実行や、ジョブ同士の連鎖であればトリガーで十分対応できます。

5.2 EventBridgeによる実行

Amazon EventBridgeを使うと、AWS上のイベントをきっかけにGlueジョブを実行できます。例えば「S3バケットに新しいファイルがアップロードされたらGlueジョブを起動する」といったイベント駆動型の実行が可能です。

トリガーのスケジュール実行では「1時間ごと」のように時間ベースでしか制御できませんが、EventBridgeを使えば「データが届いたタイミング」で即座に処理を開始できるため、よりリアルタイムに近いデータ処理が実現できます。

5.3 Step Functionsによる実行

AWS Step Functionsは、複数のAWSサービスをステートマシン(状態遷移図)として組み合わせ、ワークフローを構築するサービスです。Glueジョブの実行をStep Functionsのステップとして組み込むことで、より複雑なパイプラインを構築できます。

例えば「S3にファイルが到着→Lambdaでバリデーション→Glueジョブで変換→成功したらSNSで通知、失敗したらエラー処理」のように、条件分岐やエラーハンドリングを含む高度なフローを定義できます。

GlueにはワークフローというGlue組み込みのパイプライン機能もありますが、Glueのワークフローはクローラーとジョブの連携に限定されます。Glue以外のサービス(Lambda、SNSなど)を含む複雑なパイプラインを構築する場合は、Step Functionsの利用が推奨されています。

6. Glueジョブの設定項目

Glueジョブを作成する際には、処理内容だけでなく、リソースや実行制御に関するさまざまな設定項目があります。ここでは、主な設定項目を紹介します。

6.1 リソース設定

Glueジョブの処理性能は、割り当てるリソースの種類と量によって決まります。

Sparkジョブでは、ワーカータイプワーカー数を指定します。ワーカータイプは1台あたりのスペック(CPU・メモリ)を決める設定で、以下の種類があります。

ワーカータイプ vCPU メモリ 用途
G.1X 4 16 GB 一般的なETL処理
G.2X 8 32 GB メモリを多く使う変換処理
G.4X 16 64 GB 大規模データの処理や機械学習の前処理
G.8X 32 128 GB 非常に大規模なデータ処理

ワーカー数は並列で処理を行うワーカーの台数です。ワーカータイプでスペックを、ワーカー数で並列度を調整し、処理に必要なリソースを確保します。

Python Shellジョブでは、ワーカータイプの代わりにDPU(Data Processing Unit)を指定します。0.0625 DPU(メモリ1 GB)または1 DPU(メモリ16 GB)から選択でき、軽量な処理には0.0625 DPUで十分です。

💡 ポイント
リソースはコストに直結するため、最小限の設定から開始し、処理時間やエラーの状況を見ながら段階的に調整するのが基本です。

6.2 Glueバージョン

GlueジョブにはGlueバージョンの設定があり、利用できるApache SparkやPythonのバージョンが決まります。新規にジョブを作成する場合は、最新のGlueバージョンを選択することが推奨されています。各バージョンが対応するSpark・Python・JavaのバージョンはAWS Glue versions(AWS Glue公式ドキュメント)にまとまっています。

6.3 実行制御

ジョブの実行に関する制御設定として、以下の項目があります。

設定項目 説明
タイムアウト ジョブの最大実行時間(分)。この時間を超えるとジョブは自動的に停止する。想定外の長時間実行によるコスト増加を防ぐために設定する
最大同時実行数 同じジョブが同時に実行できる数。デフォルトは1で、前の実行が完了するまで次の実行は待機する
リトライ回数 ジョブが失敗した際の自動リトライ回数(0〜10回)。一時的なエラーに対する耐障害性を高める

6.4 ジョブパラメータ

ジョブパラメータは、ジョブの実行時にキーと値のペアで渡す設定値です。環境変数のような役割を果たし、ジョブのスクリプト内から参照できます。

例えば、入力元のS3パスや出力先のS3パス、処理対象の日付などをジョブパラメータとして外部から渡すことで、同じスクリプトを異なる条件で再利用できます。開発環境と本番環境でパラメータを切り替えるといった使い方も一般的です。

6.5 ジョブブックマーク

ジョブブックマークは、前回のジョブ実行で処理済みのデータを記録し、次回の実行時に未処理のデータのみを処理する増分処理の機能です。

この機能を有効にすると、毎回すべてのデータを最初から処理する必要がなくなり、処理時間とコストを大幅に削減できます。日次で新しいデータが追加されるようなケースでは、ジョブブックマークの利用が推奨されています。

7. 主なユースケース

Glueの代表的なユースケースを紹介します。

7.1 業務データの変換

RDSやAuroraに蓄積された業務データ(受注データ、顧客データなど)をGlueジョブで抽出し、分析に適したParquet形式に変換してS3に保存します。業務システムのデータベースに直接分析クエリを実行すると負荷がかかりますが、Glueで定期的にデータを抽出・変換してS3に保存することで、業務システムに影響を与えずにAthenaで分析できるようになります。

7.2 ログデータの変換

アプリケーションやAWSサービスが出力するログデータ(JSON形式やテキスト形式)を、分析に適したParquet形式に変換してS3に保存します。変換後のデータはAthenaで効率的にクエリできるようになります。

7.3 データの統合・クレンジング

複数のデータソース(営業システム、在庫管理システム、顧客管理システムなど)のデータを統合し、形式の統一やデータクレンジングを行います。例えば、日付形式の統一、重複レコードの除去、不正な値の修正などを行い、統合されたデータをデータウェアハウスやデータレイクに保存することで、横断的な分析を可能にします。

また、個人情報(氏名、メールアドレスなど)を含むデータを分析用途で利用する際に、Glueジョブで該当カラムをマスキング(伏せ字化やハッシュ化)してから保存するといった使い方もあります。

📝 データクレンジングとは
データクレンジングは、データの中に含まれる誤り・重複・欠損・表記ゆれなどを検出し、修正・除去することでデータの品質を高める作業のことです。「データクリーニング」とも呼ばれます。

8. 設計のポイント

Glueを設計する際の主要な検討項目を以下にまとめます。

設計項目 検討内容 推奨・注意事項
ジョブの種類 Spark / Python Shell の選択 大量データにはSpark、軽量処理にはPython Shell
データ形式 出力フォーマットの選択 分析用途にはParquet形式を推奨
パーティション データの分割戦略 日付(year/month/day)でのパーティション分割が一般的
リソース割り当て ワーカータイプ・ワーカー数・DPUの選択 最小限から開始し、処理時間に応じて調整
エラーハンドリング ジョブ失敗時の対応 CloudWatchアラームで監視し、リトライ設定を行う
ブックマーク 増分処理の有効化 毎回全データを処理せず、新規・更新データのみを処理

9. まとめ

この講座では、AWSのETL/ELTサービスであるGlueについて学びました。

  • AWS Glueはデータの検出・変換・ロードを行うフルマネージドのETL/ELTサービス
  • Glueデータカタログはデータの「所在と構造」を一元管理する目録で、AthenaやRedshiftから参照される
  • クローラーがS3のデータを自動スキャンし、スキーマを検出してデータカタログに登録する
  • GlueジョブでPythonやSparkを使ったETL処理を実行できる
  • Glue Studioを使えば、GUIで視覚的にETLパイプラインを構築できる
  • 分析用データはParquet形式に変換することで、クエリ速度とコスト効率を大幅に改善できる