リネージ システムテーブル リファレンス
プレビュー
このシステムテーブルは パブリック プレビュー段階です。 テーブルにアクセスするには、 system
カタログでスキーマを有効にする必要があります。 詳細については、「 システムテーブル スキーマを有効にする」を参照してください。
この記事では、2つのリネージシステムテーブルの概要を説明します。 これらのシステムテーブルは、Unity Catalog のデータリネージ機能に基づいて構築されているため、リネージデータをプログラムでクエリして、意思決定とレポート作成を促進することができます。
どちらのリネージテーブルも、すべての読み取り/書き込みイベントのサブセットを表しており、常にリネージをキャプチャできるとは限りません。 レコードは、リネージが推論できる場合にのみ出力されます。
テーブル リネージテーブル
テーブル リネージ システムテーブルには、 Unity Catalog テーブルまたはパス上の各読み取りイベントまたは書き込みイベントのレコードが含まれています。 これには、ジョブの実行、ノートブックの実行、および読み取りまたは書き込みイベントで更新されたダッシュボードが含まれますが、これらに限定されません。
テーブルパス :このシステムテーブルは system.access.table_lineage
にあります。
Table リネージ スキーマ
テーブル リネージ システムテーブルは、次のスキーマを使用します。
列名 | データ型 | 説明 | 例 |
---|---|---|---|
| string | DatabricksアカウントのID。 |
|
| string | Unity Catalogメタストアの ID。 |
|
| string | ワークスペースのID |
|
| string | リネージ取引が取得されたエンティティのタイプ。 値は、 |
|
| string | リネージ取引が取得されたエンティティの ID。 |
|
| string | エンティティの一意の実行を示す ID、または |
|
| string | ソース・テーブルを識別するための 3 つの部分からなる名前。 |
|
| string | ソース・テーブルのカタログ。 |
|
| string | ソーステーブルのスキーマ。 |
|
| string | ソース・テーブルの名前。 |
|
| string | ソース テーブルのクラウド ストレージ内の場所、またはクラウド ストレージから直接読み取っている場合はパス。 |
|
| string | ソースのタイプ。 値は |
|
| string | ターゲット・テーブルを識別するための 3 部構成の名前。 |
|
| string | ターゲット・テーブルのカタログ。 |
|
| string | ターゲットテーブルのスキーマ。 |
|
| string | ターゲット テーブルの名前。 |
|
| string | ターゲット テーブルのクラウド ストレージ内の場所。 |
|
| string | ターゲットのタイプ。 値は |
|
| string | このリネージを生成したユーザーです。 これは、 Databricks ユーザー名、 Databricks サービスプリンシパル ID、「System-User」、またはユーザー情報を取得できない場合は |
|
| タイムスタンプ | リネージが生成されたときのタイムスタンプ。 タイムゾーン情報は、 |
|
| 日付 | リネージが生成された日付。 これはパーティション分割された列です。 |
|
コラムリネージテーブル
リネージ テーブル列には、ソースがないイベントは含まれません。 たとえば、明示的な値を使用して列に挿入した場合、その列はキャプチャされません。列を読み取ると、出力を書き込むかどうかに関係なく、列がキャプチャされます。カラムリネージはDLTではサポートされていません。
テーブルパス :このシステムテーブルは system.access.column_lineage
にあります。
Column リネージ スキーマ
列リネージ システムテーブルは、次のスキーマを使用します。
列名 | データ型 | 説明 | 例 |
---|---|---|---|
| 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」、またはユーザー情報を取得できない場合は |
|
| タイムスタンプ | リネージが生成されたときのタイムスタンプ。 タイムゾーン情報は、 |
|
| 日付 | リネージが生成された日付。 これはパーティション分割された列です。 |
|
Reading リネージ システムテーブル
リネージシステムテーブルを分析する際には、以下の考慮事項に注意してください。
entity_type
の場合、Databricks は DLT、ノートブック、ジョブ、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
を使用してクエリをフィルタリングする必要があります。たとえば、次のクエリは、外部テーブルのすべてのリネージレコードをプルします。
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"))