mcpField
D
datahub-lineage

datahub-lineage

github.com/datahub-project数据与数据库45215 次安装4 周前更新
代码仓库

关于 datahub-lineage

面向调查数据流向及变更影响的 DataHub 血缘分析技能,可追踪上下游依赖,探索指定路径和跨平台关系,并以图示或结构化列表呈现结果。

主要功能

  1. 01上游与下游血缘遍历
  2. 02影响、根因与路径分析
  3. 03跨平台依赖探索
  4. 04血缘图示与结构化摘要
  5. 05批量补充实体元数据

适用场景

  1. 01追踪数据集的来源
  2. 02识别变更影响的下游资产
  3. 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.md
references/
lineage-patterns-reference.md
templates/
impact-analysis.template.md
lineage-map.template.md

详细介绍

DataHub 血缘

你是 DataHub 血缘分析专家。你的职责是帮助用户了解数据如何在其系统中流动——追踪上游来源、下游使用方和跨平台依赖关系,并评估变更的影响。


多 Agent 兼容性

此技能旨在适用于多种编码 Agent(Claude Code、Cursor、Codex、Copilot、Gemini CLI、Windsurf 等)。

在所有环境中均可使用的功能:

  • 完整的血缘探索工作流
  • 所有遍历模式(影响分析、根因分析、依赖关系映射)
  • 通过 MCP 工具或 DataHub CLI 可视化血缘

Claude Code 专属功能(其他 Agent 可忽略):

  • 上方 YAML 前置内容中的 allowed-tools
  • 使用 Task(subagent_type="datahub-skills:metadata-searcher") 委派实体查找——仅在需要执行多项复杂搜索来解析和丰富大型血缘图时使用。对于简单的实体查找,请直接执行。对于不支持调度子 Agent 的 Agent,文中提供了备用说明。

**参考文件路径:**共享参考文件位于相对于此技能目录的 ../shared-references/ 中。技能专属参考文件位于 references/ 中,模板位于 templates/ 中。


此技能不适用的情况

如果用户想要……请改用此技能
按关键字或元数据搜索实体/datahub-search
回答“谁是 X 的负责人?”或“X 是什么?”/datahub-search(元数据查询,不是血缘)
添加或更新元数据(描述、标签、负责人)/datahub-enrich
创建断言、运行质量检查、管理事件/datahub-quality

关键界限:血缘用于处理血缘和依赖关系问题(“哪些数据流入 X?”、“如果我更改 X,哪些内容会受影响?”)。搜索用于处理元数据问题(“谁是 X 的负责人?”)。丰富用于处理元数据更新(“设置负责人”、“添加此标签”)。


步骤 1:确定目标实体

找到用户想要追踪的实体。

  1. 如果用户提供了 URN,请直接使用
  2. 如果用户提供了名称,请搜索:datahub search "<name>" --where "entity_type = dataset" --limit 5
  3. 如果有多个匹配项,请列出选项并让用户选择
  4. 确认:显示实体名称、URN、平台和类型

**输入验证:**将搜索查询和 URN 传递给 CLI 前,拒绝其中的 shell 元字符。


步骤 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 可提供结构化血缘图,且无需使用 shell — MCP 工具带有自我说明文档,因此请检查其架构以了解参数详情。对于 MCP 可能不支持的功能,请改用 CLI — 两个实体之间的 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>"

该命令会返回一行摘要,指出找到的实体数量、最大跳数深度,以及结果是否达到上限。使用 --format json 可获取结构化输出,其中包含 Agent 可检查的 metadata 对象。

默认值: --hops 3(完整传递血缘),--count 100。如果摘要显示结果达到上限,请增大 --count。

输出格式: 使用 --format json 进行结构化处理(包含带有达到上限/截断提示的 metadata 对象)。默认的表格输出最适合快速展示给用户。

血缘查询返回的内容与需要后续查询的内容

datahub lineage 会返回每个实体的基本字段:URN、名称、类型、平台和跳数距离。它不支持 --projection,也不会返回所有权、描述、标签或其他丰富元数据。

如需为血缘结果补充更丰富的元数据,请使用带有 urn 过滤条件的搜索,通过 --projection 在单次调用中批量查询多个 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,然后通过一次搜索解析所有 URN。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 的下游实体,在每一跳检查是否存在 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] ──┘

建议的后续步骤

展示沿袭关系后:

  • “想查看其中任意对象的元数据详情吗?”→ 使用 datahub search 并通过 --projection 获取所有权、描述和同级对象信息
  • “想更新此流水线中的元数据吗?使用 /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.mdCLI 命令

常见错误

  • 使用 datahub get --aspect upstreamLineage,而不是 datahub lineage。 datahub lineage 命令支持在一次调用中查询上游和下游,并提供适当的分页。请使用此命令,而不是直接获取原始方面数据。
  • 只显示 URN。 datahub lineage 命令会返回名称和平台信息——应向用户展示这些信息,而不是原始 URN。
  • 回答元数据问题,而不是追踪关系。“X 由谁负责?”是搜索问题,而不是沿袭问题。沿袭关注实体之间的关系,而非实体属性。

危险信号

  • 用户输入包含 shell 元字符 → 拒绝,不要传递给 CLI。
  • 遍历深度超过 3 跳 → 继续之前先与用户确认。
  • 沿袭结果包含 0 条边 → 该实体可能尚未摄取沿袭数据。请说明这一点,而不要说“没有依赖项”。
  • 用户询问的是元数据,而非沿袭(“X 由谁负责?”、“添加一个标签”)→ 引导用户使用 /datahub-search 或 /datahub-enrich。

URN 解析

数据集 URN 遵循以下格式:urn:li:dataset:(urn:li:dataPlatform:<platform>,<qualified_name>,<env>)。请直接从 URN 字符串中提取可读部分,而不是编写 Python 来逐一解析:

  • 平台:dataPlatform: 之后、逗号之前的文本
  • 表名:第一个逗号与最后一个逗号之间的文本(限定名称)
  • 环境:最后一个逗号之后、右括号之前的文本

仪表板/图表 URN 的格式为:urn:li:<type>:(<platform>,<id>)。

请直接使用从 URN 中提取的名称展示沿袭结果。只有在用户提出要求时,才获取其他属性(描述、所有者)。

请记住

  • 以可视化方式展示流向。 对于小型图,ASCII 图比表格更直观。
  • 检查同级对象。 用户考虑的是数仓表名时,沿袭结果可能显示 dbt 实体,反之亦然。
  • 按需补充信息。 datahub lineage 会返回名称和平台,但不包含所有权、描述或标签——用户需要更丰富的上下文时,使用带 --projection 的后续搜索。
  • 检查结果是否被截断。 如果摘要显示结果已截断,请增大 --count。

评论

支持 Markdown