詳解 データレイクハウスアーキテクチャ

―Delta Lakeを使ったデータAI活用とガバナンス

[cover photo]
TOPICS
Database
発行年月日
PRINT LENGTH
388
ISBN
978-4-8144-0139-0
原書
Delta Lake: The Definitive Guide
FORMAT
Print
Print
6,050円

データレイクは膨大なデータを柔軟に扱える一方で、スキーマ管理の複雑さや性能の低下、ガバナンスの難しさなど多くの課題を抱えてきました。本書は、これらの問題を解決するデータレイクハウスアーキテクチャの全貌を解き明かします。オープンソースのDelta Lakeを軸に、ACIDトランザクション、タイムトラベル、スキーマ進化、データ品質管理といった重要機能をわかりやすく解説します。さらに、Apache Sparkとの統合、BIやAI/MLへの応用、運用上のベストプラクティスまで、実践的な知識を網羅しています。データエンジニア、アーキテクト、アナリストにとって必携であり、モダンなデータ基盤を設計・構築する上での指針となる1冊です。

目次

監訳者まえがき
推薦の言葉
序文:Michael Armbrust
序文:Dominique Brezinski
序文

1章 Delta Lakeにおけるレイクハウスフォーマット
    1.1 Delta Lakeの誕生
        1.1.1 データウェアハウス、データレイク、データレイクハウス
        1.1.2 プロジェクトTahoeからDelta Lakeへ:初めの数ヶ月
    1.2 Delta Lakeとは何か?
        1.2.1 一般的な使用例
        1.2.2 主な特徴
    1.3 Delta Lakeテーブルの解剖
    1.4 Delta トランザクションプロトコル
        1.4.1 ファイルレベルでのDelta Lakeトランザクションログの理解
        1.4.2 信頼できる唯一の情報源(Single Source of Truth:SSOT)
        1.4.3 メタデータとデータの関係
        1.4.4 マルチバージョン同時実行制御(MVCC)ファイルとデータの可観測性
        1.4.5 メタデータとデータの相互作用を観察する
        1.4.6 テーブルに関する機能(Table Features)
    1.5 Delta Kernel
    1.6 Delta UniForm
    1.7 まとめ

2章 Delta Lakeを導入する
    2.1 Delta Lake Dockerイメージ
        2.1.1 Python 向けDelta Lake
        2.1.2 PySpark シェル
        2.1.3 JupyterLab ノートブック
        2.1.4 Scala シェル
        2.1.5 Delta Rust API
        2.1.6 ROAPI
    2.2 Delta Lakeのネイティブライブラリ
        2.2.1 複数のバインディングを用意
        2.2.2 Delta LakeのPython パッケージのインストール
    2.3 Apache Spark とDelta Lakeの組み合わせ
        2.3.1 Apache Spark でDelta Lakeをセットアップする
        2.3.2 前提条件:Java のセットアップ
        2.3.3 対話型シェルのセットアップ
    2.4 PySpark の宣言型API
    2.5 Databricks Free Edition
        2.5.1 Databricks Runtimeでクラスタを作成する
        2.5.2 ノートブックをインポートする
        2.5.3 ノートをアタッチする
    2.6 まとめ

3章 Delta Lakeの操作
    3.1 テーブルの作成
        3.1.1 Delta Lakeテーブルを作成する
        3.1.2 Delta Lakeテーブルにデータをロードする
        3.1.3 トランザクションログ
    3.2 Read(読み込み)
        3.2.1 Delta Lakeテーブルからデータをクエリする
        3.2.2 タイムトラベルを用いた読み込み(Read)
    3.3 Update(更新)
    3.4 Delete(削除)
        3.4.1 Delta Lakeテーブルからデータを削除する
        3.4.2 Delta Lakeテーブルのデータを上書きする
    3.5 MERGE(結合)
    3.6 その他の便利なアクション(処理)
        3.6.1 Parquet 変換
        3.6.2 Delta Lakeのメタデータと歴史
    3.7 まとめ

