Databricks Runtime 14.1 以降で使用できる行追跡では、各行に安定した行 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での変更データ フィードの使用を参照してください。