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の特徴
- Schema evolutionのサポート
- データのパーティショニングの最適化
- タイムトラベル / ロールバック
6.4 Apache Hudi
Hudiは、Uberによって開発されたオープンデータ形式。
Hudiは、データセットを0から処理するのではなく、アップサートや差分処理をサポートできるようにする処理効率の高さを目指して設計されている。
- 効率的な書き込みのためのアップサート
- 差分的な変更の検出
- リアルタイムインサイトのサポート
コピーオンライト、マージオンリードの2種類のテーブルをサポート。
Hudiテーブルの読み出しは、スナップショットクエリ、デルタクエリ、読み出し最適化クエリがサポートされている。
スナップショットクエリは、格納されたデータのスナップショットに対するクエリ。マッチしたすべてのデータ返す。
デルタクエリは、変更されたデータに対するクエリ。変更されたデータだけを返す。
読み出し最適化クエリは、。読み出しに最適化された形式で格納されたクエリ。コンパクションされてないデータしか含まれておらず、read速度が速い一方、最新データが対象に含まれないトレードオフがある。
高頻度の書き込みを処理できるテーブルをサポートするように設計されている。