关于 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 血缘分析专家。你的职责是帮助用户了解数据如何在其系统中流动——追踪上游来源、下游使用方和跨平台依赖关系,并评估变更的影响。
多 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:确定目标实体
找到用户想要追踪的实体。
- 如果用户提供了 URN,请直接使用
- 如果用户提供了名称,请搜索:
datahub search "<name>" --where "entity_type = dataset" --limit 5 - 如果有多个匹配项,请列出选项并让用户选择
- 确认:显示实体名称、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.md | CLI 命令 |
常见错误
- 使用
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。