delta-io/delta

An open-source storage framework that enables building a Lakehouse architecture with compute engines including Spark, PrestoDB, Flink, Trino, and Hive and APIs

概要

Delta Lake は、レイクハウスアーキテクチャを構築できるオープンソースのストレージフレームワークです。これは、データレイクの低コストなストレージと、データウェアハウスの信頼性とトランザクション機能を組み合わせたシステムです。Apache Spark、PrestoDB、Flink、Trino、Hive などの一般的なデータ処理エンジンと連携し、Scala、Java、Rust、Ruby、Python 向けの API を提供します。

このリポジトリ(delta-io/delta)はコアプロジェクトですが、delta.io 組織の下にある Delta Lake リポジトリファミリー(delta-rs、delta-sharing、kafka-delta-ingest など)の一部です。

主な機能

  • ACID トランザクション — Delta Lake は、並行読み取りと書き込みが 直列化可能(つまり、操作が何らかの順序で一度に一つずつ発生したかのような結果になる)であることを保証します。これは、すべての変更を記録する トランザクションログ によって実現されます。
  • 複数のコネクタ — README では、以下の統合が強調されています:
    • Apache Spark(読み取りと書き込み)
    • Apache Flink(書き込み、プレビュー)
    • PrestoDB(読み取り)
    • Trino(読み取りと書き込み)
    • Delta Standalone(Scala/Java プロジェクト向けのシングルノード Java ライブラリ。Flink、Hive、Beam、PrestoDB を含む)
    • Apache Hive(読み取り)
    • Delta Rust API(Rust 向けの低レベルアクセス。Python と Ruby バインディング付き)

仕組み(トランザクションプロトコル)

Delta Lake の保証は、Delta トランザクションログプロトコル(PROTOCOL.md ファイルで指定)に由来します。このプロトコルは、テーブルメタデータがトランザクションログにどのように保存されるかを定義し、フォーマットにトランザクション動作を与えます。Delta Standalone ライブラリはこのプロトコルを実装し、非 Spark ツールが Delta テーブルを読み書きできるようにします。

互換性

  • API 互換性:文書化された公開 API(Scala、Java、Python)は安定しています。Spark ベースの API(spark.read や df.write など)は、メジャーリリース(例:1.x.x)内で安定しています。内部クラスは変更される可能性があります。
  • データストレージ互換性:新しいバージョンの Delta Lake は、古いバージョンで書き込まれたテーブルを常に読み取ることができます(後方互換性)。ただし、古いバージョンは新しいバージョンで書き込まれたテーブルを読み取れない場合があります(前方互換性は保証されません)— これは、トランザクションプロトコルに新機能が追加されたときに発生し、最小リーダー/ライター版の増加で示されます。

基盤となるストレージの要件

Delta Lake の ACID 保証は、ストレージシステムが次の 3 つを提供することに依存します:

  1. 原子的可視性 — ファイルは完全に表示されるか、まったく表示されないかのどちらかです。
  2. 相互排他 — 最終的な宛先でファイルを作成または名前変更できるのは 1 つのライターのみです。
  3. 一貫したリスト表示 — ファイルが書き込まれた後、将来のすべてのディレクトリリストにそのファイルが含まれている必要があります。

ビルドと開発

  • プロジェクトは SBT(Scala ビルドツール)でコンパイルされます。
  • ビルドには Java 17 以降 が必要です(java -version で確認)。
  • 一般的なコマンド:build/sbt compile、build/sbt package、build/sbt test。
  • Python テストの場合、README では Conda 環境(その特定のビルドパスには JDK 11 が必要)を設定し、python/run-tests.py を実行する方法が説明されています。
  • IntelliJ 開発の場合、README は JDK 11 を推奨し、詳細なセットアップ手順(生成されたパーサーファイルのトラブルシューティングを含む)を提供します。

コミュニティとライセンス

  • ライセンス:Apache License 2.0。
  • コミュニティチャネル:Slack(go.delta.io/slack で登録)、LinkedIn、YouTube、公開メーリングリスト。
  • 貢献は歓迎され、プロジェクトは行動規範に従います。

次のステップ

README は、完全な詳細については Delta Lake ドキュメント、Scala/Java/Python 向けの クイックスタートガイド、将来の計画については ロードマップ を参照しています。

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト