PDE 合格対策

セクション2:データの取り込みと処理

データパイプラインの中核。「取り込む → 処理する → 運用する」の3工程を、サービスの役割・ストリーミングの仕組み・設計判断・試験のひっかけまで一気通貫で押さえます。

出題 ~25% ★ 最重要セクション 📘 基礎 🔧 応用 🎯 要点と暗記
🔑 TL;DR(このセクションの核)

🎯 学習目標チェックリスト

このセクションの到達度0 / 0











※ チェック状態はこのブラウザに保存されます。

📖 学習コンテンツ

📘 基礎レベル
💡 このレベルのゴール 各サブトピックの「概念」と「サービスの役割」を理解すること。設計判断やトレードオフは「応用」タブで扱います。 このセクションは出題比重 ~25% で最重要。サービスの役割と使い分けを確実に押さえましょう。

2.0 全体像:パイプラインの3工程

データパイプラインは「取り込む → 処理する → 運用する」の3工程で考えます。シラバスの2.1/2.2/2.3に対応します。

┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ ソース │──►│ 取り込み │──►│ 処理/変換 │──►│ シンク │ │ (Source) │ │ (Ingest) │ │(Transform)│ │ (Sink) │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ DB/ログ Pub/Sub Dataflow BigQuery IoT/SaaS GCS Dataproc GCS Kafka Storage TS Data Fusion Bigtable 2.1 計画 ──────────────────────────────────────────► 2.2 構築(クレンジング・変換・サービス選定) 2.3 運用(オーケストレーション=Composer/Workflows、CI/CD=Cloud Build)

2.1 データパイプラインの計画

① ソース(Source)とシンク(Sink)

パイプラインの入口と出口を定義します。

【ソース=データの出どころ】 【シンク=データの行き先】 - DB(Cloud SQL, オンプレRDB) - BigQuery(分析) - イベント/ログ(アプリ, IoT) - Cloud Storage(データレイク) - メッセージ(Pub/Sub, Kafka) - Bigtable(低レイテンシ参照) - ファイル(GCS, S3, オンプレ) - Pub/Sub(後段への再配信) - SaaS(Salesforce 等) - Cloud SQL / Spanner(OLTP書き戻し)

② 変換(Transformation)とオーケストレーションのロジック

ロジック意味
変換データの形を変える処理整形・フィルタ・集計・結合・型変換・エンリッチメント
オーケストレーション複数ジョブの実行順序・依存・スケジュールの制御「抽出→変換→ロード→通知」を順番に・依存を守って実行

③ ネットワーキングの基礎

パイプラインのコンポーネント間の通信経路を設計します。

概念説明
VPC / サブネットコンポーネントを配置する仮想ネットワーク
限定公開のGoogleアクセス(Private Google Access)外部IPなしで内部からGoogle APIへ到達
Private Service Connect / VPCピアリングサービス/VPC間をプライベートに接続
ファイアウォール ルール通信の許可・拒否を制御

④ データ暗号化

🔑 セクション1の復習 パイプラインでも保存時・転送時とも自動で暗号化される。
方式鍵の管理使いどころ
デフォルト暗号化Google特別な要件がなければこれ(自動)
CMEK(顧客管理鍵)あなた(Cloud KMS)鍵のローテーション/無効化を制御したい
CSEK(顧客提供鍵)あなた(持ち込み)鍵をGCPに預けたくない厳格要件

2.2 パイプラインの構築

① データクレンジング

取り込んだ生データを分析に使える品質へ整える工程。

生データ ──► [欠損処理] ──► [重複排除] ──► [型/形式統一] ──► [外れ値処理] ──► クリーンデータ NULL補完 重複行削除 日付/数値の正規化 範囲外の除外

② サービスの見極め(最重要)

データ処理の中核サービスを役割で覚えます。

