【デルタレイク】

Delta Lake(デルタレイク) とは?

最終更新:
💡 データレイクのテーブルの変更を管理

データレイク上のテーブルに、トランザクションやスキーマ管理、過去の状態を読む機能などを提供するオープンソースの技術。データファイルと変更を管理するログを組み合わせる。

📌 このページのポイント
Delta Lake:テーブルの状態を管理 対応する 読み書き トランザクション管理 ログで確定した状態を読む スキーマも管理する データファイル Parquetなど 変更を管理するログ JSON チェックポイント 過去の版を読むには、ログとデータが必要 保存期限やVACUUMの影響を受ける
ファイルとログを組み合わせた管理の模式図。全履歴を無期限に保持する保証や、全ての値の正しさの保証ではない。
ひよこ ひよこ
普通のファイル置き場と何が違うの?
ペンギン先生 ペンギン先生
Delta Lakeに対応する読み書きでは、テーブルの変更をトランザクションとして扱うよ。新しいファイルを作っただけで途中の状態が読まれるのではなく、確定したテーブルの状態を読む仕組みなんだ。任意のファイルを置くだけで、この管理が付くわけではないよ
ひよこ ひよこ
ログには全部のデータが入っているの?
ペンギン先生 ペンギン先生
データ本体はParquetなどのデータファイルにあるよ。ログにはファイルの追加・削除など、テーブルの状態を変える操作を記録する。JSONの変更記録とチェックポイントなどを使うので、全てがJSONだけという説明も正確ではないんだ
ひよこ ひよこ
過去の状態は、いつでも読める?
ペンギン先生 ペンギン先生
タイムトラベルには、その版を再現できるログとデータファイルの両方が必要だよ。古いログの整理やVACUUMで必要なファイルがなくなれば読めなくなる。全履歴が無期限に残る監査帳や、バックアップの代わりと考えないようにしよう
ひよこ ひよこ
スキーマ検査があれば、不正なデータは全部防げる?
ペンギン先生 ペンギン先生
書き込み時に列や型の互換性を検査するけれど、値の意味まで全て正しいと保証するものではないよ。SparkのDataFrameの通常の検査では、テーブルにある列が入力にない場合はnullになる。列の追加などのスキーマ進化は、設定に応じて許可するんだ
ひよこ ひよこ
Icebergとの互換性もあるの?
ペンギン先生 ペンギン先生
UniFormを有効にすると、Icebergクライアント向けのメタデータを生成して読めるようにする機能があるよ。ただし必要なテーブル機能やクライアント対応を確認する必要がある。全ての読み書きが無条件に互換になるわけではないんだ
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Delta Lake」って出てきたら「データレイクにトランザクション管理を足して信頼性を高める仕組み」と思えればだいたいOK!
📖 おまけ:英語の意味
「Delta Lake」 = デルタレイク
💬 データレイク上のテーブルに変更管理などを加える技術名だよ。データファイルだけでなく、テーブルの状態を管理する情報も扱うんだ

参考資料

← 用語集にもどる