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

プレビュー

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

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

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

  • system.access.table_lineage

  • system.access.column_lineage

注:

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

テーブル リネージ テーブル

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

列リネージテーブル

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

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

リネージ システムテーブルは次のスキーマを使用します。 テーブル リネージ スキーマにはsource_column_nametarget_column_nameが含まれていません。

列名

データ型

説明

account_id

string

Databricks アカウントの ID。

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

metastore_id

string

Unity Catalogメタストアの ID。

5a31ba44-bbf4-4174-bf33-e1fa078e6765

workspace_id

string

ワークスペースのID

123456789012345

entity_type

string

リネージ トランザクションがキャプチャされたエンティティのタイプ。 値は NOTEBOOKJOBPIPELINEDBSQL_DASHBOARDDBSQL_QUERYNULLです。

NOTEBOOK

entity_id

string

リネージトランザクションがキャプチャされたエンティティの 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

string

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

  • 作家: コマンド

  • ジョブ: ジョブ

  • Databricks SQL クエリ: query_run_id

  • Databricks SQL ダッシュボード: query_run_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

string

ソース テーブルを識別する 3 つの部分からなる名前。

catalog.schema.table

source_table_catalog

string

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

catalog

source_table_schema

string

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

catalog.schema

source_table_name

string

ソース テーブルの名前。

table

source_path

string

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

gs://mybucket/table1

source_type

string

ソースのタイプ。 値は TABLEPATHVIEW、または STREAMING_TABLEです。

TABLE

source_column_name

string

ソース列の名前。

date

target_table_full_name

string

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

catalog.schema.table

target_table_catalog

string

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

catalog

target_table_schema

string

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

catalog.schema

target_table_name

string

ターゲット表の名前。

table

target_path

string

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

gs://mybucket/table1

target_type

string

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

TABLE

target_column_name

string

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

date

created_by

string

このリネージを生成したユーザー。 これは、 Databricksユーザー名、 Databricksサービスプリンシパル ID、「System-User」、またはユーザー情報を取得できない場合は NULL になります。

crampton.rods@email.com

event_time

timestamp

リネージが生成されたタイムスタンプ。

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.`gcp://mybucket/table1`;

パスによって参照される外部テーブルのリネージ レコードをクエリする場合は、 source_table_full_nameまたはtarget_table_full_nameではなく、 source_pathまたはtarget_pathを使用してクエリをフィルターする必要があります。 たとえば、次のクエリは外部テーブルのすべての RINAJI レコードを取得します。

SELECT *
FROM system.access.table_lineage
WHERE
  source_path = "gs://mybucket/table1" OR
  target_path = "gs://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"))