サービス種別ひとことで主な使いどころ
Pub/Subメッセージングデータを「受け取る」グローバルなキューストリーミング取り込み・イベント連携・バッファ
Dataflow処理(サーバーレス)Apache Beamで「処理する」バッチ/ストリーミング統一・自動スケール
Apache BeamプログラミングモデルDataflowの「中身」統一パイプライン記述(移植可能)
Dataproc処理(マネージドクラスタ)Spark/Hadoopを「動かす」既存Spark/Hadoop資産の移行
Cloud Data Fusion処理(GUI)ノーコードで「組み立てる」GUIでETL/ELT・コードを書かない
BigQueryDWH/処理SQLで「変換・分析する」ELT・大規模分析・BQML
Apache Kafkaメッセージング(OSS)OSS版の「受け取る」既存Kafka資産(Managed Service for Kafka)
【役割の動詞で覚える】 Pub/Sub = 受け取る(緩衝・配信) Dataflow = 処理する(サーバーレスで柔軟) Dataproc = (Sparkを)動かす(既存資産の移行) Data Fusion= 組み立てる(GUIノーコード) BigQuery = 変換・分析する(SQL)

Pub/Sub の役割

グローバルなメッセージング基盤。送信側(パブリッシャー)と受信側(サブスクライバー)を疎結合にする。

パブリッシャー ──► [トピック] ──► [サブスクリプション] ──► サブスクライバー (アプリ/IoT) (Dataflow等) メッセージを保持し、配信を仲介

Dataflow(Apache Beam)の役割

サーバーレスでバッチもストリーミングも同じコードで処理できる。Apache Beam という統一モデルを実行する。

【Apache Beam の基本要素】 PCollection ── データの集合(バッチ=有界 / ストリーム=無界) PTransform ── データへの変換操作(Map, Filter, GroupBy, Window…) Pipeline ── PTransform をつないだ処理フロー全体 Runner ── 実行エンジン(Dataflow Runner で GCP上で動く) 入力 ─► [Read] ─► [Transform] ─► [Transform] ─► [Write] ─► 出力 PCollection を PTransform で次々と変換していく

Dataproc の役割

マネージドな Spark / Hadoop クラスタ。OSSのビッグデータエコシステムをそのまま動かす。

【Hadoop/Sparkエコシステム】 Spark ── 高速な分散処理エンジン(インメモリ) Hadoop ── 分散処理の基盤(MapReduce, YARN) HDFS ── 分散ファイルシステム(GCPではGCSに置き換え推奨) Hive/Pig/Presto ── SQL/スクリプトでの処理

Cloud Data Fusion の役割

GUIでドラッグ&ドロップしてパイプラインを組むノーコード/ローコードETL(CDAPベース)。

③ 変換(Transformations)

バッチ処理 vs ストリーミング処理

観点バッチ処理ストリーミング処理
データ蓄積済み(有界)到着し続ける(無界)
重視スループット(量)レイテンシ(速さ)
日次の売上集計、月次レポートリアルタイム不正検知、ライブ ダッシュボード
代表サービスDataflow(バッチ) / Dataproc / BigQueryDataflow(ストリーミング) / Pub/Sub
結果のタイミングまとめて一度にデータ到着ごと/ウィンドウごと
バッチ : [====蓄積====] ──► 一括処理 ──► 結果 ストリーミング: ● ● ● ● ● ● ● ● …(途切れず流れる)──► 逐次処理 ──► 逐次結果

ストリーミングのウィンドウ処理(Windowing)

無界ストリームは「いつ集計するか」を決められないため、時間で区切る=ウィンドウを使う。これは試験頻出。

① 固定ウィンドウ(Fixed / Tumbling)── 重ならない一定幅 |--w1--|--w2--|--w3--| 例: 1分ごとの件数 隙間なく、重なりなく分割 ② スライディングウィンドウ(Sliding / Hopping)── 重なる |---w1---| |---w2---| |---w3---| 例: 直近5分の平均を1分ごとに算出 幅(window) と 間隔(period) を指定。重複あり ③ セッションウィンドウ(Session)── 活動の途切れで区切る ●●● ___gap___ ●●●● __gap__ ●● 例: ユーザーの操作セッション 一定時間(gap)アクティビティが無ければ区切る。幅は可変
ウィンドウ重なり典型用途
固定 (Fixed/Tumbling)なし固定1分ごとの集計、定期的なバケット集計
スライディング (Sliding/Hopping)あり固定移動平均、直近N分の傾向
セッション (Session)なし可変ユーザーセッション、操作のまとまり
💡 補足 グローバルウィンドウ (Global) はストリーム全体を1つの窓とみなす(カスタムトリガー必須)。

