View on GitHub

Today I Learned

Software Engineering Blog

6. Deep Dive on Data Formats

Delta Lake, Apache Iceberg, Apache Hudi について。

6.1 Why Do We Need These Open Data Formats?

オープンデータ形式が必要な理由は、クラウドデータレイクストレージが表形式データを格納できるようにするため。

表敬式で類似データがグループにまとまっていると、計算するために必要なトランザクションが減る。

データレイクストレージで使われるオブジェクトストレージシステムは、既存データの更新、スキーマの強制とチェック、クエリのパフォーマンスに制限があるため、オープンデータ形式でデータを保存し、コンピューティングエンジンもそれを理解することで、最適なパフォーマンスが保証される。

6.2 Delta Lake

DeltaLakeは、Apache SparkのDatabricksが開発したオープンデータ形式。

Deltaテーブルは、データオブジェクト、ログ、ログチェックポイントから構成される。

データオブジェクトは、Parquetファイルで格納された実際のデータ。

ログは、表内のデータの変更を管理するトランザクションログ (Ledger)。変更はアクションと呼ばれ、JSON軽s機で格納される。

ログチェックポイントは、ある地点までのアクションを格納するログのバージョン。

Deltaテーブルが作られるとログも作られ、Deltaテーブルに対するすべての変更はログに記録される。データオブジェクトの更新とDeltaログ更新の2つの操作がシリアルに実行されることによって書き込みがされる。

SQL的なクエリを実行するデータやバージョン管理が必要なMLモデル用のデータセットなどでおすすめできるデータ形式。Sparkを使っているなら、既存のパイプラインに少しの変更を加えるだけで既存データをDelta Lake形式に変換できる。

6.3 Apache Iceberg

NetflixはAmazon S3のデータレイクにApache Hiveの表データ形式を使っていたが、既存のデータセットの更新とApache Hiveのパフォーマンスの問題に直面し、Apache Icebergを開発した。

Apache Icebergは、データの物理ストレージ (Apache Parquet や Apache ORC) を集めて構造化し論理テーブルにするための変換層。既存のデータ形式の上に構築される。

データのために特定のデータ形式を要求せずにデータ構造の正しさが保証されるようにしたい場合にIcebergが適している。

Icebergの特徴

6.4 Apache Hudi

Hudiは、Uberによって開発されたオープンデータ形式。

Hudiは、データセットを0から処理するのではなく、アップサートや差分処理をサポートできるようにする処理効率の高さを目指して設計されている。

コピーオンライト、マージオンリードの2種類のテーブルをサポート。

Hudiテーブルの読み出しは、スナップショットクエリ、デルタクエリ、読み出し最適化クエリがサポートされている。

スナップショットクエリは、格納されたデータのスナップショットに対するクエリ。マッチしたすべてのデータ返す。

デルタクエリは、変更されたデータに対するクエリ。変更されたデータだけを返す。

読み出し最適化クエリは、。読み出しに最適化された形式で格納されたクエリ。コンパクションされてないデータしか含まれておらず、read速度が速い一方、最新データが対象に含まれないトレードオフがある。

高頻度の書き込みを処理できるテーブルをサポートするように設計されている。