【Databricks】Deltaを整理してみた

# 背景・目的
Databricksでは、「Delta 〇〇」という用語が多く登場するので整理します。

# まとめ
下記に特徴を整理します。
| 特徴|概要|
|:--|:--|
|概要| Deltaは、DeltaLake OSSプロジェクトに関連し、含まれるテクノロジーを指す。|
|Delta Lake| 下記の特徴がある統合データ管理システム<BR>・ACIDトランザクション<BR>・スケーラブルなメタデータ処理のためのファイルベースのトランザクションログ<BR>・Parquet<BR>・リアルタイム、バッチビッグデータを処理する<BR><BR>OSSのストレージレイヤ|
|Delta Table |Delta Lakeの上に構築される<BR>テーブルの抽象化を提供するため、SQLとDataFrame APIを使用する<BR>Databricksのデータテーブル<BR>Delta Lakeのオープンソースデータフレームワークの機能<BR>ストリーミングや、大規模なバッチで取り込まれるデータレイクに使用される。|
|Delta Live Tables|下記の特徴がある<BR>・Delta テーブル間のデータフローを管理<BR>・ETLの開発と管理に関するデータエンジニアの作業を簡素化する<BR>・下記を提供する<BR>　・宣言型パイプライン開発<BR>　・データ信頼性の向上<BR>　・クラウド規模の運用オペレーション<BR>・ユーザは、同じテーブルに対してバッチ操作とストリーミング操作の両方を実行できる<BR>・データをすぐにクエリに使用できる<BR>・データに対して実行する変換を定義すると、DLTにより下記が管理される<BR>　・タスクオーケストレーション<BR>　・クラスタ管理<BR>　・モニタリング<BR>　・データ品質<BR>　・エラー処理|
|Delta Sharing|・安全なデータ共有のためのオープンスタンダード<BR>・コンピュートプラットフォームに関係なく、組織間のデータ共有を可能にする|
|Delta engine|・Databricks に含まれる Delta Lake オープンソース テクノロジを使用する Data 用のクエリー オプティマイザ<BR>・計算をデータにプッシュすることで、Spark SQL、Databricks SQL、および DataFrame 操作のパフォーマンスを最適化|
|Delta Lake transaction log（DeltaLogs）|<BR>ユーザーがテーブルに加えたすべての変更と、Delta Lake が アトミック性を保証するメカニズムを追跡する信頼できる唯一の情報源<BR>・トランザクション ログは、Delta Lake の最も重要な機能の多くを実行する共通スレッドであるため、Delta Lake を理解するための鍵となります。|