ウォーターマーク(Watermark)と遅延到着データ(Late data)

イベント時刻 ──► ネットワーク遅延・順序逆転 ──► 処理時刻 12:00:30 12:00:35 に到着

トリガー(Trigger)

Exactly-once 処理

④ 処理ロジック

⑤ AI によるデータエンリッチメント

近年追加された範囲。パイプライン内で AI/ML を使ってデータを補強する。

手法説明
BigQuery ML の生成AI関数SQLからLLM/モデルを呼び出すML.GENERATE_TEXT(要約・分類)、ML.GENERATE_EMBEDDING(ベクトル化)
Vertex AI 連携パイプラインからモデル推論を呼ぶ画像分類、感情分析、エンティティ抽出
Cloud DLPPII検出・マスキング取り込み時に機密情報を秘匿

⑥ データの取得とインポート

方法用途
bq load / BigQuery への直接ロードGCS/ローカルのファイルをBigQueryへ取り込み
Pub/Sub → Dataflow → BigQueryストリーミング取り込みの定番
Storage Transfer Service他クラウド/オンプレ → GCS の大容量転送
BigQuery Data Transfer ServiceSaaS/他DWHからの定期取り込み
DatastreamDBの変更をCDCで継続複製
Dataflow テンプレートGoogleが用意した定型パイプライン(GCS→BQ等)をパラメータ実行

⑦ 新規データソースとの統合

2.3 パイプラインのデプロイと運用化

① ジョブの自動化とオーケストレーション

複数のジョブを「順番に・依存関係を守って・定期的に」実行する。代表は2つ。

Cloud Composer(マネージド Apache Airflow)

【DAG = 有向非巡回グラフ】タスクの依存関係をコードで定義 ┌──────────┐ │ extract │ └────┬─────┘ ▼ ┌──────────┐ │transform │ └────┬─────┘ ┌────┴─────┐ ▼ ▼ ┌────────┐ ┌────────┐ │load_bq │ │load_gcs│ ← 並列に実行 └────┬───┘ └───┬────┘ └────┬────┘ ▼ ┌──────────┐ │ notify │ └──────────┘

Workflows

【使い分けの第一感】 複雑な依存・多数タスク・データパイプライン → Cloud Composer (Airflow) 軽量なAPI/サービス連携・イベント駆動・低コスト → Workflows

② CI/CD(継続的インテグレーション・デプロイ)

パイプラインのコードを自動でテスト・ビルド・デプロイする。

コード push ──► [Cloud Build トリガー] ──► テスト ──► ビルド ──► デプロイ (Git) (ソースの変更を検知) 単体/結合 成果物 Dataflowテンプレート/ Composer DAG 等を配置
📌 このセクションの基礎まとめ
  • パイプラインは ソース→取り込み→変換→シンク + オーケストレーション+CI/CD
  • 処理サービスは役割で覚える:Pub/Sub=受け取る、Dataflow=処理する(サーバーレス)、Dataproc=Sparkを動かす、Data Fusion=GUIで組む、BigQuery=SQLで変換
  • ストリーミングの核:ウィンドウ(固定/スライディング/セッション)・ウォーターマーク・トリガー・遅延データ・Exactly-once
  • オーケストレーション:複雑な依存=Composer、軽量連携=Workflows
  • 自動デプロイは Cloud Build による CI/CD
🔧 実践(中堅) 🎯 発展(シニア)
💡 このレベルのゴール 「どう設計判断するか」「トレードオフは何か」「試験のひっかけ」に焦点を当てます。基礎概念は「基礎」タブを参照。 最重要セクションのため、判断軸とひっかけを特に厚く扱います。

2.1 パイプライン計画の設計判断

🔧 ソース・シンク・処理方式の決定木

