総合演習:エンドツーエンドのデータパイプラインを設計しよう
田中VPoE「Month 5の総仕上げだ。Modern Data Stack、dbt、Airflow、ストリーミング、データ品質まで学んだ全ての知識を統合して、NetShop社のデータ基盤全体の設計書を作成してほしい。」
あなた「バッチとリアルタイム両方を含む、エンドツーエンドのパイプライン設計ですね。」
田中VPoE「そうだ。技術選定から運用設計まで、実際に構築・運用できるレベルの設計書にしてくれ。」
ミッション概要
NetShop社のデータ基盤を刷新するエンドツーエンドのデータパイプライン設計書を作成します。
前提条件
- Month 5の全レッスン(Step 1〜5)を修了していること
Mission 1: アーキテクチャ全体設計(30分)
背景情報
データソース:
- 基幹システム(PostgreSQL): 注文、顧客、商品マスタ
- Webログ(JSON): クリック、ページビュー、セッション
- 外部API: 天気、為替、SNSフィード
利用者:
- 経営層: 日次KPIダッシュボード
- マーケティング: リアルタイムキャンペーン効果測定
- DS: 特徴量パイプライン(ML用)
- カスタマーサポート: 顧客360ビュー
現状の課題:
- cronジョブの乱立(80個以上)
- 障害発生時の原因特定に半日以上
- データの鮮度が不明(いつ更新されたかわからない)
タスク
全体アーキテクチャ図と技術選定表を作成してください。
解答例
アーキテクチャ図:
[データソース]
PostgreSQL ─→ [CDC: Debezium] ─→ [Kafka] ─┬→ [Flink] → リアルタイム分析
Webログ ───→ [Fluentd] ────→ [Kafka] ──┤
外部API ───→ [Airflow Extract] ──→ [S3 Raw] │
│
↓ │
[S3 Data Lake] │
↓ ↓
[Snowflake / BigQuery]
↓
[dbt Transform]
↓
┌── staging ── intermediate ── mart ──┐
│ │
↓ ↓
[Looker/Metabase] [Feast Feature Store]
ダッシュボード ML特徴量パイプライン
技術選定:
| レイヤー | 技術 | 選定理由 |
|---|---|---|
| データ収集(バッチ) | Airflow | チームの既存スキル、豊富なOperator |
| データ収集(CDC) | Debezium + Kafka | リアルタイムDB変更キャプチャ |
| メッセージング | Kafka(MSK) | マネージドで運用負荷低減 |
| ストリーム処理 | Flink | 低レイテンシ、状態管理に強い |
| データレイク | S3 | コスト効率、AWSエコシステム統合 |
| データウェアハウス | Snowflake | スケーラビリティ、コンピュート分離 |
| データ変換 | dbt | SQLベース、テスト・ドキュメント統合 |
| オーケストレーション | Airflow(MWAA) | マネージド、既存知識活用 |
| BI | Metabase | OSS、セルフサービス対応 |
| データ品質 | Great Expectations | パイプライン統合、豊富なルール |
| 可観測性 | Elementary | dbtネイティブ、自動異常検知 |
Mission 2: パイプライン詳細設計(30分)
タスク
日次バッチパイプラインとリアルタイムパイプラインの詳細設計を行ってください。
- Airflow DAGの設計(タスク構成、依存関係、エラーハンドリング)
- dbtモデルの層構成と主要モデル一覧
- ストリーミングパイプラインのトピック設計
解答例
Airflow DAG設計:
DAG: netshop_daily_pipeline (毎日02:00)
├── TaskGroup: extract
│ ├── extract_orders (PostgreSQL → S3)
│ ├── extract_customers (PostgreSQL → S3)
│ ├── extract_products (PostgreSQL → S3)
│ └── extract_weather_api (API → S3)
├── TaskGroup: load
│ ├── load_to_snowflake (S3 → Snowflake raw)
│ └── data_freshness_check
├── TaskGroup: transform
│ ├── dbt_run_staging
│ ├── dbt_run_intermediate
│ └── dbt_run_mart
├── TaskGroup: quality
│ ├── dbt_test
│ ├── great_expectations_validate
│ └── anomaly_detection
└── notify (Success/Failure → Slack)
エラーハンドリング:
- extract: retries=3, exponential_backoff, fallback to cache
- load: retries=2, idempotent MERGE
- transform: retries=1, 品質ゲートで停止判断
- SLA: 全体4時間以内
dbtモデル構成:
| 層 | モデル名 | 説明 |
|---|---|---|
| staging | stg_orders | 注文データクレンジング |
| staging | stg_customers | 顧客データクレンジング |
| staging | stg_products | 商品マスタクレンジング |
| staging | stg_web_events | Webログパース |
| intermediate | int_order_details | 注文明細結合 |
| intermediate | int_customer_behavior | 顧客行動集計 |
| mart | mart_daily_kpi | 日次KPIテーブル |
| mart | mart_customer_360 | 顧客360ビュー |
| mart | mart_product_performance | 商品パフォーマンス |
| mart | mart_campaign_effect | キャンペーン効果 |
ストリーミングトピック設計:
| トピック | パーティション | 保持期間 | 用途 |
|---|---|---|---|
| cdc.orders | 12 | 30日 | 注文CDC |
| cdc.customers | 6 | 30日 | 顧客CDC |
| web.clickstream | 24 | 7日 | クリックストリーム |
| alerts.anomaly | 3 | 30日 | 異常検知アラート |
Mission 3: 運用設計(30分)
タスク
データ基盤の運用設計書を作成してください。
- モニタリング設計(何を・どう監視するか)
- インシデント対応フロー
- 導入スケジュール(3ヶ月間)
解答例
モニタリング設計:
| 監視対象 | 指標 | 閾値 | ツール |
|---|---|---|---|
| パイプライン | DAG成功率 | < 95% | Airflow UI |
| パイプライン | 実行時間 | SLA超過 | Airflow SLA |
| データ品質 | 品質スコア | < 80 | Great Expectations |
| データ鮮度 | 最終更新時刻 | > 24h | Elementary |
| ボリューム | 行数変動 | z-score > 3 | Elementary |
| Kafka | Consumer Lag | > 10000 | CloudWatch |
| インフラ | CPU/メモリ | > 80% | CloudWatch |
インシデント対応フロー:
1. アラート検知(Slack #data-alerts)
2. 初動対応(15分以内)
- 影響範囲の特定(リネージ確認)
- 暫定対応(リトライ or ロールバック)
3. 原因調査(1時間以内)
- ログ確認、品質レポート確認
4. 恒久対応
- 修正・テスト追加・ドキュメント更新
5. 振り返り
- ポストモーテム実施、再発防止策
導入スケジュール:
| 週 | 内容 |
|---|---|
| Week 1-2 | Kafka/Snowflake環境構築、dbtプロジェクト初期化 |
| Week 3-4 | staging/intermediate層構築、基本テスト整備 |
| Week 5-6 | mart層構築、Airflow DAG構築 |
| Week 7-8 | ストリーミングパイプライン構築 |
| Week 9-10 | データ品質・可観測性・モニタリング構築 |
| Week 11-12 | 負荷テスト、ドキュメント整備、チームトレーニング |
達成度チェック
- エンドツーエンドのアーキテクチャ図を作成できた
- 全レイヤーの技術選定と理由を明記できた
- Airflow DAGとdbtモデルの詳細設計ができた
- ストリーミングパイプラインのトピック設計ができた
- モニタリング設計とインシデント対応フローを定義できた
- 3ヶ月間の導入スケジュールを作成できた
推定所要時間:90分