目次

読了時間: 約14分 | 文字数: 約5,000字

「データは新しい石油」と言われて久しい。しかし、石油は採掘しただけでは使えず、精製・輸送・貯蔵のインフラが必要だ。データも同様で、生データを集めただけでは価値を生み出さない。それを価値ある形に加工し、必要な場所に届ける仕組み——これがデータエンジニアリングである。本稿では、データサイエンティストや ML エンジニアとの協業に必要なデータエンジニアリングの基礎を解説する。

データエンジニアリングとは

データエンジニアリング: データの収集・保存・処理・提供を担うエンジニアリング領域。データ分析や機械学習の「下流」を支えるインフラ。

データエンジニアリングの役割:
生データ → [収集] → [保存] → [処理] → [提供] → 分析/ML

データサイエンスの役割:
提供されたデータ → [分析] → [モデリング] → [洞察] → ビジネス価値

データエンジニアの主なタスク

タスク説明使用ツールの例
データ収集各種ソースからデータを吸い上げFivetran, Stitch, Airbyte
データ保存データレイク/DWH に格納S3, GCS, BigQuery, Snowflake
データ処理変換・集計・結合dbt, Spark, Dataflow
データ品質検証・モニタリング・アラートGreat Expectations, Monte Carlo
データ提供分析・ML 用に整形して公開BI ツール、Feature Store

データパイプラインの基本構成

データパイプラインは、データが生産されてから消費されるまでの流れを定義する。

┌─────────────┐     ┌─────────────┐     ┌─────────────┐
│   ソース    │ ──→ │  変換処理   │ ──→ │   宛先      │
│  (Source)   │     │ (Transform) │     │ (Sink)      │
└─────────────┘     └─────────────┘     └─────────────┘

ソース(データ発生源)

ソース種別特徴
データベースPostgreSQL, MySQL, MongoDB構造化データ、トランザクション
アプリケーションWeb アプリ、モバイルアプリイベントデータ、ログ
SaaSSalesforce, Stripe, Google AnalyticsAPI 経由、定形データ
IoT デバイスセンサー、カメラストリーミング、時系列
ファイルCSV, JSON, Parquetバッチ処理、静的

変換処理(Transform)

データを分析・利用可能な形に変換する。

主な変換タイプ:

  • クリーニング: 欠損値処理、異常値除去、フォーマット統一
  • 結合: 複数ソースのデータを結合(JOIN)
  • 集計: 合計、平均、カウントなどの集計
  • 特徴量エンジニアリング: ML 用の特徴量を作成

宛先(Sink)

処理済みデータの格納先・提供先。

宛先種別用途
データウェアハウスBigQuery, Snowflake, Redshift分析クエリ
データレイクS3, GCS, ADLS生データ保存
データマート部門別 DWH特定用途向け
BI ツールTableau, Looker, Power BI可視化・ダッシュボード
Feature StoreTecton, FeastML 特徴量管理

ETL vs ELT——データ処理のパラダイム

ETL(Extract, Transform, Load)

伝統的なアプローチ。データを変換してからロードする。

抽出 (Extract) → 変換 (Transform) → 読込 (Load)
      ↓                ↓               ↓
   ソースから      中間サーバー      DWH に
   取得            で変換            格納

メリット:

  • DWH にロードする前にデータをクリーンアップできる
  • 機密データのマスキングを適用可能
  • 従来型の RDBMS と相性が良い

デメリット:

  • 変換処理に時間がかかる
  • 変換ロジックの変更にコスト
  • 生データが残らない(変換後しか保存されない)

ELT(Extract, Load, Transform)

現代的なアプローチ。データを変換せずにロードし、後から変換する。

抽出 (Extract) → 読込 (Load) → 変換 (Transform)
      ↓              ↓                ↓
   ソースから    DWH に生データ   DWH 内で
   取得          で格納           SQL 変換

メリット:

  • 生データが常に利用可能
  • DWH の計算リソースを活用(スケール容易)
  • 変換ロジックの変更が容易(SQL のみ)

デメリット:

  • DWH の性能に依存
  • 生データがそのまま保存される(ガバナンス課題)

どちらを使うべきか

シナリオ推奨理由
クラウド DWH 使用(BigQuery, Snowflake)ELT計算リソースが豊富、SQL で十分
機密データ(PII)を扱うETL またはハイブリッドロード前にマスキングが必要
ストリーミングデータELT に近いパターン取り込み後に処理
レガシー RDBMSETL変換能力に限界

2026 年現在、クラウドネイティブな環境ではELT がデファクトスタンダードだ。

データレイク vs データウェアハウス

データを「どのように保存するか」の選択だ。

データレイク(Data Lake)

あらゆる形式の生データを格納するリポジトリ

特徴詳細
データ形式構造化・半構造化・非構造化(すべて OK)
スキーマスキーマオンリード(読み取り時に定義)
用途生データ保存、探索的分析、ML
コスト安価(オブジェクトストレージ)
代表製品AWS S3, GCP GCS, Azure ADLS
データレイクの典型的な階層構造:

s3://data-lake/
├── raw/          # 生データ(変更不可)
├── staged/       # 一次加工済み
├── curated/      # 品質保証済み
└── sandbox/      # 実験用

データウェアハウス(DWH)

分析用に構造化されたデータを格納するリポジトリ

特徴詳細
データ形式構造化データのみ
スキーマスキーマオンライト(書き込み時に定義)
用途BI、レポーティング、定型的分析
コスト相对较高(計算・ストレージ統合)
代表製品BigQuery, Snowflake, Redshift

データレイクハウス(Data Lakehouse)

両者の利点を組み合わせた新しいアーキテクチャ。

データレイクハウス = データレイク(安価・柔軟)+ DWH(高速・構造化)

代表製品:
- Databricks Lakehouse
- Delta Lake
- Apache Iceberg

メリット:

  • 生データと構造化データを一元管理
  • ACID トランザクションをサポート
  • ML と BI を同一プラットフォームで

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

データ処理の「タイミング」の選択だ。

バッチ処理

一定期間のデータをまとめて処理

特徴詳細
処理頻度毎日、毎時間など定期的
レイテンシ高(時間〜日単位)
処理量大量データを効率的に
ユースケース日次レポート、夜間集計
技術Apache Spark, Hadoop, dbt
# 典型的なバッチパイプライン例
毎日 2:00 に前日分のデータを処理:
1. 2:00 - データ抽出開始
2. 2:30 - 変換処理
3. 3:00 - DWH にロード
4. 4:00 - 集計完了
5. 9:00 - 朝礼でダッシュボード確認

ストリーミング処理

データをリアルタイムで継続的に処理

特徴詳細
処理頻度継続的(レコードごと)
レイテンシ低(秒〜ミリ秒単位)
処理量小〜中量を継続的に
ユースケース不正検知、監視、パーソナライズ
技術Apache Kafka, Flink, Spark Streaming
# 典型的なストリーミングパイプライン例
クレジットカード不正検知:
1. カード利用発生
2. 100ms 以内にストリーム処理
3. 不正スコアを計算
4. 閾値超ならアラート + 取引ブロック
5. 全体で 500ms 以内

ラムダアーキテクチャ

バッチとストリーミングを組み合わせた設計パターン。

                  ┌──────────────┐
                  │   クエリ     │
                  │   レイヤー   │
                  └──────┬───────┘
                         │
            ┌────────────┴────────────┐
            ↓                         ↓
    ┌───────────────┐         ┌───────────────┐
    │  バッチ       │         │  スピード     │
    │  レイヤー     │         │  レイヤー     │
    │  (正確性)     │         │  (低遅延)     │
    └───────┬───────┘         └───────┬───────┘
            │                         │
            └────────────┬────────────┘
                         ↓
                  ┌──────────────┐
                  │   データ     │
                  │   レイヤー   │
                  └──────────────┘

バッチレイヤー: 正確だが遅い(真実の源泉) スピードレイヤー: 速いが近似値(リアルタイム性) クエリレイヤー: 両方を統合して回答

複雑なので、最近は「Kappa アーキテクチャ」(ストリーミング統一)も注目されている。

データパイプラインの設計原則

1. 冪等性(Idempotency)

同じ操作を何度実行しても同じ結果になること。

# 冪等でない処理
def load_data(data):
    db.insert(data)  # 2 回実行すると重複!

# 冪等な処理
def load_data_idempotent(data):
    db.upsert(data, key="id")  # 2 回実行しても同じ結果

なぜ重要か: パイプラインは失敗して再実行されることがある。その際、データが重複したり欠落したりしないようにする。

2. データ品質の自動検証

パイプライン内に品質チェックを組み込む

# Great Expectations の例
expectations:
  - expect_column_values_to_not_be_null:
      column: user_id
  - expect_column_values_to_be_unique:
      column: order_id
  - expect_column_values_to_be_between:
      column: amount
      min_value: 0
      max_value: 1000000

検証失敗時はアラートを送り、パイプラインを停止する。

3. データラインージ(系譜)の追跡

データの出所と変遷を追跡可能にする

order_summary.amount
  ← orders テーブル(PostgreSQL)
    ← 受注システム(2025-09-15 02:00 取得)
  ← exchange_rate テーブル
    ← 外部 API(為替レート)

問題発生時に「どのデータが影響を受けるか」を特定できる。

4. 監視とアラート

パイプラインの健全性を可視化する

監視対象メトリクス閾値例
データ鮮度最終更新からの経過時間24 時間超で警告
データ量行数、バイト数前日比±50% で警告
処理時間ジョブ実行時間想定比 2 倍で警告
エラー率失敗レコード割合1% 超で警告

ツール選定の指針

オーケストレーション

ツール特徴向いているケース
Airflow老舗、Python ベース、豊富なプラグイン自社運用 OK、複雑な DAG
Dagsterデータ資産中心、開発者体験重視モダンな設計、テスト重視
Prefect軽量、クラウド併用可能小〜中規模、手軽に始めたい
Cloud ComposerGCP 管理 AirflowGCP 環境

変換(Transformation)

ツール特徴向いているケース
dbtSQL ベース、バージョン管理、テストDWH 内変換、ELT パイプライン
Spark大規模分散処理大量データ、複雑な変換
DataflowGCP 管理、ストリーミング対応GCP 環境、リアルタイム

データ統合

ツール特徴向いているケース
Fivetranマネージド、設定のみ予算あり、運用工数を削減
Airbyteオープンソース、自ホスト可能コスト重視、カスタマイズ
Stitch简单易しい、Talend 製小規模、手軽に開始

So What?——実務への応用

  • ELT から始める: クラウド DWH 環境なら、まず ELT パターンで始める
  • 生データを必ず保存: 変換前の raw データは必ず保存(再処理可能に)
  • 冪等性を担保: 再実行しても安全な設計に
  • 監視を最初から: データ鮮度とデータ量の監視は必須
  • ツールより設計: 優れた設計 × 単純なツール > 酷い設計 × 優れたツール
  • データ契約を結ぶ: 上流・下流チームとデータ仕様を文書化

データエンジニアリングは「縁の下の力持ち」だが、データ駆動組織の成否を握る。堅牢なパイプラインが、信頼できる分析と意思決定を支える。

参考リンク

免責事項 — 掲載情報は執筆時点のものです。料金・機能は変更される場合があります。最新情報は各公式サイトをご確認ください。