質問1: データは「蓄積済み」か「流れ続ける」か? 蓄積済み(有界) → バッチ 流れ続ける(無界) → ストリーミング 質問2: リアルタイム性は必要か? 秒〜分以内の鮮度が必要 → ストリーミング(Pub/Sub + Dataflow) 時間〜日次でよい → バッチ(スケジュール実行) 質問3: 既存のコード資産は? Spark/Hadoopのコードがある → Dataproc 新規・サーバーレス志向 → Dataflow コードを書きたくない → Cloud Data Fusion SQLで完結できる → BigQuery (ELT) / Dataform

🔧 ネットワーキングのベストプラクティス

⚠️ ひっかけ 「Dataflowをセキュアに」→ 外部IP無効+限定公開のGoogleアクセス+(必要なら)VPC Service Controls

🔧 暗号化の判断

⚠️ ひっかけ Dataflow は処理中の一時データにもCMEKを適用できる(パイプライン全体で鍵要件を満たす)

2.2 パイプライン構築の設計判断(最重要)

🔧🎯 Dataflow vs Dataproc vs Cloud Data Fusion(頻出の使い分け)

観点DataflowDataprocCloud Data Fusion
モデルApache Beam(サーバーレス)Spark/Hadoop(クラスタ)GUI(内部でDataproc/Spark)
運用クラスタ管理不要・自動スケールクラスタを管理(ephemeral推奨)クラスタ管理不要(裏で起動)
コードJava/Python/Go既存Spark/PySpark/Hiveノーコード/ローコード
得意ストリーミング+バッチ統一既存OSS資産の移行迅速なETL・非エンジニア
選ぶ条件新規・サーバーレス・ストリーミングSpark/Hadoopコードがあるコードを書かない/書けない
【一発判定】 「ストリーミング」「サーバーレス」「Apache Beam」 → Dataflow 「既存のSpark/Hadoop」「Hive」「移行」 → Dataproc 「GUI」「ノーコード」「ドラッグ&ドロップ」 → Cloud Data Fusion 「SQLだけで」「BigQuery内のELT」 → BigQuery / Dataform
⚠️ ひっかけ
  • 「リフト&シフトで既存Sparkジョブを動かしたい」→ Dataproc(Dataflowに書き換える必要なし)
  • 「サーバーレスでストリーミングとバッチを1つのコードで」→ Dataflow
  • 「アナリストがGUIでETLを組みたい」→ Cloud Data Fusion

🔧🎯 Dataflow Shuffle と Streaming Engine

ワーカーVMの負荷をサービス側にオフロードして、スケーラビリティと安定性を高める機能。

機能対象効果
Dataflow Shuffleバッチシャッフル(GroupBy/Join)をサービス側で実行。VMのCPU/メモリ負荷を軽減、起動高速化
Streaming Engineストリーミングウィンドウ状態の保持をサービス側へ。ワーカーを軽量化、オートスケールを高速・滑らかに
⚠️ ひっかけ
  • 「ストリーミングのオートスケールやワーカー安定性を改善」→ Streaming Engine
  • 「バッチのシャッフルがVMを圧迫」→ Dataflow Shuffle

🎯 ウィンドウ選択の判断

要件選ぶウィンドウ
1分ごと・1時間ごとなど定期的な集計固定(Fixed/Tumbling)
直近N分の移動平均・傾向スライディング(Sliding/Hopping)
ユーザーの操作のまとまり・無活動で区切るセッション(Session)
⚠️ ひっかけ
  • 「30分操作がなければセッション終了とみなす」→ セッションウィンドウ(gap=30分)
  • 「5分間の平均を1分ごとに更新」→ スライディング(window=5分, period=1分)
  • 「重複なく毎分カウント」→ 固定ウィンドウ

🎯 ウォーターマーク・遅延データの設計

⚠️ ひっかけ 「ネットワーク遅延でデータが順不同に届くが正しく集計したい」→ イベント時刻+ウォーターマーク
⚠️ ひっかけ 「集計後に遅れて届くデータも反映したい」→ トリガー+許容遅延(accumulating mode)

🔧🎯 Exactly-once の実現

⚠️ ひっかけ 「重複なくちょうど1回処理したい」→ Dataflow の Exactly-once 処理(Pub/Subの重複をDataflowが吸収)

🔧🎯 Pub/Sub の重要機能(頻出)

