データパイプラインが複雑化すると、「あるテーブルを変更したら下流のどこに影響するか」「ゴールドテーブルの数値は どのソースカラムから導出されたか」という問いに即座に答えられる仕組みが不可欠になります。 Unity Catalog Lineageは、Databricks上で実行されるSparkジョブのテーブル間・カラム間の依存関係を 自動的に記録し、UIとAPIの両面で可視化・照会できる機能です。
この記事では、Lineageの仕組み、UIでの視覚化方法、Information Schemaビュー、REST APIでのプログラム取得、 カラムレベルリネージの詳細、影響分析の実務手順、そしてDatabricks認定試験での出題ポイントを整理します。
データ系譜とは、データがどこから来て、どのように変換され、どこに格納されたかの追跡記録です。 Unity Catalog Lineageは、Sparkジョブが読み取ったテーブル(上流)と書き込んだテーブル(下流)の関係を 自動的にキャプチャします。ETLコードに特別なアノテーションを加える必要はありません。
このように3層の情報が自動的に蓄積されることで、データガバナンスと障害調査の両方が効率化されます。
最も直感的な確認方法は、Data Explorer(Catalog Explorer)のUIです。 テーブルの詳細ページで「Lineage」タブを開くと、上流テーブル(読み取り元)と下流テーブル(書き込み先)が 有向グラフとして表示されます。
UIは非技術者との共有にも適しており、「このレポートの数値はどこから来ているか」を ビジネスユーザーに説明する際にも活用できます。
プログラム的にLineage情報を取得したい場合、Information Schemaの専用ビューが便利です。 Unity CatalogのInformation Schemaはsystem.information_schemaに格納されています。
-- テーブルレベルのリネージ: どのテーブルがどのテーブルに依存しているか
SELECT
source_table_full_name,
target_table_full_name,
event_type, -- READ / WRITE
created_by, -- 実行ユーザー
event_time
FROM system.access.table_lineage
WHERE target_table_full_name = 'prod.gold.daily_revenue'
ORDER BY event_time DESC
LIMIT 50;
-- カラムレベルのリネージ: 特定カラムの算出元を逆引き
SELECT
source_table_full_name,
source_column_name,
target_table_full_name,
target_column_name,
event_time
FROM system.access.column_lineage
WHERE target_table_full_name = 'prod.gold.daily_revenue'
AND target_column_name = 'total_amount'
ORDER BY event_time DESC;system.access.table_lineageはテーブル単位の依存を、system.access.column_lineageはカラム単位の依存を提供します。 これらのビューへのアクセスにはメタストア管理者またはアカウント管理者の権限が必要です。
CI/CDパイプラインや外部ガバナンスツールとの統合にはREST APIが最適です。 Unity Catalog APIの/lineage-trackingエンドポイントを使います。
# テーブルの上流リネージを取得
GET /api/2.1/unity-catalog/lineage-tracking/table-lineage
?table_name=prod.gold.daily_revenue
&direction=UPSTREAM
# レスポンス例(簡略化)
{
"upstreams": [
{
"tableInfo": {
"name": "prod.silver.orders",
"catalog_name": "prod",
"schema_name": "silver"
},
"notebookInfos": [
{
"notebook_id": "12345",
"workspace_id": "67890"
}
]
}
]
}
# カラムレベルの上流リネージを取得
GET /api/2.1/unity-catalog/lineage-tracking/column-lineage
?table_name=prod.gold.daily_revenue
&column_name=total_amountREST APIではdirectionパラメータでUPSTREAM(上流)とDOWNSTREAM(下流)を 切り替えられます。影響分析にはDOWNSTREAM、根本原因調査にはUPSTREAMを使います。
カラムレベルリネージは、テーブルレベルより粒度の細かい追跡です。 Sparkが実行する論理プラン(Catalyst Optimizer経由)を解析して、 入力カラムから出力カラムへの変換経路を導出します。
| 対応する変換 | カラムリネージの挙動 |
|---|---|
| SELECT a, b FROM ... | 1対1のマッピングとして記録 |
| SELECT a + b AS total FROM ... | a, b → total の多対1マッピング |
| JOIN ON t1.id = t2.id | 両テーブルのカラムから出力カラムへのマッピング |
| UDF(ユーザー定義関数) | 入力カラム → 出力カラム(UDF内部のロジックは不透明) |
| ウィンドウ関数(RANK, ROW_NUMBER) | パーティションキーとオーダーキーからの依存 |
UDFの内部ロジックはSparkの論理プランでは解析できないため、カラムリネージは 「UDFの入力カラム → UDFの出力カラム」のレベルで記録されます。UDF内部でどのカラムが 実際に使われたかは区別できない点に注意してください。
影響分析とは、「あるテーブルやカラムを変更した場合、下流のどのテーブル・ダッシュボード・ジョブに影響するか」 を事前に洗い出す作業です。Lineageを使った手順は以下の通りです。
-- 影響分析: silver.ordersを変更した場合の下流テーブルを洗い出し
SELECT DISTINCT
target_table_full_name,
target_column_name
FROM system.access.column_lineage
WHERE source_table_full_name = 'prod.silver.orders'
AND source_column_name = 'amount'
ORDER BY target_table_full_name;
-- 結果例:
-- prod.gold.daily_revenue | total_amount
-- prod.gold.customer_summary | lifetime_value
-- prod.gold.monthly_report | gross_salesこの結果から、silver.orders.amountカラムの型変更やリネーム時に 3つのGoldテーブルの再検証が必要だと分かります。
Data Engineer Professional
問題 1
データエンジニアがSilver層のordersテーブルのamountカラムの型をDECIMAL(10,2)からDECIMAL(18,4)に変更しようとしている。変更前に、このカラムに依存する下流テーブルを網羅的に洗い出したい。最も適切な方法はどれか。
正解: A
column_lineageビューはカラム単位の依存関係を記録しており、特定カラムに依存する下流テーブル・カラムを正確に洗い出せます。grepはコード検索であり実行時の依存関係は把握できません。スキーマタブは当該テーブルの構造表示のみで下流は分かりません。DESCRIBE HISTORYは変更履歴であり下流依存とは無関係です。
Unity Catalog Lineageはどの粒度まで系譜を追跡しますか?
テーブルレベルとカラムレベルの両方を追跡します。テーブルレベルでは「テーブルAがテーブルBに書き込まれた」という依存関係を記録し、カラムレベルでは「テーブルAのcolumn_xがテーブルBのcolumn_yの算出に使われた」という変換経路まで可視化できます。カラムレベルリネージはSpark SQLやDataFrame APIの変換を解析して自動的に構築されます。
Lineage情報のプログラム的な取得方法は?
3つの方法があります。(1) Data Explorer UIのグラフ表示、(2) Information SchemaのTABLE_LINEAGEビューとCOLUMN_LINEAGEビューへのSQLクエリ、(3) Unity Catalog REST APIの/lineage-trackingエンドポイントです。自動化やCI/CDに組み込む場合はREST APIが最も適しており、アドホックな調査にはUIまたはSQLが便利です。
Lineage機能を使うための前提条件は?
Unity Catalogが有効なワークスペースでPremium以上のプランが必要です。Lineageの記録はUnity Catalogに登録されたテーブル・ビューに対して自動的に行われ、追加設定は不要です。ただし、外部ツール(Airflow等)から直接クラウドストレージに書き込む処理はLineageに反映されません。Databricks上で実行されたSparkジョブのみが追跡対象です。
NicheeLab編集部
データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。
Databricks資格一覧|全7試験・難易度・勉強法
Databricks認定資格全7試験の一覧・難易度・出題範囲・合格ラインを徹底解説。2026年最新版の公式試験ガイドに準...
Databricks試験の難易度ランキング|全7資格を徹底比較
Databricks認定全7試験の難易度をランキング形式で徹底比較。合格率・学習時間・出題傾向から難易度を分析。...
Databricks資格の勉強方法|最短合格ルートと学習時間の目安
Databricks認定資格に最短で合格するための勉強方法を完全ガイド。公式リソース・問題集・学習スケジュールを徹底解説...
Databricks Data Engineer Associate完全解説|出題範囲・問題例・合格戦略
Databricks Certified Data Engineer Associate試験を徹底解説。5つの出題ドメイ...
Databricks Data Engineer Professional完全解説|上級試験の攻略法
Databricks Certified Data Engineer Professional試験を徹底解説。10の出題...