Deltaテーブルに行追跡を使用する

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

重要

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 と行コミット バージョンは元のテーブルの行 ID と行コミット バージョンと一致しなくなります。

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

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

列名

タイプ

説明

_metadata.row_id

Long

ローの一意の識別子。

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

_metadata.row_commit_version

Long

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

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

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

行追跡を無効にする

行の追跡を無効にするには、 table プロパティを falseに設定します。

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

重要

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

行追跡を無効にすると、生成された行 ID は一意の行を追跡するための信頼性がなくなります。

制限事項

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