機能説明使いどころ
順序指定キー(Ordering Key)同じキーのメッセージを順序保証して配信キーごとに順序が重要なイベント(例: 同一ユーザーの操作順)
デッドレタートピック(DLQ)規定回数失敗したメッセージを退避処理不能メッセージの隔離、パイプライン停止防止
シーク(Seek)過去のタイムスタンプ/スナップショットへ再生位置を戻す障害後の再処理、バグ修正後の再取り込み
メッセージ保持(Retention)確認済みでも一定期間メッセージを保持シークでの再処理を可能にする
フィルタ(Filter)属性でサブスクリプション配信を絞る必要なメッセージだけ受信
スキーマ(Schema)Avro/Protobufでメッセージ構造を検証データ品質の担保
⚠️ ひっかけ
  • 「特定キー内で順序を保ちたい」→ 順序指定キー(グローバルな全順序ではない点に注意)
  • 「処理に失敗し続けるメッセージで詰まる」→ デッドレタートピック
  • 「バグ修正後に過去メッセージを再処理」→ シーク(要メッセージ保持)

🔧🎯 Pub/Sub vs Pub/Sub Lite

観点Pub/SubPub/Sub Lite
スコープグローバル(マルチリージョン自動)ゾーン/リージョン単位
キャパシティ自動プロビジョニング手動でスループット/ストレージを事前予約
コスト標準大幅に安い(〜80%程度)
運用完全フルマネージド・無設定キャパシティ計画が必要
選ぶ条件一般用途・可用性重視・運用最小コスト最優先・高スループットで予測可能
⚠️ ひっかけ
  • 「とにかくコストを抑えたい、スループットは予測でき、ゾーン単位でよい」→ Pub/Sub Lite
  • 「グローバルで高可用・運用したくない」→ Pub/Sub(既定はこちら)
💡 補足 Pub/Sub Lite は将来的な扱いに注意が必要だが、試験上は「低コスト・要キャパシティ計画」の対比で問われる

🎯 Kafka 資産の扱い

⚠️ ひっかけ 「オンプレKafkaの資産を活かしつつGCPで運用」→ マネージドKafka or Pub/Sub への移行を検討(要件次第)

🎯 AI エンリッチメントの設計

⚠️ ひっかけ
  • 「BigQueryのテキスト列を要約/分類したい(SQLで)」→ BigQuery ML の ML.GENERATE_TEXT
  • 「埋め込みを生成してベクトル検索」→ ML.GENERATE_EMBEDDING + Vector Search

🔧 データ取得・形式の判断

⚠️ ひっかけ
  • 大量・型安全・高速ロード → Avro / Parquet(自己記述・圧縮・列指向)。CSVはスキーマ・型に弱い
  • 「ロードせずGCS上のファイルを直接分析」→ 外部テーブル / BigLake
  • 「定型のGCS→BQ取り込みを素早く」→ Dataflow テンプレート(Google提供)

2.3 デプロイと運用化の設計判断

🔧🎯 Cloud Composer vs Workflows(頻出の使い分け)

観点Cloud Composer(Airflow)Workflows
本質データパイプラインのオーケストレータサーバーレスなAPI/サービス連携
定義Python(DAG)YAML/JSON
依存関係複雑な依存・分岐・リトライに強い順次/簡単な分岐
コスト/運用常時稼働の環境(コストあり)実行課金・インフラ管理不要
得意多数タスク・スケジュール・データ統合軽量イベント駆動・マイクロサービス連携
選ぶ条件複雑なETL/ELTの依存管理軽量・低コスト・APIの連携
【一発判定】 「DAG」「Airflow」「複雑な依存」「多数のデータジョブ」 → Cloud Composer 「軽量」「サーバーレス」「API/HTTPの連携」「低コスト」 → Workflows 「単純な定期トリガー(cron)だけ」 → Cloud Scheduler
⚠️ ひっかけ
  • 「複雑な依存関係のあるDAGを管理」→ Cloud Composer
  • 「数個のAPIを順番に呼ぶ軽量な連携を低コストで」→ Workflows
  • 「ジョブを毎朝6時に起動するだけ」→ Cloud Scheduler(Composerを使うほどではない)

