リネージ システムテーブルリファレンス
プレビュー
このシステムテーブルは パブリック プレビュー段階です。 テーブルにアクセスするには、 system
カタログでスキーマを有効にする必要があります。 詳細については、「 システムテーブル スキーマを有効にする」を参照してください。
この記事では、2 つのリネージシステム テーブルの概要について説明します。 これらのシステムテーブルは、Unity Catalog の データリネージ機能に基づいて構築されているため、リネージデータをプログラムでクエリして、意思決定やレポートを促進することができます。
注:
両方のリネージ テーブルは、リネージを常にキャプチャできるとは限らないため、すべての読み取り/書き込みイベントのサブセットを表します。 リネージが推測できる場合にのみレコードが出力されます。
テーブル リネージ テーブル
テーブル リネージ システムテーブルには、 Unity Catalogテーブルまたはパスの各読み取りイベントまたは書き込みイベントのレコードが含まれます。 これには、ジョブの実行、ノートブックの実行、読み取りまたは書き込みイベントで更新されたダッシュボードなどが含まれますが、これらに限定されません。
テーブルパス:このシステムテーブルは system.access.table_lineage
にあります。
列リネージテーブル
列 リネージ テーブルには、ソースがないイベントは含まれません。 たとえば、明示的な値を使用して列に挿入すると、その列はキャプチャされません。 列を読み取ると、出力を書き込むかどうかに関係なくキャプチャされます。 列 リネージ はDelta Live Tablesではサポートされていません。
テーブルパス:このシステムテーブルは system.access.column_lineage
にあります。
リネージシステムテーブルスキーマ
リネージ システムテーブルは次のスキーマを使用します。 テーブル リネージ スキーマにはsource_column_name
とtarget_column_name
が含まれていません。
列名 |
データ型 |
説明 |
例 |
---|---|---|---|
|
string |
Databricks アカウントの ID。 |
|
|
string |
Unity Catalogメタストアの ID。 |
|
|
string |
ワークスペースのID |
|
|
string |
リネージ トランザクションがキャプチャされたエンティティのタイプ。 値は、 |
|
|
string |
リネージトランザクションがキャプチャされたエンティティの ID。 |
|
|
string |
エンティティの一意の実行を記述する ID、または
|
|
|
string |
ソース テーブルを識別する 3 つの部分からなる名前。 |
|
|
string |
ソース テーブルのカタログ。 |
|
|
string |
ソース テーブルのスキーマ。 |
|
|
string |
ソース テーブルの名前。 |
|
|
string |
ソース テーブルのクラウド ストレージ内の場所、またはクラウド ストレージから直接読み取る場合はパス。 |
|
|
string |
ソースのタイプ。 値は |
|
|
string |
ソース列の名前。 |
|
|
string |
ターゲット表を識別するための 3 部構成の名前。 |
|
|
string |
ターゲット表のカタログ。 |
|
|
string |
ターゲット表のスキーマ。 |
|
|
string |
ターゲット表の名前。 |
|
|
string |
ターゲット テーブルのクラウド ストレージ内の場所。 |
|
|
string |
ターゲットのタイプ。 値は |
|
|
string |
ターゲットカラムの名前。 |
|
|
string |
このリネージを生成したユーザー。 これは、 Databricksユーザー名、 Databricksサービスプリンシパル ID、「System-User」、またはユーザー情報を取得できない場合は |
|
|
timestamp |
リネージが生成されたタイムスタンプ。 タイムゾーン情報は値の末尾に記録され、 |
|
|
日付 |
リネージが生成された日付。 これはパーティション分割された列です。 |
|
リネージシステムテーブルの読み取り
リネージシステムテーブルを分析する際には、以下の考慮事項に注意してください。
entity_type
の場合、Databricks は Delta Live Tables、ノートブック、ジョブ、Databricks SQL クエリ、およびダッシュボードをサポートします。 他のエンティティからのイベントはサポートされていません。entity_type
がnull
として表示される場合、イベントに Databricks エンティティが関与していないことを意味します。 たとえば、JDBC クエリの結果である場合や、ユーザーが Databricks UI の[サンプル データ]タブをクリックした場合などが考えられます。イベントが読み取りか書き込みかを判断するには、ソース タイプとターゲット タイプを表示します。
読み取り専用: ソース タイプは null ではありませんが、ターゲット タイプは null です。
書き込み専用: ターゲット タイプは null ではありませんが、ソース タイプは null です。
読み取りと書き込み: ソース タイプとターゲット タイプが null ではありません。
リネージシステムテーブルの例
リネージがシステムテーブルに記録される方法の例として、次のクエリの例と、そのクエリによって作成されるリネージ レコードを示します。
CREATE OR REPLACE TABLE car_features
AS SELECT *, in1+in2 as premium_feature_set
FROM car_features_exterior
JOIN car_features_interior
USING(id, model);
system.access.table_lineage
のレコードは次のようになります。
|
|
|
|
|
|
---|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
system.access.column_lineage
のレコードは次のようになります。
|
|
|
|
|
|
|
---|---|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
注:
上記の例では、すべてのリネージ列が表示されているわけではありません。 完全なスキーマについては、上記のリネージ スキーマを参照してください。
外部テーブル照会のトラブルシューティング
クラウド・ストレージ・パスを使用して外部テーブルを参照する場合、関連付けられたリネージレコードにはパス名のみが含まれ、表名は含まれません。 たとえば、このクエリーのリネージレコードには、テーブル名ではなくパス名が含まれます。
SELECT * FROM delta.`s3://mybucket/table1`;
パスによって参照される外部テーブルのリネージ レコードをクエリする場合は、 source_table_full_name
またはtarget_table_full_name
ではなく、 source_path
またはtarget_path
を使用してクエリをフィルターする必要があります。 たとえば、次のクエリは外部テーブルのすべての RINAJI レコードを取得します。
SELECT *
FROM system.access.table_lineage
WHERE
source_path = "s3://mybucket/table1" OR
target_path = "s3://mybucket/table1";
例: 外部テーブル名に基づくリネージ・レコードの取得
リネージを見つけるためにクラウドストレージのパスを手動で取得したくない場合は、次の関数を使用してテーブル名を使用してリネージのデータを取得できます。 列リネージをクエリする場合は、関数内のsystem.access.table_lineage
をsystem.access.column_lineage
に置き換えることもできます。
def getLineageForTable(table_name):
table_path = spark.sql(f"describe detail {table_name}").select("location").head()[0]
df = spark.read.table("system.access.table_lineage")
return df.where(
(df.source_table_full_name == table_name)
| (df.target_table_full_name == table_name)
| (df.source_path == table_path)
| (df.target_path == table_path)
)
次に、次のコマンドを使用して関数を呼び出し、外部テーブルのリネージ レコードを表示します。
display(getLineageForTable("table_name"))