メインコンテンツまでスキップ

Databricks の行追跡

行追跡により、Databricksはテーブル内の行レベルのリネージを追跡できます。マテリアライズドビューの一部の増分更新には、この機能が必要です。

すべてのApache Iceberg v3テーブルには行トラッキングが含まれています。Apache Iceberg v3 機能を使用を参照してください。Delta Lake テーブルでは、行トラッキングを明示的に有効にする必要があります。

重要

行トラッキングは、Databricks Runtime 14.1 以降で利用可能です。

行追跡はテーブル機能であり、一部のクライアントよりも高いテーブル書き込みプロトコルを使用します。テーブル プロトコル バージョンはダウングレードできず、行追跡が有効になっているテーブルは、有効なライター プロトコル テーブル機能をすべてサポートしていないクライアントでは書き込むことができません。Delta Lake 機能の互換性とプロトコルを参照してください。

Delta Lake テーブルで行追跡を有効にする

Delta Lake テーブルで行追跡を有効にするには、テーブル作成時に、テーブルプロパティ「delta.enableRowTracking = true」を設定します。

SQL
CREATE TABLE table_name
TBLPROPERTIES (delta.enableRowTracking = true)
AS SELECT * FROM source_table;

既存のDelta Lakeテーブルで行追跡を有効にするには、次の例を使用してください。

SQL
ALTER TABLE table_name SET TBLPROPERTIES (delta.enableRowTracking = true);
重要

既存のテーブルで行追跡を有効にすると、テーブル内のすべての既存の行に行IDと行コミットバージョンが自動的に割り当てられます。この処理では、テーブルの複数の新しいバージョンが作成される可能性があり、かなりの時間を要する場合があります。

テーブルをクローンすると、別の履歴が作成されるため、クローンされたテーブルの行IDと行コミットバージョンは元のテーブルのものと一致しません。

行追跡メタデータフィールドのスキーマとは何ですか?

行追跡はテーブルに2つの非表示のメタデータフィールドを追加します。これらのフィールドをクエリに明示的に追加して、値を返すことができます。

列名

Type

説明

_metadata.row_id

Long

行の一意の識別子です。

行は、MERGEまたはUPDATEステートメントを使用して変更されるたびに、同じIDを保持します。

_metadata.row_commit_version

Long

行が最後に挿入または更新された時点でのDeltaログまたはテーブルのバージョンです。

行は、MERGE または UPDATE ステートメントを使用して変更されるたびに、新しいバージョンが割り当てられます。

一部の操作では、トランザクションログを使用してこれらのメタデータフィールドが格納されます。行追跡が有効になっているテーブルでOPTIMIZEまたはREORGの操作を実行すると、これらのフィールドを格納するためにデータファイルが書き換えられます。

Delta Lake テーブルの行追跡を無効にする

Delta Lakeテーブルで行追跡を無効にするには、テーブルプロパティをfalseに設定します。

SQL
ALTER TABLE table_name SET TBLPROPERTIES (delta.enableRowTracking = false);
重要

行追跡を無効にしても、対応するテーブル機能は削除されず、テーブル プロトコル バージョンもダウングレードされません。ターゲットテーブルからメタデータフィールドも削除されません。

行追跡が無効になっている場合、生成された行IDは一意の行を追跡するために信頼できません。

制限事項:

行IDおよび行コミットバージョンのメタデータフィールドは、チェンジデータフィードの読み取り中にアクセスできません。Databricksでのチェンジデータフィードの使用 を参照してください。