リネージ システム テーブルのリファレンス

プレビュー

この機能はパブリックプレビュー段階です。

この記事では、2 つのリネージシステム テーブルの概要について説明します。 これらのシステムテーブルは、Unity Catalog の データリネージ機能に基づいて構築されているため、リネージデータをプログラムでクエリして、意思決定やレポートを促進することができます。

次の 2 つのリネージ・システム・テーブルがあります。

  • system.access.table_lineage

  • system.access.column_lineage

どちらの系列テーブルも、系列を常にキャプチャできるとは限らないため、すべての読み取り/書き込みイベントのサブセットを表します。 レコードは、系列を推測できる場合にのみ出力されます。

表の系統表

テーブル系列システム テーブルには、 Unity Catalog テーブルまたはパス上の各読み取りまたは書き込みイベントのレコードが含まれます。 これには、ジョブの実行、ノートブックの実行、読み取りまたは書き込みイベントで更新されたダッシュボードが含まれますが、これらに限定されません。

列系列テーブル

列系列テーブルには、ソースを持たないイベントは含まれません。 たとえば、明示的な値を使用して列に挿入した場合、その列はキャプチャされません。 列を読み取ると、出力を書き込むかどうかに関係なくキャプチャされます。 列の系列は Delta Live Tablesではサポートされていません。

リネージシステムテーブルスキーマ

系列システム テーブルでは、次のスキーマを使用します。 テーブル系列スキーマには、 source_column_nametarget_column_nameは含まれません。

列名

データ型

説明

account_id

文字列

Databricks アカウントの ID。

7af234db-66d7-4db3-bbf0-956098224879

metastore_id

文字列

Unity Catalog メタストアの ID。

5a31ba44-bbf4-4174-bf33-e1fa078e6765

workspace_id

文字列

ワークスペースの ID

123456789012345

entity_type

文字列

系列トランザクションがキャプチャされたエンティティーのタイプ。 値は NOTEBOOKJOBPIPELINEDBSQL_DASHBOARDDBSQL_QUERY、または NULLです。

NOTEBOOK

entity_id

文字列

系列トランザクションがキャプチャされたエンティティの ID。 entity_typeNULLの場合、entity_idNULLです。

  • ノートブック: 23098402394234

  • ジョブ: 23098402394234

  • Databricks SQL クエリー: e9cd8a31-de2f-4206-adfa-4f6605d68d88

  • Databricks SQL ダッシュボード: e9cd8a31-de2f-4206-adfa-4f6605d68d88

  • パイプライン: e9cd8a31-de2f-4206-adfa-4f6605d68d88

entity_run_id

文字列

エンティティの一意の実行を記述する ID、または NULL. これはエンティティタイプごとに異なります。

  • ノートブック: コマンド

  • ジョブ: job_run_id

  • Databricks SQL クエリー: クエリー

  • Databricks SQL ダッシュボード: クエリー

  • パイプライン: pipeline_update_id

entity_typeNULLの場合、entity_run_idNULLです。

  • ノートブック: 23098402394234

  • ジョブ: 23098402394234

  • Databricks SQL クエリー: e9cd8a31-de2f-4206-adfa-4f6605d68d88

  • Databricks SQL ダッシュボード: e9cd8a31-de2f-4206-adfa-4f6605d68d88

  • パイプライン: e9cd8a31-de2f-4206-adfa-4f6605d68d88

source_table_full_name

文字列

ソース テーブルを識別するための 3 部構成の名前。

catalog.schema.table

source_table_catalog

文字列

ソース テーブルのカタログ。

catalog

source_table_schema

文字列

ソース テーブルのスキーマ。

catalog.schema

source_table_name

文字列

ソース テーブルの名前。

table

source_path

文字列

ソース テーブルのクラウド ストレージ内の場所、またはクラウド ストレージから直接読み取る場合はパス。

s3://mybucket/table1

source_type

文字列

ソースの種類。 値は TABLEPATHVIEW、または STREAMING_TABLEです。

TABLE

source_column_name

文字列

ソース列の名前。

date

target_table_full_name

文字列

ターゲット表を識別するための 3 部構成の名前。

catalog.schema.table

target_table_catalog

文字列

ターゲット表のカタログ。

catalog

target_table_schema

文字列

ターゲット表のスキーマ。

catalog.schema

target_table_name

文字列

ターゲット表の名前。

table

target_path

文字列

ターゲットテーブルのクラウドストレージ内の場所。

s3://mybucket/table1

target_type

文字列

ターゲットの種類。 値は TABLEPATHVIEW、または STREAMING TABLEです。

TABLE

target_column_name

文字列

ターゲットカラムの名前。

date

created_by

文字列

この系列を生成したユーザー。 これは、Databricks ユーザー名、Databricks サービスプリンシパル ID、"システム ユーザー"、またはユーザー情報をキャプチャできない場合は NULL にすることができます。

crampton.rods@email.com

event_time

タイムスタンプ

系列が生成されたときのタイムスタンプ。

2023-06-20T19:47:21.194+0000

event_date

日付

系列が生成された日付。 これはパーティション分割された列です。

2023-06-20

リネージシステムテーブルの読み取り

リネージシステムテーブルを分析する際には、以下の考慮事項に注意してください。

  • entity_typeの場合、Databricks は Delta Live Tables、ノートブック、ジョブ、Databricks SQL クエリー、およびダッシュボードをサポートしています。 他のエンティティからのイベントはサポートされていません。

  • entity_typenullと表示されている場合は、イベントに 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 のレコードは次のようになります。

entity_type

entity_id

source_table_name

target_table_name

created_by

event_time

NOTEBOOK

27080565267

car_features_exterior

car_features

crampton@email.com

2023-01-25T16:19:58.908+0000

NOTEBOOK

27080565267

car_features_interior

car_features

crampton@email.com

2023-01-25T16:19:58.908+0000

system.access.column_lineage のレコードは次のようになります。

entity_type

entity_id

source_table_name

target_table_name

source_column_name

target_column_name

event_time

NOTEBOOK

27080565267

car_features_interior

car_features

in1

premium_feature_set

2023-01-25T16:19:58.908+0000

NOTEBOOK

27080565267

car_features_interior

car_features

in2

premium_feature_set

2023-01-25T16:19:58.908+0000

上記の例では、すべての系列列が示されているわけではありません。 完全なスキーマについては、上記の 系列スキーマを参照してください。

外部テーブルのトラブルシューティング クエリー

クラウド・ストレージ・パスを使用して外部表を参照する場合、関連付けられたリネージレコードにはパス名のみが含まれ、表名は含まれません。 たとえば、このクエリーのリネージレコードには、テーブル名ではなくパス名が含まれます。

SELECT * FROM delta.`s3://mybucket/table1`;

path で参照される外部テーブルの リネージ レコードをクエリーしようとしている場合は、source_table_full_nametarget_table_full_nameの代わりに source_pathtarget_path を使ってクエリーをフィルタリングする必要があります。たとえば、次のクエリーは、外部テーブルのすべてのリネージ レコードを取得します。

SELECT *
FROM system.access.table_lineage
WHERE
  source_path = "s3://mybucket/table1" OR
  target_path = "s3://mybucket/table1";

例: 外部テーブル名に基づくリネージ・レコードの取得

リネージを見つけるためにクラウドストレージパスを手動で取得したくない場合は、次の関数を使用して、テーブル名を使用してリネージデータを取得できます。 クエリ列リネージが必要な場合は、関数内の system.access.table_lineagesystem.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"))