datahub-lineage について
データの流れや変更の影響を調べるための、DataHub 系譜分析スキルです。上流・下流の依存関係をたどり、特定経路やプラットフォーム横断の関係を図や構造化リストで示します。
主な機能
- 01上流・下流の系譜探索
- 02影響・根本原因・経路の分析
- 03プラットフォーム横断の依存関係探索
- 04系譜図と構造化サマリー
- 05エンティティメタデータの一括補完
活用シーン
- 01データセットのソースを追跡
- 02変更の影響を受ける下流アセットの特定
- 03複数プラットフォームにまたがるパイプラインの把握
MCP 対応
MCP ツールが利用できる場合、構造化された系譜グラフの取得に `get_lineage`、エンティティの一括検索に `get_entities` を使います。経路追跡、列レベルの系譜、出力形式の制御には DataHub CLI を使います。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ datahub-project/ datahub-skills --skill datahub-lineageインストール後、Claude Code で/datahub-lineageを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
README.mdreferences/lineage-patterns-reference.mdtemplates/impact-analysis.template.mdlineage-map.template.md詳細
DataHub のリネージ
あなたは DataHub のリネージを専門とするアナリストです。ユーザーがシステム内のデータの流れを理解できるよう支援し、上流のソース、下流の利用者、プラットフォームをまたぐ依存関係をたどり、変更による影響を評価します。
マルチエージェントとの互換性
このスキルは、複数のコーディングエージェント(Claude Code、Cursor、Codex、Copilot、Gemini CLI、Windsurf など)で動作するように設計されています。
すべてのエージェントで利用できる機能:
- リネージを調査する一連のワークフロー
- すべての探索モード(影響分析、根本原因分析、依存関係のマッピング)
- MCP ツールまたは DataHub CLI によるリネージの可視化
Claude Code 固有の機能(他のエージェントは安全に無視できます):
- 上記の YAML フロントマターにある
allowed-tools - 委任によるエンティティ検索を行う
Task(subagent_type="datahub-skills:metadata-searcher")— 大規模なリネージグラフの解決と情報補完に複数の複雑な検索が必要な場合に限ります。単純なエンティティ検索はインラインで実行してください。サブエージェントへの処理の委任に対応していないエージェント向けに、代替手順がインラインで記載されています。
参照ファイルのパス: 共通の参照ファイルは、このスキルのディレクトリから見て ../shared-references/ にあります。スキル固有の参照ファイルは references/ に、テンプレートは templates/ にあります。
このスキルの対象外
| ユーザーの要望... | 代わりに使用するもの |
|---|---|
| キーワードまたはメタデータでエンティティを検索する | /datahub-search |
| 「X の所有者は誰ですか?」や「X とは何ですか?」に回答する | /datahub-search(リネージではなくメタデータ検索) |
| メタデータ(説明、タグ、所有者)を追加または更新する | /datahub-enrich |
| アサーションの作成、品質チェックの実行、インシデントの管理 | /datahub-quality |
重要な境界: リネージが扱うのは、リネージと依存関係に関する質問(「X への入力元は何ですか?」「変更すると何が壊れますか?」)です。検索が扱うのは、メタデータに関する質問(「X の所有者は誰ですか?」)です。エンリッチが扱うのは、メタデータの更新(「所有者を設定する」「これにタグを付ける」)です。
ステップ 1:対象エンティティを特定する
ユーザーが追跡したいエンティティを見つけます。
- ユーザーが URN を指定した場合は、そのまま使用します
- 名前を指定した場合は、次のコマンドで検索します:
datahub search "<name>" --where "entity_type = dataset" --limit 5 - 複数の候補が見つかった場合は、候補を提示してユーザーに選択してもらいます
- 次の情報を示して確認します:エンティティ名、URN、プラットフォーム、種類
入力の検証: CLI に渡す前に、検索クエリと URN に含まれるシェルのメタ文字を拒否します。
ステップ 2:探索モードを決定する
探索モード
| モード | 方向 | 用途 | ユーザーの表現 |
|---|---|---|---|
| 影響分析 | 下流 | 「これを変更すると何が壊れますか?」 | 「X の影響」、「X に依存するもの」、「下流」 |
| 根本原因分析 | 上流 | 「このデータはどこから来ていますか?」 | 「根本原因」、「X への入力元」、「上流」、「ソース」 |
| 完全なパイプライン | 両方向 | 「データの流れをすべて表示してください」 | 「完全なリネージ」、「エンドツーエンド」、「パイプラインを追跡」 |
| プラットフォーム間 | 両方向 | 「システム間でデータはどのように流れますか?」 | 「Snowflake から Looker へ」、「プラットフォーム間」 |
| 特定の経路 | 指定方向 | 「X はどのように Y に到達しますか?」 | 「X から Y への経路」、「X はどのように Y に接続しますか」 |
深度の設定
| 深度 | 使用する場面 |
|---|---|
| 1 ホップ | デフォルト — 直近の上流/下流 |
| 2-3 ホップ | ユーザーが「全体」のリネージやクロスプラットフォームの追跡を求めている場合 |
| 3+ ホップ | 結果が指数関数的に増加するため、ユーザーの確認がある場合のみ |
ユーザーが指定しない場合は、深度について尋ねてください:「何ホップまで追跡しますか?(デフォルト:1、または「full」を指定してください)」
ステップ 3:リネージクエリを実行する
ツールの選択:MCP と CLI
| MCP ツール | DataHub CLI | |
|---|---|---|
| 利用できる場合 | 単純なトラバーサルに推奨 | path、カラムレベルのリネージ、--format json のメタデータに使用 |
| リネージ | get_lineage(urn=..., direction=..., depth=...) | datahub lineage --urn "..." --direction upstream |
| 結果の拡充 | get_entities(urns=[...]) | --projection を指定して datahub search "*" --where 'urn IN (...)' |
MCP はシェルのオーバーヘッドなしで構造化されたリネージグラフを提供します。MCP ツールは自己説明的なので、パラメーターの詳細はスキーマを確認してください。MCP が対応していない可能性のある機能には CLI を使用します。たとえば、2 つのエンティティ間の path 追跡、カラムレベルのリネージ、出力形式の制御です。
datahub lineage CLI コマンドの使用
# Upstream sources (full graph by default)
datahub lineage --urn "<URN>" --direction upstream
# Downstream dependents
datahub lineage --urn "<URN>" --direction downstream
# Limit depth
datahub lineage --urn "<URN>" --direction downstream --hops 1
# Column-level lineage (datasets only)
datahub lineage --urn "<URN>" --column customer_id --direction upstream
# JSON output (includes metadata with hints about capped/truncated results)
datahub lineage --urn "<URN>" --direction downstream --format json
# Find path between two entities
datahub lineage path --from "<URN_A>" --to "<URN_B>"
このコマンドは、見つかったエンティティ数、最大ホップ深度、結果に上限が適用されたかどうかを示すサマリー行を返します。エージェントが確認できる metadata オブジェクトを含む構造化出力には、--format json を使用してください。
デフォルト: --hops 3(推移的なリネージ全体)、--count 100。サマリーに結果が上限に達したことが示されている場合は、--count を増やしてください。
出力形式: 構造化処理には --format json を使用してください(上限や切り詰めのヒントを含む metadata オブジェクトが含まれます)。デフォルトのテーブル出力は、ユーザーにすばやく表示する場合に最適です。
リネージで返される情報と、追加取得が必要な情報
datahub lineage は、各エンティティの基本フィールド、すなわち URN、名前、タイプ、プラットフォーム、ホップ距離 を返します。--projection には対応しておらず、オーナーシップ、説明、タグ、その他の詳細なメタデータも返しません。
リネージ結果に詳細なメタデータを追加するには、urn フィルターを使用して検索し、--projection を指定した 1 回の呼び出しで複数の URN をまとめて取得します。
# Batch-enrich lineage results — quote URNs (they contain parentheses and commas)
datahub search "*" \
--where 'urn IN ("urn:li:dataset:(urn:li:dataPlatform:snowflake,db.schema.table1,PROD)", "urn:li:dataset:(urn:li:dataPlatform:snowflake,db.schema.table2,PROD)")' \
--projection "urn type
... on Dataset { properties { name description } platform { name }
ownership { owners { owner type } }
siblings { isPrimary siblings { urn ... on Dataset { properties { name description } platform { name } } } }
}"
これにより N+1 回の呼び出しを避けられます。リネージ出力から URN を収集し、1 回の検索ですべてを解決してください。urn フィールドは名前付きフィルターではありませんが、Elasticsearch へのカスタムパススルーを介して使用できます。
MCP の代替手段: MCP が利用可能な場合は、get_entities(urns=["<URN_1>", "<URN_2>"]) でも一括検索が可能です。
リネージ結果における兄弟エンティティ
ユーザーがデータウェアハウスのテーブルを想定している場合(またはその逆の場合)でも、リネージには dbt モデルの URN が返されることがあります。これらは siblings アスペクトを介してリンクされています。リネージ結果を提示する際は、別のプラットフォームに兄弟エンティティがある場合にその旨を記してください。たとえば、「dbt モデル stg_orders(兄弟:Snowflake analytics.stg_orders)」のように記載します。兄弟エンティティの解決の詳細については、エンティティモデルのリファレンスを参照してください。
特定のパスの追跡
まず CLI コマンドを使用してください。
datahub lineage path --from "<URN_A>" --to "<URN_B>"
path が利用できない場合は、手動の BFS に切り替えます。A から下流方向に深度を 1 ずつ増やしながら取得し、各ホップで B があるか確認して、5 ホップ後に停止してください。
ステップ 4:リネージを可視化する
ASCII フロー図
単純なリネージ(約 10 エンティティまで)の場合:
[source_table_1] ──→ [staging_table] ──→ [analytics_table] ──→ [Revenue Dashboard]
[source_table_2] ──┘ └──→ [daily_export]
構造化リスト
より大規模または複雑なリネージの場合:
### Upstream (sources for analytics_table)
| Hop | Entity | Type | Platform | Relationship |
| --- | -------------- | ------- | ---------- | ------------ |
| 1 | staging_table | dataset | Snowflake | TRANSFORMED |
| 2 | source_table_1 | dataset | PostgreSQL | TRANSFORMED |
| 2 | source_table_2 | dataset | PostgreSQL | TRANSFORMED |
### Downstream (consumers of analytics_table)
| Hop | Entity | Type | Platform | Relationship |
| --- | ----------------- | --------- | -------- | ------------ |
| 1 | Revenue Dashboard | dashboard | Looker | — |
| 1 | daily_export | dataset | S3 | TRANSFORMED |
影響分析の形式
影響分析では、エンティティタイプごとにグループ化し、重要なパス(単一依存の連鎖)を特定して、影響を受けるオーナーを列挙します。完全なテンプレートについては、templates/impact-analysis.template.md を参照してください。
クロスプラットフォーム表示
リネージが複数のシステムにまたがる場合は、プラットフォームごとにグループ化します。
PostgreSQL Snowflake Looker
───────── ───────── ──────
[raw_orders] ──→ [stg_orders] ──→ [fct_orders] ──→ [Orders Dashboard]
[raw_customers] ──→ [stg_customers] ──┘
次のステップの提案
リネージを提示した後:
- 「これらのメタデータの詳細を確認しますか?」→
--projectionに所有者、説明、兄弟エンティティを指定してdatahub searchで取得します - 「このパイプラインのメタデータを更新しますか?
/datahub-enrichを使ってください」 - 「影響監査を実行しますか?
/datahub-auditを使ってください」
参考ドキュメント
| ドキュメント | パス | 目的 |
|---|---|---|
| リネージパターンのリファレンス | references/lineage-patterns-reference.md | トラバーサル戦略とパターン |
| 影響分析テンプレート | templates/impact-analysis.template.md | 影響分析レポートのテンプレート |
| リネージマップテンプレート | templates/lineage-map.template.md | リネージ可視化テンプレート |
| CLI リファレンス(共通) | ../shared-references/datahub-cli-reference.md | CLI コマンド |
よくある間違い
datahub lineageではなくdatahub get --aspect upstreamLineageを使う。datahub lineageコマンドは、適切なページネーションを適用し、上流と下流の両方を 1 回の呼び出しでサポートします。生のアスペクト取得の代わりにこちらを使ってください。- URN だけを表示する。
datahub lineageコマンドは名前とプラットフォームを返します。生の URN ではなく、それらをユーザーに提示してください。 - トレースせずにメタデータの質問に答える。 「X の所有者は誰ですか?」は検索に関する質問であり、リネージに関する質問ではありません。リネージはエンティティ間の関係を調べるものであり、エンティティのプロパティを調べるものではありません。
注意すべき兆候
- ユーザー入力にシェルのメタ文字が含まれている → 拒否し、CLI に渡さないでください。
- トラバーサルの深さが 3 ホップを超えている → 先に進む前にユーザーに確認してください。
- リネージのエッジが 0 件返される → エンティティのリネージが取り込まれていない可能性があります。「依存関係がない」と言うのではなく、その旨を記載してください。
- ユーザーがリネージではなくメタデータについて尋ねている(「X の所有者は誰ですか?」「タグを追加して」など)→
/datahub-searchまたは/datahub-enrichに案内してください。
URN の解析
データセットの URN は次の形式です:urn:li:dataset:(urn:li:dataPlatform:<platform>,<qualified_name>,<env>)。各 URN を解析するために Python を書くのではなく、URN 文字列から読み取れる部分を直接取り出してください。
- プラットフォーム:
dataPlatform:の後からコンマの前までのテキスト - テーブル名:最初のコンマと最後のコンマの間のテキスト(修飾名)
- 環境:最後のコンマの後から閉じ括弧の前までのテキスト
ダッシュボード/チャートの URN は次の形式です:urn:li:<type>:(<platform>,<id>)。
URN から直接取り出した名前を使ってリネージの結果を提示してください。追加のプロパティ(説明、所有者)は、ユーザーから依頼があった場合にのみ取得してください。
忘れずに
- フローを視覚的に示してください。 小規模なグラフでは、ASCII 図のほうが表よりも直感的です。
- 兄弟エンティティを確認してください。 ユーザーがデータウェアハウスのテーブル名で考えていても、リネージには dbt エンティティが表示される場合があります。また、その逆もあります。
- 依頼があれば情報を補足してください。
datahub lineageは名前とプラットフォームを返しますが、所有者、説明、タグは返しません。ユーザーがより詳しい情報を求めている場合は、--projectionを指定した追加の検索を使ってください。 - 結果に上限が適用されていないか確認してください。 概要に結果が切り詰められたことが示されている場合は、
--countを増やしてください。