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

Databricks の行追跡

Databricks Runtime 14.1 以降で利用可能な行追跡は、各行に安定した行 ID と行コミットバージョンを割り当て、行レベルのリネージ追跡を可能にします。マテリアライズドビューの一部の増分更新には、この機能が必要です。

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

注記

行追跡を有効にすると、テーブルライタープロトコルがアップグレードされ、外部のDelta Lakeクライアントとの互換性に影響を与える可能性があります。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と行コミットバージョンが自動的に割り当てられます。このプロセスは、テーブルの複数の新しいバージョン作成につながり、完了までにかなりの時間がかかる可能性があります。

警告

テーブルが構造化ストリーミングワークロードなどの連続書き込みのターゲットである場合は、行追跡を有効にする前に書き込み操作を停止し、操作の完了後に再開します。ALTER TABLEを使用して行追跡を有効にすると、テーブルメタデータが更新され、操作期間中、並列書き込み操作がMetadataChangedExceptionで失敗する原因となります。競合例外を参照してください。

テーブルをクローンすると、別の履歴が作成されるため、クローンされたテーブルの行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);
重要

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

行追跡をオフにすると、生成された行IDは一意の行を追跡するのに信頼できなくなります。

制限事項:

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