DEA / ドメイン1 データの取り込みと変換
重要な内容
AWS Glue の ETL ジョブ
は、サーバーを用意せずに (抽出・変換・ロード) のジョブを動かせるのデータ統合サービスです。 を中心に、複数のソースからデータを読み、結合・クレンジング・形式変換をして、やへ書き込みます。DEA では、ジョブの種類とワーカーの選択、コスト (Flex)、性能 ()、そして「Glue と と と のどれで変換するか」の判断が中心です。
Point
- DPU = Data Processing Unit は Glue の処理能力と課金の単位で、1 DPU は 4 vCPU と 16 GB のメモリです。
- DynamicFrame は Glue 独自のデータの表現で、レコードごとにスキーマが違ってもよい (自己記述的な) ことが Spark の DataFrame との違いです。
- 和訳
- Predicate: 述語、条件式
- Weblio英和辞書「predicate」
概要
のジョブは、Data Catalog のテーブルや接続を使ってソースを読み、スクリプト (Python または Scala) の変換を実行し、ターゲットへ書きます。スクリプトは自分で書くことも、Glue Studio の画面でノードをつないで生成することもできます。
| 構成要素 | 役割 |
|---|---|
| ジョブ | スクリプト、 ロール、ワーカーの種類と数、Glue のバージョン、接続などの定義 |
| Data Catalog | テーブルのスキーマと場所 (詳細は「AWS Glue Data Catalog と」の章) |
| 接続 | や 内のデータストアへの接続情報 |
| トリガー・ワークフロー | ジョブとクローラーの起動と順序 |
主要技術
①ジョブの種類 ⚠️ 頻出
| 種類 | 実行エンジン | 向くケース |
|---|---|---|
| (glueetl) | 分散処理の Apache Spark | 大量データの結合・集計・形式変換。最もよく使う |
| Spark Streaming (gluestreaming) | Spark Structured Streaming (マイクロバッチ) | や のストリームを読んで変換し続ける |
| Python shell (pythonshell) | 1台の Python (0.0625 または 1 DPU) | 小さなデータの処理、 の実行、 の呼び出しなど、分散処理が不要な軽い処理 |
for Ray (Ray による分散 Python) は、2026年4月30日に新規の受付を終えました。既存の利用者は使い続けられますが、新しく Ray で分散処理をする場合は、 上で KubeRay を使う方法が案内されています。試験で「分散 Python」の選択肢が出ても、新規の構成には選びません。
⚠️ 頻出: 数 MB〜数百 MB の小さなファイルを1つずつ処理するだけなら、Spark ジョブは起動と DPU の点で過剰です。Python shell ジョブか を選びます。
②ワーカーの種類と Glue のバージョン
| ワーカー | vCPU / メモリ | 向くケース | |
|---|---|---|---|
| G.025X | 0.25 | 2 / 4 GB | 少量のストリーミングジョブ |
| G.1X | 1 | 4 / 16 GB | 一般的な変換・結合・クエリ |
| G.2X | 2 | 8 / 32 GB | 一般的な変換で、より大きなメモリが必要 |
| G.4X / G.8X | 4 / 8 | 16 / 64 GB、32 / 128 GB | 重い変換・集計・結合 |
| G.12X / G.16X | 12 / 16 | 48 / 192 GB、64 / 256 GB | 非常に大きく資源を多く使うジョブ |
| R.1X〜R.8X | 1〜8 | メモリ重視の構成 | メモリ不足 (OOM) が頻発する、メモリと の比率を高くしたい |
ジョブの料金は、使った DPU と実行時間で決まります。 のバージョンで と Python のバージョンが決まり、バージョンを指定しないジョブは 5.1 になります。ジョブのタイムアウトを指定しない場合の既定は、Glue 5.0 以降で 480 分、4.0 以前で 2,880 分です。
③Flex 実行とオートスケーリング (コストの調整) ⚠️ 頻出
| 機能 | 内容 | 向くケース |
|---|---|---|
| Flex 実行クラス | 空いている計算資源を使い、標準より安く実行する。開始が遅れることがある。G.1X と G.2X、 3.0 以降で使える | 急がないジョブ (夜間の集計、テスト、一回限りのロード) |
| 標準実行クラス | 専用の資源ですぐに開始する | 時間に厳しいジョブ |
| オートスケーリング | 指定したワーカー数を上限に、各段階で必要な数だけワーカーを使う | 段階によって処理量が変わるジョブ |
| ジョブ実行のキューイング | 上限や資源の不足ですぐに動けない実行を、失敗させずに待たせる | 大量のジョブを流す自動化されたパイプライン |
⚠️ 頻出: 「時間に余裕のある夜間のバッチのコストを下げたい」は Flex 実行クラスです。「SLA が厳しい」ジョブには Flex は選びません。
④DynamicFrame と変換
| 変換 | 内容 |
|---|---|
| ApplyMapping | 列名と型を対応づけて変える |
| ResolveChoice | 1つの列に複数の型が混在する (例: 文字列と数値) ときの解決方法を決める |
| Relationalize | 入れ子の を平らなテーブルに分解する |
| Join / Filter / DropFields / DropNullFields | 結合、行の絞り込み、列の削除、空の列の削除 |
| FindMatches (ML 変換) | で、表記の揺れがある重複レコードを見つける |
は toDF() で の DataFrame に、fromDF() で戻せます。Spark や DataFrame の豊富な関数を使いたい部分は DataFrame で書きます。
⑤プッシュダウン述語と読み取りの絞り込み ⚠️ 頻出
| 機能 | 内容 |
|---|---|
| (push_down_predicate) | Data Catalog のパーティションを条件で絞り込み、該当するパーティションの のファイルだけを読む |
| カタログのパーティション述語 (catalogPartitionPredicate) | パーティションの絞り込みを Data Catalog のサーバー側で行う。パーティションの数が非常に多いテーブルで、一覧の取得を速くする |
| 列の選択 | 列指向の形式 () では、必要な列だけを読む |
| の並列読み取り | hashfield / hashpartitions で分割して並列に読む |
2026年10月のパーティションだけを読む例です。
dyf = glueContext.create_dynamic_frame.from_catalog(
database="sales", table_name="orders",
push_down_predicate="year='2026' and month='10'")
読み込んでから filter で絞るのでは、全ファイルを読んだ後に捨てることになり、時間と が無駄になります。
⑥複数のソースの統合と書き込み
ジョブでは、 のファイル、 のデータベース、、 などを1つのスクリプトで読み、結合して書き込めます。
| 書き込み先 | ポイント |
|---|---|
| S3 ( など) | partitionKeys でパーティションを作る。enableUpdateCatalog で Data Catalog のパーティションを更新できる |
| Redshift | 一時ディレクトリ (S3) を経由して でロードする。事前・事後の (preactions/postactions) でステージングテーブルからの ができる |
| / / | テーブル形式を指定して、行単位の更新・削除を行う |
⑦変換サービスの選び分け ⚠️ 頻出
| 要件 | 選ぶサービス | 理由 |
|---|---|---|
| で の 、運用最小 | クラスター管理不要、Data Catalog と統合 | |
| 既存の Spark/Hive/Presto のコードや細かいクラスター調整 | (EMR Serverless) | オープンソースのフレームワークを幅広く、設定の自由度が高い |
| 小さなファイルを届いたそばから軽く変換 (15分以内) | 、ミリ秒単位の課金 | |
| データが既に にあり、 で変換 | Amazon Redshift () | データを動かさない |
| のデータを SQL で変換して別のテーブルに | の / INSERT INTO | サーバーレス、SQL だけ |
| コードを書かずに整形・クレンジング | 画面上のレシピで変換 | |
| ストリームのな集計 | 秒単位の遅れ、状態の管理 |
⑧監視とデバッグの設定
| 設定 | 用途 |
|---|---|
| ジョブ・オブザーバビリティメトリクス | で の使用、メモリ、、などを見る |
| 継続的なログ記録 | 実行中のログを CloudWatch Logs へ送る (無効だと完了後にしか見えない) |
| UI | ステージやタスクの所要時間、シャッフル、スキューを可視化 |
| 再試行回数 | 失敗時の自動の再実行 (0〜10 回)。タイムアウトしたジョブは再実行されない |
| 最大数 | 同じジョブを同時に何本まで動かすか (既定 1) |
性能の問題の調べ方は「変換処理のトラブルシューティングと高速化」の章で扱います。
試験対策
①判断マトリクス
| 問題文のキーワード | 選ぶ機能・設定 |
|---|---|
| で の 、運用最小 | の Spark ジョブ |
| 小さなデータの軽い処理、分散不要 | Python shell ジョブ (または ) |
| ストリームを Spark で変換し続ける | Glue ストリーミング ETL |
| 急がないジョブのコストを下げる | Flex 実行クラス |
| 段階で処理量が変わり、ワーカーが余る | オートスケーリング |
| メモリ不足 (OOM) が頻発 | 大きいワーカー (G.2X 以上) か R 系のワーカー |
| 特定の日付のパーティションだけ読む | |
| パーティションが非常に多く、一覧の取得が遅い | カタログのパーティション述語、パーティションインデックス |
| 1つの列に型が混在 | ResolveChoice |
| 入れ子の を平らに | Relationalize |
| 表記の揺れがある重複の検出 | FindMatches |
| 既存の Spark/Hive 資産、細かい調整 | |
| 新規に分散 Python (Ray) | Glue for Ray は新規受付終了。 + KubeRay |
②よくある誤答
- 小さなファイルの処理に大きな ジョブを使うこと。
- 読み込んだ後で filter してパーティションを絞ること。で読む前に絞ります。
- SLA の厳しいジョブに Flex を使うこと。開始が遅れることがあります。
- 継続的なログ記録を無効のまま、実行中の問題を調べようとすること。