🔧 Composer 運用のベストプラクティス

⚠️ ひっかけ 「Composerのワーカーが重い処理で詰まる」→ 処理を外部サービスへオフロードし、Composerはオーケストレーションに専念

🔧🎯 CI/CD の設計(Cloud Build)

⚠️ ひっかけ 「パイプラインのデプロイを自動化・再現可能に」→ Cloud Build による CI/CD + テンプレート/IaC

🎯 ひっかけ・判断ポイント総まとめ

❌ 取り違え厳禁ポイント
  • Dataflow vs Dataproc:「既存Spark/Hadoop」が出たら Dataproc、「サーバーレス/Beam/ストリーミング」なら Dataflow
  • Composer vs Workflows:「複雑なDAG/データジョブ」は Composer、「軽量API連携/低コスト」は Workflows
  • Pub/Sub vs Pub/Sub Lite:「コスト最優先+キャパシティ予測可」は Lite、既定は Pub/Sub
  • ウィンドウ:定期集計=固定、移動平均=スライディング、無活動で区切る=セッション
  • イベント時刻 vs 処理時刻:順序乱れ・遅延を正しく扱うならイベント時刻+ウォーターマーク
  • Shuffle vs Streaming Engine:バッチのシャッフル負荷=Shuffle、ストリーミングの安定/オートスケール=Streaming Engine
  • Exactly-once:Pub/Subは at-least-once(重複あり)、Dataflowが重複排除して Exactly-once を実現
  • GUI/ノーコードが出たら Cloud Data Fusion
  • デッドレター=処理失敗メッセージの隔離、シーク=過去への巻き戻し再処理

🎯 統合シナリオ演習(考え方の練習)

🔑 シナリオ あるEC企業。①Webとモバイルから毎秒数万件のクリック/購入イベントが発生。②リアルタイムで「直近5分の売上トレンド」をダッシュボードに表示したい。③ユーザーの操作セッション単位の分析もしたい。④イベントは順不同・遅延ありで届く。⑤一部メッセージが壊れていてもパイプラインを止めたくない。⑥同じユーザーのイベントは順序を保ちたい。⑦夜間に当日分をBigQueryで集計しレポートを生成、複数ジョブの依存がある。⑧パイプラインは自動デプロイしたい。

設計の骨子(解答例)

  1. 取り込み:イベントは Pub/Sub で受ける(急な流入をバッファ、疎結合)。同一ユーザーの順序保持に 順序指定キー(Ordering Key) を使用
  2. ストリーミング処理Dataflow(Apache Beam, ストリーミング) で処理。Streaming Engine を有効化してオートスケールと安定性を確保
  3. 直近5分のトレンドスライディングウィンドウ(window=5分, period=1分) で集計
  4. セッション分析セッションウィンドウ(無活動gapで区切る) を別途適用
  5. 順不同・遅延イベント時刻+ウォーターマークで集計し、許容遅延(allowed lateness)トリガーで遅延データを反映
  6. 壊れたメッセージデッドレタートピック/テーブルへ隔離し、本処理は継続(Exactly-once は Dataflow が担保)
  7. シンク:集計結果を BigQuery へ(Storage Write API で Exactly-once)。ダッシュボードは Looker/Looker Studio(+必要なら BI Engine)
  8. 夜間バッチ+依存管理Cloud Composer(Airflow DAG) で「集計→検証→レポート→通知」を依存関係付きでオーケストレーション
  9. CI/CD:DAGとDataflowテンプレートを Git 管理し、Cloud Build で dev→staging→prod へ自動デプロイ
💡 典型パターン この「リアルタイム要件=Pub/Sub+Dataflow+ウィンドウ」「複雑な依存のバッチ=Composer」「自動化=Cloud Build」の組み合わせが、本セクションの設計問題の典型パターンです。
📌 このセクションの設計判断の型
  • 処理方式は バッチ/ストリーミング → サービスは Dataflow/Dataproc/Data Fusion/BigQuery を要件で選ぶ
  • ストリーミングは ウィンドウ・ウォーターマーク・トリガー・遅延データ・Exactly-once が判断の核
  • スケール/安定性は Streaming Engine(ストリーミング)/ Shuffle(バッチ)
  • 取り込みの緩衝は Pub/Sub(順序指定キー・デッドレター・シーク/コストなら Lite)
  • オーケストレーションは 複雑=Composer / 軽量=Workflows、デプロイは Cloud Build
