セクション2 基礎:データの取り込みと処理 📘
このファイルは 📘 基礎レベル。各サブトピックの「概念」と「サービスの役割」を理解することがゴールです。 設計判断やトレードオフは 02_応用.md で扱います。 このセクションは出題比重~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 計画:どこから(ソース)・どこへ(シンク)・どう変換・どう束ねる(オーケストレーション)かを設計
- 2.2 構築:実際にパイプラインを作る。サービス選定と変換ロジックが核心
- 2.3 運用化:定期実行・依存管理・自動デプロイ(CI/CD)
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書き戻し)
- 「何が入って何が出るか」を最初に決めると、必要なサービスが見えてくる
- 同じソース・シンクでも、バッチかストリーミングかで構成が変わる(→ 2.2で詳説)
② 変換(Transformation)とオーケストレーションのロジック
| ロジック | 意味 | 例 |
|---|---|---|
| 変換 | データの形を変える処理 | 整形・フィルタ・集計・結合・型変換・エンリッチメント |
| オーケストレーション | 複数ジョブの実行順序・依存・スケジュールの制御 | 「抽出→変換→ロード→通知」を順番に・依存を守って実行 |
- 変換は Dataflow / Dataproc / Data Fusion / BigQuery(SQL) が担当
- オーケストレーションは Cloud Composer / Workflows が担当(→ 2.3)
③ ネットワーキングの基礎
パイプラインのコンポーネント間の通信経路を設計します。
| 概念 | 説明 |
|---|---|
| VPC / サブネット | コンポーネントを配置する仮想ネットワーク |
| 限定公開のGoogleアクセス(Private Google Access) | 外部IPなしで内部からGoogle APIへ到達 |
| Private Service Connect / VPCピアリング | サービス/VPC間をプライベートに接続 |
| ファイアウォール ルール | 通信の許可・拒否を制御 |
- Dataflow ワーカーは外部IPを無効化し、限定公開のGoogleアクセスで通信させるのがセキュアな基本形
- オンプレ連携は Cloud VPN / Cloud Interconnect でプライベート接続
④ データ暗号化
セクション1の復習。パイプラインでも保存時・転送時とも自動で暗号化される。
| 方式 | 鍵の管理 | 使いどころ |
|---|---|---|
| デフォルト暗号化 | 特別な要件がなければこれ(自動) | |
| CMEK(顧客管理鍵) | あなた(Cloud KMS) | 鍵のローテーション/無効化を制御したい |
| CSEK(顧客提供鍵) | あなた(持ち込み) | 鍵をGCPに預けたくない厳格要件 |
- Pub/Sub・Dataflow・BigQuery・GCS いずれも CMEK 対応。規制要件があれば CMEK を指定
2.2 パイプラインの構築
① データクレンジング
取り込んだ生データを分析に使える品質へ整える工程。
生データ ──► [欠損処理] ──► [重複排除] ──► [型/形式統一] ──► [外れ値処理] ──► クリーンデータ
NULL補完 重複行削除 日付/数値の正規化 範囲外の除外
- 担当ツール:Dataflow(コード)/ Cloud Data Fusion(GUI、Wrangler機能)/ BigQuery(SQL) / Dataprep
- デッドレターパターン:処理できない不正レコードを別の場所(デッドレターキュー/テーブル)へ隔離し、パイプラインを止めない
② サービスの見極め(最重要)
データ処理の中核サービスを役割で覚えます。
| サービス | 種別 | ひとことで | 主な使いどころ |
|---|---|---|---|
| Pub/Sub | メッセージング | データを「受け取る」グローバルなキュー | ストリーミング取り込み・イベント連携・バッファ |
| Dataflow | 処理(サーバーレス) | Apache Beamで「処理する」 | バッチ/ストリーミング統一・自動スケール |
| Apache Beam | プログラミングモデル | Dataflowの「中身」 | 統一パイプライン記述(移植可能) |
| Dataproc | 処理(マネージドクラスタ) | Spark/Hadoopを「動かす」 | 既存Spark/Hadoop資産の移行 |
| Cloud Data Fusion | 処理(GUI) | ノーコードで「組み立てる」 | GUIでETL/ELT・コードを書かない |
| BigQuery | DWH/処理 | 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等)
メッセージを保持し、配信を仲介
- トピック (Topic):メッセージの送り先(カテゴリ)
- サブスクリプション (Subscription):トピックからメッセージを受け取る購読口
- プル型 (Pull):受信側が取りに行く
- プッシュ型 (Push):Pub/SubがHTTPエンドポイントへ送る
- 役割:急なデータ流入を吸収するバッファ、複数受信者へのファンアウト、送受信の疎結合化
- 配信は**少なくとも1回(at-least-once)**が基本(重複あり得る)。Dataflowと組むと Exactly-once を実現できる
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 で次々と変換していく
- 有界データ (Bounded) = バッチ(ファイル等、終わりがある)
- 無界データ (Unbounded) = ストリーミング(Pub/Sub等、終わりがない)
- 同じBeamコードで両方書けるのが最大の特徴("Batch and Streaming Unified")
- サーバーレス:クラスタ管理不要、ワーカーを自動スケール
Dataproc の役割
マネージドな Spark / Hadoop クラスタ。OSSのビッグデータエコシステムをそのまま動かす。
【Hadoop/Sparkエコシステム】
Spark ── 高速な分散処理エンジン(インメモリ)
Hadoop ── 分散処理の基盤(MapReduce, YARN)
HDFS ── 分散ファイルシステム(GCPではGCSに置き換え推奨)
Hive/Pig/Presto ── SQL/スクリプトでの処理
- 使いどころ:既存の Spark/Hadoop のコード資産をそのまま移行したいとき
- クラスタは数分で起動。ジョブ完了後に破棄する ephemeral(一時)クラスタ+GCS が低コストの定石
- Dataflow がサーバーレスなのに対し、Dataproc はクラスタを意識する
Cloud Data Fusion の役割
GUIでドラッグ&ドロップしてパイプラインを組むノーコード/ローコードETL(CDAPベース)。
- コードを書かずに、視覚的にソース→変換→シンクをつなぐ
- Wrangler:データを見ながら対話的にクレンジング・整形
- 内部では Dataproc 上で Spark として実行される
- 使いどころ:コードを書きたくない/書けないチーム、迅速なETL構築
③ 変換(Transformations)
バッチ処理 vs ストリーミング処理
| 観点 | バッチ処理 | ストリーミング処理 |
|---|---|---|
| データ | 蓄積済み(有界) | 到着し続ける(無界) |
| 重視 | スループット(量) | レイテンシ(速さ) |
| 例 | 日次の売上集計、月次レポート | リアルタイム不正検知、ライブ ダッシュボード |
| 代表サービス | Dataflow(バッチ) / Dataproc / BigQuery | Dataflow(ストリーミング) / 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 に到着
- イベント時刻 (Event time):データが実際に発生した時刻
- 処理時刻 (Processing time):システムが処理した時刻
- ネットワーク遅延などで、データは順序が乱れて遅れて届くことがある
- ウォーターマーク (Watermark):「この時刻までのデータはもう出揃った」とシステムが判断する境界線。これを過ぎたウィンドウは集計を確定できる
- 遅延到着データ (Late data):ウォーターマークより後に届いたデータ
- 許容遅延 (allowed lateness) を設定すると、その範囲の遅延データを後から取り込み再計算できる
- 許容を超えた超遅延データは破棄(またはデッドレターへ)
トリガー(Trigger)
- トリガー = 「ウィンドウの集計結果をいつ出力するか」を制御する仕組み
- 種類:
- イベント時刻トリガー:ウォーターマーク到達時に出力(既定)
- 処理時刻トリガー:一定の処理時間ごとに出力
- データ駆動トリガー:N件たまったら出力
- 複合トリガー:早期結果(途中経過)+遅延データでの再出力を組み合わせる
- 早期発火+遅延更新:ウォーターマーク前に途中経過を出し、遅延データが来たら結果を更新、という運用ができる
Exactly-once 処理
- Exactly-once:各レコードを重複なく・漏れなく ちょうど1回処理する保証
- Dataflow は内部でチェックポイントと重複排除を行い、Pub/Sub と組み合わせて Exactly-once を実現できる
- 比較:at-least-once(重複あり得る)/ at-most-once(欠損あり得る)/ exactly-once(ちょうど1回)
④ 処理ロジック
- フィルタリング(条件で絞る)、マッピング(1→1変換)、集約(GroupBy/Combine)、結合(Join)、エンリッチメント(外部データで補強)
- Beam では
ParDo(要素ごとの処理)、GroupByKey、Combine、Flatten、Partitionなどの PTransform を組み合わせる - サイド入力(Side Input):メインのストリームに参照データ(マスタ等)を合流させる仕組み
⑤ AI によるデータエンリッチメント
近年追加された範囲。パイプライン内で AI/ML を使ってデータを補強する。
| 手法 | 説明 | 例 |
|---|---|---|
| BigQuery ML の生成AI関数 | SQLからLLM/モデルを呼び出す | ML.GENERATE_TEXT(要約・分類)、ML.GENERATE_EMBEDDING(ベクトル化) |
| Vertex AI 連携 | パイプラインからモデル推論を呼ぶ | 画像分類、感情分析、エンティティ抽出 |
| Cloud DLP | PII検出・マスキング | 取り込み時に機密情報を秘匿 |
- 例:レビューテキストを
ML.GENERATE_TEXTで感情分類して列を追加、画像をVertex AIで分類してタグ付け
⑥ データの取得とインポート
| 方法 | 用途 |
|---|---|
| bq load / BigQuery への直接ロード | GCS/ローカルのファイルをBigQueryへ取り込み |
| Pub/Sub → Dataflow → BigQuery | ストリーミング取り込みの定番 |
| Storage Transfer Service | 他クラウド/オンプレ → GCS の大容量転送 |
| BigQuery Data Transfer Service | SaaS/他DWHからの定期取り込み |
| Datastream | DBの変更をCDCで継続複製 |
| Dataflow テンプレート | Googleが用意した定型パイプライン(GCS→BQ等)をパラメータ実行 |
- 形式:CSV / JSON / Avro / Parquet / ORC。Avro/Parquet は型情報を持ち高速・堅牢
- BigQuery 外部テーブル / BigLake:ロードせずGCS上のファイルを直接クエリ
⑦ 新規データソースとの統合
- 新しいSaaSやDBを追加する際、コネクタ(Data Fusion のプラグイン、Datastream の対応ソース等)を確認
- スキーマの違いを吸収する変換層を設け、既存パイプラインに合流させる
2.3 パイプラインのデプロイと運用化
① ジョブの自動化とオーケストレーション
複数のジョブを「順番に・依存関係を守って・定期的に」実行する。代表は2つ。
Cloud Composer(マネージド Apache Airflow)
【DAG = 有向非巡回グラフ】タスクの依存関係をコードで定義
┌──────────┐
│ extract │
└────┬─────┘
▼
┌──────────┐
│transform │
└────┬─────┘
┌────┴─────┐
▼ ▼
┌────────┐ ┌────────┐
│load_bq │ │load_gcs│ ← 並列に実行
└────┬───┘ └───┬────┘
└────┬────┘
▼
┌──────────┐
│ notify │
└──────────┘
- DAG(有向非巡回グラフ):タスクと依存関係をPythonコードで定義
- 使いどころ:複雑な依存関係、多数のタスク、リトライ・分岐・スケジュールが必要な本格的なワークフロー
- 豊富な Operator(BigQueryOperator, DataflowOperator 等)でGCPサービスを呼べる
- Airflow資産(既存DAG)をそのまま使える
Workflows
- サーバーレスなAPIオーケストレーション。YAML/JSONでステップを定義
- 使いどころ:軽量なサービス連携、HTTP/API・Cloud Functions・Cloud Runの順次/分岐実行
- イベント駆動・低コスト・インフラ管理不要。シンプルな連携向き
【使い分けの第一感】
複雑な依存・多数タスク・データパイプライン → Cloud Composer (Airflow)
軽量なAPI/サービス連携・イベント駆動・低コスト → Workflows
- 補助:Cloud Scheduler(cronで定期トリガー)、Eventarc(イベント駆動の起動)
② CI/CD(継続的インテグレーション・デプロイ)
パイプラインのコードを自動でテスト・ビルド・デプロイする。
コード push ──► [Cloud Build トリガー] ──► テスト ──► ビルド ──► デプロイ
(Git) (ソースの変更を検知) 単体/結合 成果物 Dataflowテンプレート/
Composer DAG 等を配置
- Cloud Build:ビルド・テスト・デプロイを自動化するCI/CDサービス(
cloudbuild.yamlで定義) - 使いどころ:Dataflow テンプレートのビルド&登録、Composer の DAG を GCS の dags フォルダへ配置、Terraformでのインフラ適用
- Artifact Registry:ビルドしたコンテナ/パッケージの保管庫
- ベストプラクティス:dev→staging→prod の環境ごとに自動デプロイし、テストを通過したものだけ昇格
📌 このセクションの基礎まとめ
- パイプラインは ソース→取り込み→変換→シンク + オーケストレーション+CI/CD
- 処理サービスは役割で覚える:Pub/Sub=受け取る、Dataflow=処理する(サーバーレス)、Dataproc=Sparkを動かす、Data Fusion=GUIで組む、BigQuery=SQLで変換
- ストリーミングの核:ウィンドウ(固定/スライディング/セッション)・ウォーターマーク・トリガー・遅延データ・Exactly-once
- オーケストレーション:複雑な依存=Composer、軽量連携=Workflows
- 自動デプロイは Cloud Build による CI/CD
次は 02_応用.md で設計判断とトレードオフ、試験のひっかけを学びます。