4章 Delta Lakeエコシステムの詳細解説
    4.1 コネクタ
    4.2 Apache Flink
        4.2.1 Flink DataStream Connector
        4.2.2 コネクタのインストール
        4.2.3 DeltaSource API
        4.2.4 DeltaSink API
        4.2.5 エンドツーエンドの例
    4.3 Kafka Delta Ingest
        4.3.1 Rust のインストール
        4.3.2 プロジェクトのビルド
        4.3.3 取り込みフローの実行
    4.4 Trino
        4.4.1 はじめに
        4.4.2 Trino コネクタの設定と使用方法
        4.4.3 Show Catalogs の利用
        4.4.4 スキーマの作成
        4.4.5 スキーマの表示
        4.4.6 テーブルの操作
        4.4.7 テーブルのメンテナンス操作
    4.5 まとめ

5章 Delta Lakeのメンテナンス
    5.1 Delta Lakeテーブルプロパティの活用
        5.1.1 Delta Lakeテーブルプロパティのリファレンス
        5.1.2 テーブルプロパティを持つ空のテーブルを作成する
        5.1.3 テーブルにデータを投入する
        5.1.4 テーブルのスキーマ進化(Schema Evolution の実行)
        5.1.5 テーブルプロパティの追加または変更方法
        5.1.6 テーブルプロパティの削除
    5.2 Delta Lakeテーブルの最適化
        5.2.1 大きなテーブルと小さなファイルにまつわる問題
        5.2.2 OPTIMIZEを使ったSmile File Problemの解決
    5.3 テーブルのチューニングと管理
        5.3.1 テーブルのパーティション分割
        5.3.2 テーブル作成時のパーティションの定義
        5.3.3 非パーティションテーブルからパーティションテーブルへの移行
    5.4 テーブルデータの修復、復元、置換
        5.4.1 テーブルの復元と置換
        5.4.2 データの削除とパーティションの削除
        5.4.3 Delta Lakeテーブルのライフサイクル
        5.4.4 テーブルの復元(リストア)
        5.4.5 不要データのクリーンアップ(Cleaning Up)
    5.5 まとめ

6章 Delta Lakeを利用したネイティブアプリケーションの構築
    6.1 開発環境の準備(Getting Started)
        6.1.1 Python 環境のセットアップ
        6.1.2 Rust
        6.1.3 Lambdaの構築
    6.2 まとめ

7章 Delta Lakeへのストリーミングの入出力
    7.1 ストリーミングとDelta Lake
        7.1.1 ストリーミングとバッチ処理の比較
        7.1.2 データソースとしてのDelta Lake
        7.1.3 データシンクとしてのDelta Lake
    7.2 Delta ストリーミングの設定オプション
        7.2.1 入力レートを制限する
        7.2.2 更新や削除を無視する方法
        7.2.3 処理の開始位置の指定
        7.2.4 初期スナップショットにおけるwithEventTimeOrder オプションの利用
    7.3 Apache Spark を用いた高度な使用例
        7.3.1 冪等性を持ったストリーム書き込み処理
        7.3.2 Delta Lakeのパフォーマンスメトリクス
    7.4 Auto Loader とDelta Live Tables
        7.4.1 Auto Loader
        7.4.2 Delta Live Tables(Spark Declarative Pipeline)
    7.5 Change Data Feed(変更データフィード)
        7.5.1 Change Data Feed(CDF)の活用方法
        7.5.2 変更データフィード(CDF)のスキーマ
    7.6 まとめ

8章 高度な機能
    8.1 生成列(Generated Columns)・キー・ID
    8.2 コメントと制約(Comments and Constraints)
        8.2.1 コメント
        8.2.2 Delta テーブルの制約(Constraints)
    8.3 削除ベクトル(Deletion Vectors)
        8.3.1 マージオンリード(Merge-on-Read)
        8.3.2 削除ベクトルの処理ステップ
    8.4 まとめ

9章 レイクハウスのアーキテクチャ設計
    9.1 レイクハウスアーキテクチャ
        9.1.1 レイクハウスとは何か?
        9.1.2 データウェアハウスから学ぶ
        9.1.3 データレイクから学ぶ
        9.1.4 2 層型データアーキテクチャ(Dual-Tier Data Architecture)
        9.1.5 レイクハウスアーキテクチャ
    9.2 基盤としてのDelta Lake
        9.2.1 オープンエコシステムにおけるオープンな標準規格のオープンソース
        9.2.2 トランザクションのサポート
        9.2.3 スキーマ強制とガバナンス
    9.3 メダリオンアーキテクチャ
        9.3.1 ブロンズ層の詳細
        9.3.2 シルバー層の詳細
        9.3.3 ゴールド層の詳細
    9.4 ストリーミング・メダリオンアーキテクチャ
    9.5 まとめ

