Databricks Runtime 14.0以降で利用可能で、行トラッキングは各行に安定した行IDと行コミットバージョンを割り当て、行レベルの系譜追跡を可能にします。 増分更新が必要な具体化されたビューには、この機能が必要です。
すべての Apache Iceberg v3 テーブルには、行の追跡が含まれています。 Apache Iceberg v3 機能の使用を参照してください。 Delta Lake テーブルの場合は、行の追跡を明示的に有効にする必要があります。
Note
行追跡を有効にすると、テーブル ライター プロトコルがアップグレードされ、外部の Delta Lake クライアントとの互換性に影響する可能性があります。 Delta Lake の機能の互換性とプロトコルに関する記事を参照してください。
Delta Lake テーブルで行追跡を有効にする
Delta Lake テーブルで行の追跡を有効にするには、テーブルの作成時にテーブル プロパティ delta.enableRowTracking = true を設定します。
CREATE TABLE table_name
TBLPROPERTIES (delta.enableRowTracking = true)
AS SELECT * FROM source_table;
既存の Delta Lake テーブルで行の追跡を有効にするには、次の例を使用します。
ALTER TABLE table_name SET TBLPROPERTIES (delta.enableRowTracking = true);
重要
既存のテーブルに対して行追跡を有効にすると、テーブル内のすべての行に、行 ID と行コミット バージョンが自動的に割り当てられます。 このプロセスにより、テーブルの複数の新しいバージョンが作成され、完了するまでにかなりの時間がかかる場合があります。
Warning
テーブルが構造化ストリーミング ワークロードなどの継続的書き込みのターゲットである場合は、行の追跡を有効にする前に書き込み操作を一時停止し、操作の完了後に再開します。
ALTER TABLEを使用して行追跡を有効にすると、テーブルのメタデータが更新され、その操作の実行中は同時実行中の書き込み操作がMetadataChangedExceptionで失敗します。
競合の例外を参照してください。
テーブルを複製すると、別の履歴が作成されるため、複製されたテーブルの行 ID と行コミット バージョンは、元のテーブルの行 ID と一致しません。
メタデータ フィールド
行追跡により、非表示の 2 つのメタデータ フィールドがテーブルに追加されます。 これらのフィールドをクエリに明示的に追加して、値を返すことができます。
| 列名 | タイプ | Values | 説明 |
|---|---|---|---|
_metadata.row_id |
Long | 行のユニーク識別子。 |
MERGE または UPDATE ステートメントを使用して行を変更しても、同じ ID が保持されます。 |
_metadata.row_commit_version |
Long | 行が最後に挿入または更新されたときの Delta ログまたはテーブルのバージョン。 |
MERGE または UPDATE ステートメントを使用して行を変更するたびに、行に新しいバージョンが割り当てられます。 |
一部の操作では、トランザクション ログを使用してこれらのメタデータ フィールドが格納されます。 行追跡が有効になっているテーブルで OPTIMIZE または REORG 操作を実行すると、これらのフィールドを格納するためにデータ ファイルが書き換えられます。
Delta Lake テーブルの行追跡を無効にする
Delta Lake テーブルの行追跡を無効にするには、テーブル プロパティを false に設定します。
ALTER TABLE table_name SET TBLPROPERTIES (delta.enableRowTracking = false);
重要
行追跡を無効にしても、対応するテーブル機能は削除されないため、テーブル プロトコルのバージョンはダウングレードされません。 また、ターゲット テーブルからメタデータ フィールドは削除されません。 テーブル機能を完全に削除し、プロトコルをダウングレードするには、 DROP FEATUREを使用します。
Delta Lake テーブル機能の削除とテーブル プロトコルのダウングレードに関する記事を参照してください。
行の追跡を無効にした後、生成された行 ID は、一意の行を追跡するための信頼性がなくなりました。
Limitations
変更データ フィードの読み取り中は、行 ID と行コミット バージョンのメタデータ フィールドにアクセスできません。 Azure Databricksでの変更データ フィードの使用を参照してください。