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 変更データ フィードを使用する」を参照してください。