10章 パフォーマンスチューニング:Delta Lakeでのデータパイプライン最適化
    10.1 パフォーマンス目標
        10.1.1 読み取り性能の最大化
        10.1.2 書き込み性能の最大化
    10.2 パフォーマンスに関する考察
        10.2.1 パーティショニング
        10.2.2 テーブルユーティリティ
        10.2.3 テーブルの統計情報
        10.2.4 Cluster By
        10.2.5 ブルームフィルタインデックス(Bloom Filter Index)
    10.3 まとめ

11章 成功するデザインパターン
    11.1 計算コストの削減
        11.1.1 高速ソリューション
        11.1.2 スマートデバイスの統合
    11.2 効率的なストリーミングでのデータ取り込み
        11.2.1 ストリーミングでのデータ取り込み
        11.2.2 Delta Rust の誕生
        11.2.3 データ取り込みの進化
    11.3 複雑なシステムの連携
        11.3.1 DoorDashにおけるデータストアの統合
        11.3.2 変更データの取得(Change Data Capture)
        11.3.3 Delta とFlink の協調
    11.4 まとめ

12章 レイクハウスのガバナンスとセキュリティの基礎
    12.1 レイクハウスのガバナンス
    12.2 データガバナンスの出現
        12.2.1 データプロダクトとデータ資産との関係
        12.2.2 レイクハウスのデータプロダクト
        12.2.3 高い信頼の維持
    12.3 データ資産とアクセス
    12.4 データ資産モデル
    12.5 データウェアハウスとデータレイクのガバナンスの統合
        12.5.1 権限管理
        12.5.2 ファイルシステムの権限管理
        12.5.3 クラウドオブジェクトストレージのアクセス制御
        12.5.4 アイデンティティとアクセス管理(IAM)
        12.5.5 データセキュリティ
        12.5.6 レイクハウスのきめ細かなアクセス制御(Fine-Grained Access Control)
    12.6 まとめ

13章 メタデータ管理、データフロー、リネージ
    13.1 メタデータ管理
        13.1.1 メタデータ管理とは何か?
        13.1.2 データカタログ
        13.1.3 データの信頼性、スチュワード、権限管理
        13.1.4 なぜメタストアが重要なのか
        13.1.5 Unity Catalog
    13.2 データフローとリネージ
        13.2.1 データリネージ
        13.2.2 データ共有
        13.2.3 データライフサイクルの自動化
        13.2.4 監査ログ
        13.2.5 モニタリングとアラート
        13.2.6 データ探索とは何か?
    13.3 まとめ

14章 Delta Sharingプロトコルでのデータ共有
    14.1 Delta Sharing の基本
        14.1.1 データ提供者(Data Provider)
        14.1.2 データ受信者(Data Recipient)
    14.2 Delta Sharing サーバ
        14.2.1 REST APIを使う
        14.2.2 REST URIの解剖
        14.2.3 シェアの一覧
        14.2.4 シェアの取得
        14.2.5 シェアにおけるスキーマのリストアップ
        14.2.6 シェア内の全テーブルのリスト
    14.3 Delta Sharing クライアント
        14.3.1 Apache Spark によるDelta Sharing
        14.3.2 Delta シェアによるストリーム処理
        14.3.3 Delta Sharing コミュニティのコネクタ
    14.4 まとめ

索引

コラム目次
    RowType
    Apache Kafka の概要
    Schema Enforcement(スキーマ強化)とSchema Evolution(スキーマ進化)
    自動的なスキーマ進化に対する代替案
    (Spark のみ)デフォルトのテーブルプロパティ
    Spark のPermissive Modeによるブロンズ層の保護
    SQLのGRANTでデータアクセスを管理する
    組織の成功のためにPrefixパターンを使う
    Unity Catalog OSSを使ってみよう
    デコレータと抽象化によるリネージの簡素化