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