🎯 要点と暗記
💡 使い方 試験直前の総ざらい用。暗記すべき表一問一答でセクション2を固めます。 最重要セクション(~25%)。ここの取りこぼしは致命的なので確実に。

🔑 暗記必須テーブル

処理サービスの役割(動詞で覚える)

サービス役割(動詞)選ぶ条件
Pub/Sub受け取る(緩衝・配信)ストリーミング取り込み・疎結合・バッファ
Dataflow処理する(サーバーレス)Beam・ストリーミング/バッチ統一・自動スケール
Dataproc(Sparkを)動かす既存Spark/Hadoop資産の移行
Cloud Data FusionGUIで組み立てるノーコード/ローコードETL
BigQuerySQLで変換・分析ELT・大規模分析・BQML

Dataflow vs Dataproc vs Data Fusion

キーワード答え
サーバーレス / Apache Beam / ストリーミングDataflow
既存Spark/Hadoop/Hive / リフト&シフトDataproc
GUI / ノーコード / ドラッグ&ドロップCloud Data Fusion
SQLだけ / BigQuery内ELTBigQuery / Dataform

ストリーミングのウィンドウ

ウィンドウ重なり用途
固定 (Fixed/Tumbling)なし固定毎分/毎時の定期集計
スライディング (Sliding/Hopping)あり固定移動平均・直近N分
セッション (Session)なし可変無活動gapで区切る操作のまとまり

ストリーミング処理の核概念

用語一言
イベント時刻データが発生した時刻(集計はこれが原則)
処理時刻システムが処理した時刻
ウォーターマーク「この時刻まで出揃った」と見なす境界
遅延到着データウォーターマーク後に届くデータ(許容遅延で再計算)
トリガーウィンドウ結果を「いつ出すか」の制御
Exactly-once重複なく漏れなくちょうど1回処理

Dataflow のスケール/安定化機能

機能対象効果
Dataflow Shuffleバッチシャッフルをサービス側へ。VM負荷軽減
Streaming Engineストリーミング状態をサービス側へ。オートスケール高速・安定
FlexRSバッチ遅延スケジューリングで低コスト

Pub/Sub の重要機能

機能一言
順序指定キー同じキー内で順序保証(全順序ではない)
デッドレタートピック失敗メッセージを隔離・パイプライン停止防止
シーク過去時刻/スナップショットへ再生位置を戻す
メッセージ保持確認後も保持しシークでの再処理を可能に
Pub/Sub Liteゾーン単位・低コスト・要キャパシティ計画

オーケストレーション

キーワード答え
DAG / Airflow / 複雑な依存 / 多数のデータジョブCloud Composer
軽量 / サーバーレス / API・HTTP連携 / 低コストWorkflows
単純な定期トリガー(cron)だけCloud Scheduler
CI/CD・ビルド・テスト・デプロイ自動化Cloud Build

✅ 一問一答(確認テスト)

クリックで解答を表示。全15問を即答できるか確認しましょう。

