Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Delta Commit…の最近...

Delta Commit…の最近...

2024/10/19 に行われた #otfsg_tokyo での発表資料です!

Akihiro Kuwano

October 19, 2024
Tweet

More Decks by Akihiro Kuwano

Other Decks in Technology

Transcript

  1. 自己紹介 Name: 桑野 章弘(Akihiro Kuwano) Role: Solution Architect, Databricks Speciality

    : Database / Infra全般 / DS見習い Personal : ゲーム・SNS Career : Ex-CA / Ex-AWS メディア・ゲーム系のお客様を担当させていただ いてます! Twitter(X)は @kuwa_tw でやっています! Delta Lakeは勉強中の身ゆえ、、、
  2. • 2つの操作が同じファイル・セットに書き込ま れると、競合するかも • パーティショニングは競合の可能性を減らせ る • パーティショニングされていないテーブルを使 用する場合、同時実行の単純化を実現 •

    削除ベクトルを有効 • 行レベルでの競合を検出、同時書き込みが ファイル内の異なる行を更新または削除した 場合に、自動的に競合を解決する 競合の解決にはどういう方法がある? パーティショニング 行レベル競合解決
  3. 削除ベクトルは特定のバージョンのデル タテーブルでは有効ではなくなった(「削 除された」)特定のパーケージファイルの 行の集合を表す最適化されたビットマッ プ Parquetファイルの n 番目の行には行イ ンデックス n

    が割り当て、削除ベクトルの n 番目のビットに関連付け 削除ベクトル(Deletion Vector) 4行目は「スキップ」または「削除」 とマーク。データを読み込む際に は、DVと組み合わせて結果を取 得
  4. • Delta Tableでコミットを行うオープンで柔軟な方法 • 全テーブルにはシングルコミット・コーディネータ をもっている • コミットコーディネータがやること: • コミットがどのように行われるかの定義

    • 複数のWriter間の調整 • Readerにとって最新のコミットの正の情報源 • Open: 誰でもコミット・コーディネーターになれる • 例:UC / DynamoDB / Glue / HMS など 協調コミット はじめに
  5. Pseudocode Interface CommitCoordinator { // Commits the given iterator of

    changes to a given version def commit(version, content): Commit // Returns the uuid commits in the given range (if any) def getCommits(from, optional_to): Array[Commit] } Class Commit { String path; Int length; Long commitTime; } 31 コミット・コーディネーター・インターフェース このインターフェイスを実 装することで、コミット・コー ディネーターになれる、君 もなれる シンプル、柔軟、オープン
  6. Commit flow with Coordinated Commits commit(version, content) getCommits() Commit Coordinator

    Client Identify Commit Coordinator Make changes to data files Ask Commit Coordinator to commit Success Delta Client 1 -> 1.uuid-x.json 2 -> 2.uuid-y.json 3 -> 3.uuid-z.json Some Storage Object Store Storage S3 _commits/ 1.uuid-x.json 2.uuid-y.json 3.uuid-z.json Commit Coordinator
  7. Commit flow with Coordinated Commits commit(version, content) getCommits() Identify Commit

    Coordinator Make changes to data files Ask Commit Coordinator to commit Success Delta Client 1 -> 1.uuid-x.json 2 -> 2.uuid-y.json 3 -> 3.uuid-z.json 4 -> 4.uuid-p.json Some Storage Commit Coordinator 1 -> 1.uuid-x.json 2 -> 2.uuid-y.json 3 -> 3.uuid-z.json Storage S3 _commits/ 1.uuid-x.json 2.uuid-y.json 3.uuid-z.json 4.uuid-p.json Object Store Commit Coordinator Client
  8. 35 commit(version, content) getCommits() Commit Coordinator Client version-fileName-map 1 ->

    1.uuid-x.json 2 -> 2.uuid-y.json 3 -> 3.uuid-z.json DynamoDB • コミット・コーディネーターがバージョ ンとファイル名のマップを追跡 • 例 • カタログUnity Catalog、HMS • DynamoDB • 任意の永続ストレージ コミット・コーディネーター 最近のコミットに関する情報を保持
  9. Commit Coordinator Commit Coordinator table_dir/ _delta_log/ 0000.json 0001.json _commits/ 2.uuid-p.json

    3.uuid-q.json 3.uuid-r.json 2 -> 2.uuid-p.json 3 -> 3.uuid-r.json Commit Coordinator 3 -> 3.uuid-r.json table_dir/ _delta_log/ 0000.json 0001.json 0002.json _commits/ 3.uuid-q.json 3.uuid-r.json { empty } table_dir/ _delta_log/ 0000.json 0001.json 0002.json 0003.json _commits/ • バックフィル: uuidコミットを確認可能な フォーマットにコピーす る:<version>.json • これにより古い Delta クライアントも coordinated-commit テーブル を読める様になる リードは下位互換 コミットの埋め戻し