Delta テーブルの行追跡を使用する
Delta Lake行追跡により、DatabricksDeltaテーブル内の行レベルのリネージを追跡できます。この機能は、マテリアライズド・ビューの一部の増分更新に必要です。
Delta Lake の行追跡は、Databricks Runtime 14.1 以降で使用できます。
行追跡はテーブル機能であり、一部の Delta Lake クライアントよりも高いテーブル書き込みプロトコルを使用します。 テーブル プロトコル バージョンはダウングレードできず、行追跡が有効になっているテーブルは、有効な Delta ライター プロトコル テーブル機能をすべてサポートしていない Delta Lake クライアントでは書き込むことができません。 「Databricks で Delta Lake 機能の互換性を管理する方法」を参照してください。
行追跡を有効にする
テーブルプロパティ delta.enableRowTracking = true
を設定して、行追跡を明示的に有効にする必要があります。
これは、次の例のように、テーブルの作成時に行うことができます。
CREATE TABLE table_name
TBLPROPERTIES (delta.enableRowTracking = true)
AS SELECT * FROM source_table;
次の例のように、既存のテーブルを変更して行追跡を有効にすることができます。
ALTER TABLE table_name SET TBLPROPERTIES (delta.enableRowTracking = true);
既存のテーブルで行追跡を有効にすると、テーブル内のすべての既存の行に行 ID と行コミットバージョンが自動的に割り当てられます。 このプロセスでは、テーブルの複数の新しいバージョンが作成される可能性があり、かなりの時間がかかる可能性があります。
Delta テーブルを複製すると、別の履歴が作成されるため、複製されたテーブルの行 ID と行コミット バージョンは、元のテーブルのものと一致しません。
行追跡メタデータ フィールドのスキーマは何ですか?
行追跡は、2 つの非表示のメタデータ フィールドをテーブルに追加します。 これらのフィールドをクエリに明示的に追加して、値を返すことができます。
列名 | タイプ | 値 | 説明 |
---|---|---|---|
| Long | ローの一意の識別子。 |
|
| Long | ローが最後に挿入または更新された Delta ログまたはテーブルのバージョン。 | ローは、 |
一部の操作では、トランザクションログを使用してこれらのメタデータフィールドを保存します。 行追跡が有効になっているテーブルで OPTIMIZE
または REORG
操作を実行すると、データファイルがこれらのフィールドを格納するように書き換えられます。
行追跡を無効にする
行の追跡を無効にするには、 table プロパティを false
に設定します。
ALTER TABLE table_name SET TBLPROPERTIES (delta.enableRowTracking = false);
行追跡を無効にしても、対応するテーブル機能は削除されず、テーブルプロトコルのバージョンはダウングレードされません。 また、ターゲットテーブルからメタデータフィールドも削除されません。
行追跡を無効にすると、生成された行 ID は一意の行を追跡するための信頼性がなくなります。
制限
行IDおよび行コミットバージョンのメタデータフィールドは、チェンジデータフィードの読み取り中にアクセスできません。 DatabricksでのDelta Lake チェンジデータフィードの使用 を参照してください。