Q1. 既存のApache Spark/HadoopジョブをほぼそのままGCPへ移行したい。最適なサービスは?
A. Dataproc(マネージドSpark/Hadoop。Dataflowに書き換える必要がない。コスト最適化はephemeralクラスタ+GCS)
Q2. サーバーレスで、バッチとストリーミングを同じコードで処理したい。使うサービスとモデルは?
A. Dataflow(実行)+ Apache Beam(プログラミングモデル)
Q3. 「直近5分間の平均を1分ごとに更新」する集計に使うウィンドウは?
A. スライディングウィンドウ(Sliding/Hopping)(window=5分, period=1分)
Q4. 「ユーザーが30分操作しなければセッション終了」とみなす集計のウィンドウは?
A. セッションウィンドウ(Session)(gap=30分。幅は可変)
Q5. ネットワーク遅延でイベントが順不同・遅れて届くが、正しく時間集計したい。基準とする時刻と仕組みは?
A. イベント時刻(Event time)+ ウォーターマーク(Watermark)。遅延データは許容遅延(allowed lateness)とトリガーで反映する。
Q6. Pub/Subで処理に失敗し続けるメッセージがパイプラインを詰まらせている。対策は?
A. デッドレタートピック(DLQ)(規定回数失敗したメッセージを退避し、本処理を継続)
Q7. バグ修正後、過去に配信済みのメッセージを再処理したい。Pub/Subの機能は?
A. シーク(Seek)(過去のタイムスタンプ/スナップショットへ再生位置を戻す。メッセージ保持が前提)
Q8. メッセージを重複なく・漏れなくちょうど1回処理したい。どう実現する?
A. Dataflow の Exactly-once 処理(Pub/Subは at-least-once で重複し得るが、Dataflowが重複排除・チェックポイントで吸収。BigQuery書き込みは Storage Write API)
Q9. ストリーミングのオートスケールを高速・滑らかにし、ワーカーの安定性を高めたい。有効化する機能は?
A. Streaming Engine(ウィンドウ状態をサービス側へ移し、ワーカーを軽量化)。バッチのシャッフル負荷なら Dataflow Shuffle。
Q10. 多数のジョブを複雑な依存関係に従って実行・スケジュールしたい。使うサービスは?
A. Cloud Composer(マネージドAirflow、DAG)。軽量なAPI連携なら Workflows、単純な定期実行だけなら Cloud Scheduler。
Q11. コストを最優先し、スループットが予測でき、ゾーン単位の可用性で良いメッセージング基盤は?
A. Pub/Sub Lite(事前にキャパシティを予約。標準のPub/Subより大幅に安価)
Q12. パイプラインのコードをGit管理し、テスト・ビルド・デプロイを自動化して再現可能にしたい。中心となるサービスは?
A. Cloud Build(CI/CD)。Dataflowはテンプレート化しArtifact Registryへ、ComposerのDAGはGCSのdags/へ自動デプロイ。dev→staging→prodで昇格。
Q13. アナリストがコードを書かずにGUIでETLパイプラインを組みたい。最適なサービスは?
A. Cloud Data Fusion(ドラッグ&ドロップ。Wranglerで対話的クレンジング。内部はDataproc/Spark)
Q14. 同一ユーザーのイベントだけは到着順序を保ったまま処理したい。Pub/Subで使う機能は?
A. 順序指定キー(Ordering Key)(キー単位で順序保証。全メッセージのグローバル順序ではない点に注意)
Q15. BigQuery内のテキスト列をSQLだけで要約・分類してエンリッチしたい。使うものは?
A. BigQuery ML の生成AI関数 ML.GENERATE_TEXT(埋め込み生成なら ML.GENERATE_EMBEDDING

🎯 ひっかけ注意ポイント

❌ ひっかけ注意
  • 「既存Spark/Hadoop」と出たら Dataproc(Dataflowに誘導する選択肢は罠)
  • 「サーバーレス・Beam・ストリーミング統一」は Dataflow
  • 「GUI/ノーコード」は Cloud Data Fusion 一択
  • Composer と Workflows を混同しない:複雑な依存=Composer、軽量API連携=Workflows
  • ウィンドウの取り違え:移動平均=スライディング、無活動で区切る=セッション、定期=固定
  • 処理時刻で集計する選択肢は罠 → 正しく集計するならイベント時刻+ウォーターマーク
  • Pub/Sub は既定で at-least-once(重複あり得る)。「重複なく1回」は Dataflowの Exactly-once
  • Shuffle(バッチ)と Streaming Engine(ストリーミング) を取り違えない
  • Pub/Sub Lite は「コスト最優先+キャパシティ計画可」のときだけ。可用性・無設定重視なら標準Pub/Sub
  • 「デッドレター=隔離」「シーク=巻き戻し再処理」を逆に覚えない
  • Cloud Scheduler は起動トリガーであり、依存管理はできない(依存はComposer)

📝 セルフチェック










← 前:セクション1 設計 次:セクション3 保存 → 📝 セクション2 問題集を解く