# 概要
[What are all the Delta things in Databricks?](https://docs.databricks.com/ja/introduction/delta-comparison.html)を元に整理します。

> Delta は、 Delta Lake オープンソースプロジェクトに関連する、またはオープンソースプロジェクトに含まれるテクノロジーを指します。

- Deltaは、DeltaLake OSSプロジェクトに関連し、含まれるテクノロジーを指す。

## What are the Delta things used for?
> Delta は、Databricks レイクハウスにデータとテーブルを格納するための基盤である Delta Lake で導入された用語です。 Delta Lake は、ACIDトランザクションとスケーラブルなメタデータ処理のためのファイルベースのトランザクション ログを使用して Parquet データ ファイルを拡張することにより、トランザクションのリアルタイムおよびバッチ ビッグデータを処理するための統合データ管理システムとして考案されました。

- Delta Lakeは、下記の特徴がある統合データ管理システム
    - ACIDトランザクション
    - スケーラブルなメタデータ処理のためのファイルベースのトランザクションログ
    - Parquet
    - リアルタイム、バッチビッグデータを処理する

## Delta Lake: OS data management for the lakehouse
> Delta Lake は、クラウド ストレージ (AWS S3、Azure Storage、GCS 上) に格納されているデータの上にトランザクション ストレージ レイヤーを追加することで、データレイクに信頼性をもたらすオープンソースのストレージ レイヤーです。 これにより、ACIDトランザクション、データのバージョン管理、およびロールバック機能を使用できます。 これにより、バッチデータとストリーミングデータの両方を統一された方法で処理できます。

- Delta Lakeは、OSSのストレージレイヤ
    - ACIDトランザクション
    - データのバージョン管理
    - ロールバック
    - バッチとストリーミングの両方を統一された方法で処理できる

> Delta テーブルはこのストレージレイヤーの上に構築され、テーブルの抽象化を提供するため、SQLとDataFrame APIを使用して大規模な構造化データを簡単に操作できます。

- Delta Tableは、Delta Lakeの上に構築される
- テーブルの抽象化を提供するため、SQLとDataFrame APIを使用する

## Delta tables: Default data table architecture
> Delta テーブルは、Databricks の既定のデータ テーブル形式であり、 Delta Lake オープンソース データ フレームワークの機能です。 Delta テーブルは通常、データがストリーミングまたは大規模なバッチで取り込まれるデータレイクに使用されます。

- Delta Tableは、Databricksのデータテーブル
- Delta Lakeのオープンソースデータフレームワークの機能
- ストリーミングや、大規模なバッチで取り込まれるデータレイクに使用される。

## Delta Live Tables: Data pipelines
> Delta Live Tables 、多くの Delta テーブル間のデータ フローを管理し、ETL の開発と管理に関するデータエンジニアの作業を簡素化します。 パイプラインは、 Delta Live Tablesの実行の主要単位です。Delta Live Tables は、宣言型パイプライン開発、データの信頼性の向上、クラウド規模の運用オペレーションを提供します。 ユーザーは同じテーブルに対してバッチ操作とストリーミング操作の両方を実行でき、データをすぐにクエリに使用できます。 データに対して実行する変換を定義すると、Delta Live Tables によってタスク オーケストレーション、クラスター管理、モニタリング、データ品質、およびエラー処理が管理されます。 Delta Live Tables 拡張オートスケールは、スパイクで予測不可能なストリーミングワークロードを処理できます。

- Delta Live Tablesは、下記の特徴がある
    - Delta テーブル間のデータフローを管理
    - ETLの開発と管理に関するデータエンジニアの作業を簡素化する
    - 下記を提供する
        - 宣言型パイプライン開発
        - データ信頼性の向上
        - クラウド規模の運用オペレーション
    - ユーザは、同じテーブルに対してバッチ操作とストリーミング操作の両方を実行できる
    - データをすぐにクエリに使用できる
    - データに対して実行する変換を定義すると、DLTにより下記が管理される
        - タスクオーケストレーション
        - クラスタ管理
        - モニタリング
        - データ品質
        - エラー処理

## Delta tables vs. Delta Live Tables
> Delta テーブルはテーブルにデータを格納する方法ですが、 Delta Live Tables では、これらのテーブル間のデータの流れを宣言によって記述できます。 Delta Live Tables は、多くの差分テーブルを作成して最新の状態に保つことで、それらを管理する宣言型フレームワークです。 つまり、 Delta テーブルはデータテーブルアーキテクチャであり、 Delta Live Tables はデータパイプラインフレームワークです。

- DLT
    - データテーブルアーキテクチャ
    - Delta Tableは、テーブルにデータを格納する方法
- DLT
    - データパイプラインフレームワーク
    - DLTでは、これらのテーブル間のデータの流れを宣言により記述できる
    - DLTは、多くの差分テーブルを作成し最新の状態に保つことで管理する宣言型フレームワーク

## What are the other Delta things on Databricks?
### Delta Sharing
- 安全なデータ共有のためのオープンスタンダード
- コンピュートプラットフォームに関係なく、組織間のデータ共有を可能にする

### Delta engine
- Databricks に含まれる Delta Lake オープンソース テクノロジを使用する Data 用のクエリー オプティマイザ
- 計算をデータにプッシュすることで、Spark SQL、Databricks SQL、および DataFrame 操作のパフォーマンスを最適化

### Delta Lake transaction log（DeltaLogs）
- ユーザーがテーブルに加えたすべての変更と、Delta Lake が アトミック性を保証するメカニズムを追跡する信頼できる唯一の情報源
- トランザクション ログは、Delta Lake の最も重要な機能の多くを実行する共通スレッドであるため、Delta Lake を理解するための鍵となります。
    - ACIDトランザクション
    - スケーラブルなメタデータ処理
    - タイムトラベル

# 考察
Deltaには、いくつか用語があるが下記の違いがあります。今後は、実際に手を動かして試してみます。
- Delta Lake：データ管理フレームワーク
- Delta Table：Delta Lake上に構築されるオープンソースフレームワーク
- Delta Live Tables：Delta Table間のデータフローを管理する
- Delta Sharing：安全なデータ共有のためのオープンスタンダードプロトコル
- Delta engine:Delta Lakeを使用するクリオプティマイザ
- DeltaLogs：ユーザーがテーブルに加えたすべての変更と、Delta Lake が アトミック性を保証するメカニズムを追跡する

# 参考

https://docs.databricks.com/ja/introduction/delta-comparison.html

https://github.com/delta-io/delta/blob/master/PROTOCOL.md