ストーリー
田
田中VPoE
データレイクとDWH、それぞれの課題は何だった?
あなた
データレイクは「何でも入るが分析しにくい、ACIDトランザクションがない」。DWHは「構造化データに強いが、非構造化データやMLワークロードに弱い、コストが高い」
あ
田
田中VPoE
まさにそうだ。レイクハウスは、データレイクの柔軟性とDWHの分析性能を統合した第4世代のアーキテクチャだ。Delta Lake、Apache Iceberg、Apache Hudiがそのテーブルフォーマットだ
あなた
データレイク上にDWHの機能を載せるイメージですか?
あ
田
田中VPoE
その通り。オープンなストレージ(S3/GCS)上にACIDトランザクション、スキーマ管理、タイムトラベルを実現する。DWHのようにデータをコピーする必要がなく、コスト効率が高い
レイクハウスとは
データレイク、DWH、レイクハウスの比較
| 観点 | データレイク | DWH | レイクハウス |
|---|
| ストレージ | オブジェクトストレージ | 専用ストレージ | オブジェクトストレージ |
| データ形式 | 構造化 + 非構造化 | 構造化のみ | 構造化 + 非構造化 |
| ACIDトランザクション | なし | あり | あり |
| スキーマ管理 | スキーマオンリード | スキーマオンライト | 両方対応 |
| クエリ性能 | 低〜中 | 高 | 高 |
| コスト | 低 | 高 | 中 |
| ML/AIサポート | 直接アクセス可 | データエクスポートが必要 | 直接アクセス可 |
| タイムトラベル | なし | 限定的 | あり |
| オープン性 | オープン | ベンダーロックイン | オープン |
レイクハウスのアーキテクチャ
レイクハウスアーキテクチャ:
┌─────────────────────────────────────────────┐
│ クエリエンジン │
│ Spark / Trino / Presto / Databricks SQL │
└──────────────────┬──────────────────────────┘
│
┌──────────────────┴──────────────────────────┐
│ テーブルフォーマット │
│ Delta Lake / Apache Iceberg / Apache Hudi │
│ ┌─────────────────────────────────────┐ │
│ │ ACIDトランザクション │ │
│ │ スキーマ管理・進化 │ │
│ │ タイムトラベル │ │
│ │ パーティション管理 │ │
│ └─────────────────────────────────────┘ │
└──────────────────┬──────────────────────────┘
│
┌──────────────────┴──────────────────────────┐
│ オブジェクトストレージ │
│ S3 / GCS / ADLS (Parquet ファイル) │
└─────────────────────────────────────────────┘
テーブルフォーマットの比較
主要3フォーマット
| 観点 | Delta Lake | Apache Iceberg | Apache Hudi |
|---|
| 開発元 | Databricks | Netflix → Apache | Uber → Apache |
| エコシステム | Databricks中心 | マルチエンジン | Spark中心 |
| トランザクションログ | JSON(Delta Log) | Avro/JSON(Metadata) | タイムライン |
| スキーマ進化 | 列追加、型変更 | 列追加/削除/リネーム、型変更 | 列追加 |
| タイムトラベル | 対応 | 対応(Snapshot) | 対応 |
| パーティション進化 | 制限的 | 対応(Hidden Partitioning) | 制限的 |
| Z-Order | 対応 | 対応(Sort Order) | 対応 |
| エンジン互換性 | Spark, Trino, Flink | Spark, Trino, Flink, Presto, Dremio | Spark, Flink |
| 採用企業 | Databricksユーザー | Netflix, Apple, Adobe | Uber, ByteDance |
Iceberg の特徴的な機能
Apache Iceberg の Hidden Partitioning:
従来のHiveスタイル:
s3://data/orders/year=2025/month=01/day=15/
ユーザーは WHERE year=2025 AND month=01 AND day=15 と
パーティション列を意識してクエリを書く必要がある
Iceberg の Hidden Partitioning:
パーティション変換関数でパーティションを定義
CREATE TABLE orders (
order_id BIGINT,
order_date TIMESTAMP,
amount DECIMAL(10,2)
)
PARTITIONED BY (day(order_date))
ユーザーは WHERE order_date = '2025-01-15' と
自然なクエリを書くだけでパーティションプルーニングが効く
レイクハウスの実装パターン
パターン1: Databricks + Delta Lake
| コンポーネント | ツール |
|---|
| ストレージ | S3 / ADLS |
| テーブルフォーマット | Delta Lake |
| クエリエンジン | Databricks SQL |
| ETL/ELT | Databricks Notebooks / dbt |
| BI | Looker / Tableau |
| メタデータ | Unity Catalog |
パターン2: AWS + Iceberg
| コンポーネント | ツール |
|---|
| ストレージ | S3 |
| テーブルフォーマット | Apache Iceberg |
| クエリエンジン | Athena / EMR (Spark / Trino) |
| ETL/ELT | Glue / dbt |
| カタログ | Glue Data Catalog |
| BI | QuickSight / Looker |
パターン3: GCP + BigLake
| コンポーネント | ツール |
|---|
| ストレージ | GCS |
| テーブルフォーマット | Iceberg / Delta Lake |
| クエリエンジン | BigQuery (BigLake) |
| ETL/ELT | Dataproc / dbt |
| カタログ | BigQuery Metastore |
| BI | Looker |
「レイクハウスのテーブルフォーマット選定は、エンジンの互換性で決めることが多い。Databricks中心ならDelta Lake、マルチエンジンならIceberg。技術的な差は縮まりつつあるが、エコシステムの差は大きい」 — 田中VPoE
タイムトラベルとデータバージョニング
活用シーン
| シーン | 説明 | クエリ例 |
|---|
| データ復元 | 誤って削除したデータの復元 | SELECT * FROM orders VERSION AS OF 42 |
| 監査 | 過去の特定時点のデータ確認 | SELECT * FROM orders TIMESTAMP AS OF '2025-01-15' |
| ML再現性 | モデル学習時のデータセット再現 | 特定バージョンのスナップショットを参照 |
| デバッグ | パイプライン障害時の原因調査 | 障害前後のデータ差分を確認 |
まとめ
| ポイント | 内容 |
|---|
| レイクハウス | データレイクの柔軟性とDWHの分析性能を統合 |
| テーブルフォーマット | Delta Lake、Iceberg、Hudiが主要な選択肢 |
| 主な利点 | ACIDトランザクション、タイムトラベル、スキーマ進化、コスト効率 |
| 実装パターン | Databricks + Delta Lake、AWS + Iceberg、GCP + BigLake |
チェックリスト
次のステップへ
次は「ディメンショナルモデリング」を学びます。ファクトテーブルとディメンションテーブルの設計手法、Slowly Changing Dimensionの実装方法を身につけましょう。
推定読了時間: 30分