Databricks での行追跡
行トラッキングを使用すると、 Databricksテーブル内の行レベルのリネージを追跡できます。 マテリアライズドビューの一部の増分更新には、この機能が必要です。
すべての Apache Iceberg v3 テーブルには行追跡が含まれています。Delta Lake テーブルの場合、行トラッキングを明示的に有効にする必要があります。
行トラッキングは、Databricks Runtime 14.1 以降で利用できます。
行トラッキングはテーブル機能であり、一部のクライアントよりも高度なテーブル ライター プロトコルを使用します。テーブル プロトコルのバージョンをダウングレードすることはできず、行トラッキングが有効になっているテーブルは、有効になっているすべてのライター プロトコル テーブル機能をサポートしていないクライアントからは書き込みできません。Delta Lake 機能の互換性とプロトコルを参照してください。
Deltaテーブルで行追跡を有効にする
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 と行コミットバージョンが自動的に割り当てられます。 このプロセスでは、テーブルの複数の新しいバージョンが作成される可能性があり、かなりの時間がかかる可能性があります。
テーブルを複製すると別の履歴が作成されるため、複製されたテーブルの行 ID と行コミット バージョンは元のテーブルの行 ID と行コミット バージョンと一致しなくなります。
行追跡メタデータ フィールドのスキーマは何ですか?
行追跡は、2 つの非表示のメタデータ フィールドをテーブルに追加します。 これらのフィールドをクエリに明示的に追加して、値を返すことができます。
列名 | タイプ | 値 | 説明 |
|---|---|---|---|
| Long | ローの一意の識別子。 |
|
| Long | ローが最後に挿入または更新された Delta ログまたはテーブルのバージョン。 | ローは、 |
一部の操作では、トランザクションログを使用してこれらのメタデータフィールドを保存します。 行追跡が有効になっているテーブルで OPTIMIZE または REORG 操作を実行すると、データファイルがこれらのフィールドを格納するように書き換えられます。
Deltaテーブルでの行追跡を無効にする
Delta Lake テーブルで行追跡を無効にするには、テーブル プロパティをfalseに設定します。
ALTER TABLE table_name SET TBLPROPERTIES (delta.enableRowTracking = false);
行トラッキングを無効にしても、対応するテーブル機能は削除されず、テーブル プロトコルのバージョンもダウングレードされません。また、ターゲット テーブルからメタデータ フィールドも削除されません。
行追跡を無効にすると、生成された行 ID は一意の行を追跡するための信頼性がなくなります。
制限
変更データフィードの読み取り中は、行 ID および行コミット バージョンのメタデータ フィールドにアクセスできません。 DatabricksでのDelta Lake変更データフィードの使用」を参照してください。