Delta Lakeのテーブルバージョン管理


Table versioning | Databricks on AWS [2022/2/1時点]の翻訳です。

本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。

Deltaテーブルのトランザクションログには、Delta Lakeのエボリューションをサポートするバージョン管理情報が含まれています。Delta Lakeはreaderとwriterの最小バージョンを別々にトラックします。

Delta Lakeは後方互換性を保証します。バージョンの新しいDatabricksランタイムは常に古いバージョンによって書き込まれたデータを読み込むことができます。

Delta Lakeは時に後方互換性を破壊します。古いバージョンのDatabricksランタイムでは新しいバージョンのDatabricksランタイムによって書き込まれたデータを読み取れなくなる場合があります。古すぎるバージョンのDatabricksランタイムでテーブルを読み書きしようとする際には、アップグレードすべきということを告げるエラーを受け取ることでしょう。

テーブルを作成する際、Delta Lakeはスキーマやテーブルプロパティのようなテーブル特性に基づき、要求する最低プロトコルバージョンを選択します。SQL設定によりデフォルトのプロトコルバージョンを設定することもできます。

  • spark.databricks.delta.properties.defaults.minWriterVersion = 2 (デフォルト)
  • spark.databricks.delta.properties.defaults.minReaderVersion = 1 (デフォルト)

テーブルが新しいバージョンのプロトコルをサポートするようにアップグレードするには、DeltaTable.upgradeTableProtocolメソッドを使用します。

Python
from delta.tables import DeltaTable
delta = DeltaTable.forPath(spark, "path_to_table") # or DeltaTable.forName
delta.upgradeTableProtocol(1, 3) # upgrades to readerVersion=1, writerVersion=3
Scala
import io.delta.tables.DeltaTable
val delta = DeltaTable.forPath(spark, "path_to_table") // or DeltaTable.forName
delta.upgradeTableProtocol(1, 3) // upgrades to readerVersion=1, writerVersion=3

重要!
プロトコルのアップデートは不可逆であり、Delta Lakeの新機能を利用するなどで必要な場合には特定のテーブルのみをアップグレードすることをお勧めします。

プロトコルバージョンでサポートされる機能

機能 minWriterVersion minReaderVersion 導入バージョン ドキュメント
基本機能 2 1 - Delta Lake guide
CHECK制約 3 1 Databricks Runtime 7.4 (未サポート) CHECK constraint
チェンジデータフィード 4 1 Databricks Runtime 8.4 (未サポート) Change data feed
ジェネレーテッドカラム 4 2 Databricks Runtime 8.3 (未サポート) ジェネレーテッドカラムを使う
カラムマッピング 5 2 Databricks Runtime 10.2 Delta column mapping

Databricks 無料トライアル

Databricks 無料トライアル