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

Delta Lake の行追跡を使用すると、Azure Databricks で、Delta テーブル内の行レベルのデータ系列を追跡できます。 この機能は、具体化されたビューの一部の増分更新に必要です。

重要

Delta Lake の行追跡は、Databricks Runtime 14.1 以降で使用できます。

行追跡はテーブル機能であり、一部の Delta Lake クライアントよりも高度なテーブル ライター プロトコルを使用します。 テーブル プロトコルのバージョンをダウングレードすることはできません。また、行追跡が有効になっているテーブルは、有効になっている Delta ライター プロトコル テーブル機能をすべてサポートしていない Delta Lake クライアントでは書き込みすることができません。 「Azure 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 つのメタデータ フィールドがテーブルに追加されます。 これらのフィールドをクエリに明示的に追加して、値を返すことができます。

列名 Type 説明
_metadata.row_id Long 行の一意識別子。 MERGE または UPDATE ステートメントを使用して行を変更しても、同じ ID が保持されます。
_metadata.row_commit_version Long 行が最後に挿入または更新されたときの Delta ログまたはテーブルのバージョン。 MERGE または UPDATE ステートメントを使用して行を変更するたびに、行に新しいバージョンが割り当てられます。

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

行追跡を無効にする

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

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

重要

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

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

制限事項

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