资讯动态

MCP Toolbox Data Lineage 集成实战:用 datalineage Source 与 search-lineage 工具查询 Google Cloud 数据血缘图

发布时间:2026/9/14 17:12:13 来源:尧图企业网站定制
MCP Toolbox Data Lineage 集成实战用 datalineage Source 与 search-lineage 工具查询 Google Cloud 数据血缘图【免费下载链接】mcp-toolboxMCP Toolbox for Databases is an open source MCP server for databases.项目地址: https://gitcode.com/GitHub_Trending/ge/mcp-toolboxMCP Toolbox 的 Data Lineage 集成让 LLM Agent 能够直接查询 Google Cloud Data Lineage API以广度优先搜索BFS的方式检索资产之间的上下游血缘链路并支持实体级血缘与列级血缘Column-Level Lineage, CLL两种粒度。读完本文你可以完成datalineagesource 与datalineage-search-lineagetool 的完整配置理解每个参数的默认值与上限并了解 MCP Toolbox 在底层如何通过流式接口聚合多 Location 的血缘结果。一、Data Lineage 集成概述Data Lineage 集成允许 MCP Toolbox 连接到 Google Cloud Data Lineage API使大语言模型能够查询和分析数据血缘即数据在源上游资产与目标下游资产之间的流动关系。该集成支持两种血缘粒度见 source 文档实体级血缘Entity-Level Lineage追踪整份资产之间的数据流动例如表与表、文件与文件之间列级血缘Column-Level Lineage, CLL追踪资产内部特定字段/列之间的数据流动粒度更细适合字段级影响面分析。集成由两部分组成组件类型文档位置datalineagesourcesource.mddatalineage-search-lineagetooldatalineage-search-lineage.md二、配置 datalineage Sourcesource 负责建立到 Data Lineage API 的连接。最小可用配置如下继承自原文档示例kind: source name: my-lineage-source type: datalineage project: my-gcp-project-idSource 字段参考fieldtyperequireddescriptionnamestringtrue该 source 实例的唯一名称。typestringtrue必须为datalineage。projectstringtrue存放血缘事件的 Google Cloud 项目 ID。Source 的底层实现从源码结构看这三个字段全部是必填项。source 实现 中的Config结构体对name、type、project均标注了validate:required配置缺失时会在加载阶段直接失败。连接建立的完整链路initLineageConnection通过google.FindDefaultCredentials查找默认 Google Cloud 凭据并请求sources.CloudPlatformScope作用域——这意味着运行 MCP Toolbox 的环境需要配置好 Application Default Credentials如gcloud auth application-default login或元数据服务凭据文档本身未重复说明该前提但源码可以确认这一依赖使用带 User-Agent 的凭据构造lineage.Client来自cloud.google.com/go/datacatalog/lineage/apiv1SDK整个连接过程被 OpenTelemetry span 包裹sources.InitConnectionSpan便于在遥测中定位连接问题。另外值得注意的是Source.IsReadOnly()返回falseL81-L83即 source 层面未声明只读而工具层面则默认注册为只读注解后文详述。三、配置 datalineage-search-lineage Tooldatalineage-search-lineage工具通过给定方向的广度优先搜索检索与目标资产相连的血缘链接lineage links。它同时支持实体级血缘和列级血缘。工具配置示例继承自原文档kind: tool name: search_lineage type: datalineage-search-lineage source: my-lineage-source description: Use this tool to search data lineage links for BigQuery tables.Tool 字段参考fieldtyperequireddescriptiontypestringtrue必须为datalineage-search-lineage。sourcestringtrue工具所执行的 source 名称。descriptionstringtrue传给 LLM 的工具描述。从 工具源码 看Config通过tools.ConfigBase内嵌了name/description等通用字段并对type、source强制校验必填。此外ValidateSource方法L148-L154要求 source 实现compatibleSource接口即提供SearchLineageStreaming方法否则在初始化时报错 source %q is not a compatible type这保证了一个datalineage-search-lineage工具只能挂在datalineagesource 上。工具默认使用只读注解tools.NewReadOnlyAnnotations可被显式的annotations字段覆盖。四、工具参数详解以下参数说明完整继承自 工具文档默认值与上限与 GCP API 保持一致。locations字符串数组必填要搜索的 Location 列表如[us, eu, global]至少包含一个Location列表中的第一个Location 被用作发起搜索的父 Locationparent location并用于计费/配额billing/quota搜索会从列表提供的所有有效 Location 中检索血缘链接。这一点在 Invoke 实现 中得到印证parentLocation : locations[0]即代码直接取第一个元素作为 API 请求的 parent。root_entities对象数组必填血缘图遍历的起始实体根节点最多20个。每个对象表示一个实体引用必须包含fully_qualified_name字符串必填实体的 FQN例如 BigQuery 表的 FQNfields字符串数组可选用于**列级血缘CLL**检索的字段/列名支持通配符。从源码看L189-L219每个实体最终被转换为lineagepb.EntityReference{FullyQualifiedName, Field}fully_qualified_name缺失或fields不是字符串数组时工具会返回带索引定位的 Agent Errormissing or invalid fully_qualified_name ... at index %d方便修正调用参数。direction字符串必填搜索方向支持两个取值UPSTREAM查找为根实体提供数据的资产来源DOWNSTREAM查找由根实体派生出的资产目标。源码中方向解析对大小写不敏感——switch strings.ToUpper(directionStr) 会先统一转大写再匹配非法取值返回 must be UPSTREAM or DOWNSTREAM 的 Agent Error。max_depth整数可选血缘图中的最大搜索深度API 默认值5最大值100若省略将使用 GCP API 默认值5。max_results整数可选响应中返回的血缘链接最大数量API 默认值1000最大值10000若省略将使用 GCP API 默认值1000。max_process_per_link整数可选每条链接返回的 process 最大数量API 默认值0不返回任何 process最大值100若省略将使用 GCP API 默认值0当request_process_details为true时必须显式设为大于0的值。request_process_details布尔值可选设为true时工具会额外获取链接关联 process 的完整详情如displayName、attributes、origin默认值false约束要求max_process_per_link显式设为大于0的值若为0或省略将返回验证错误行为为true时工具会设置x-goog-fieldmask请求头为links,links.processes.process,unreachable从而从 API 请求完整 process 详情。前两条约束在 Invoke 中的校验逻辑 中可以直接看到if requestProcessDetails maxProcessPerLink 0会立即返回 max_process_per_link must be greater than 0 when request_process_details is true。fieldmask 头的设置则发生在 source 层见下文。五、IAM 权限要求要成功检索血缘链接被授权的 Google Cloud 身份需要具备以下权限继承自 工具文档的 Requirements 一节权限适用场景datalineage.events.get实体级血缘在链接所在项目上读取 lineage 事件datalineage.events.getFields列级血缘在链接所在项目上读取字段级事件datalineage.processes.get在 process 所在项目上读取 process 详情仅在获取 process 详情时需要六、输出格式与示例响应工具返回一个结构化 JSON 对象包含以下字段links对象数组累积的血缘链接列表。每个对象代表一条血缘链接包含name、source实体、target实体、endTime、startTime以及在请求了 process 详情时的关联processesunreachable字符串数组可选多 Location 搜索中未能响应的 GCP Location 列表如projects/123456789/locations/us-east1。没有不可达 Location 时该字段被省略。示例响应继承自原文档{ links: [ { name: projects/my-project/locations/us/links/link-id, source: { fullyQualifiedName: bigquery:project.dataset.source_table }, target: { fullyQualifiedName: bigquery:project.dataset.target_table }, startTime: 2026-01-01T01:01:01.010Z, endTime: 2026-01-01T01:01:01.010Z } ], unreachable: [projects/my-project/locations/us-east1] }与文档一一对应SearchLineageResponse 结构体 定义了links字段与带omitempty的unreachable字段——这解释了为什么unreachable在没有不可达 Location 时不会出现在输出里。七、实现深潜流式搜索与多 Location 聚合datalineagesource 的核心方法是 SearchLineageStreaming其工作过程如下构造父资源路径将配置中的project与第一个 Location 拼成projects/{project}/locations/{location}作为 API 请求的 parent与工具层 第一个 location 作为 parent 并用于计费/配额 的说明完全一致构造请求将root_entities封装进RootCriteria.EntitiesMultipleEntityReference并带上direction只有当max_depth、max_results、max_process_per_link任一大于 0 时才填充Limits结构L150-L156——因此省略这些参数时完全交由 GCP API 使用其默认值fieldmask 控制 process 详情当request_process_details为true时通过 gRPC metadata 追加x-goog-fieldmask: links,links.processes.process,unreachableL158-L160即文档中描述的请求头行为流式接收与聚合调用Client.SearchLineageStreaming获得流循环stream.Recv()直到io.EOF每一帧的links被追加到结果列表unreachableLocation 则写入map[string]bool去重后再转为切片返回L167-L191。这种 map 去重 流式累积 的做法意味着多 Location 搜索中即使同一个不可达 Location 在多帧中重复出现输出中也只会出现一次。错误路径同样值得关注发起搜索失败或流读取中途出错时source 分别返回 failed to start search lineage streaming 与 error receiving from search lineage stream 的包装错误工具层再通过util.ProcessGcpError将其转换为带错误分类的ToolboxErrorL266-L269便于 Agent 区分权限不足、配额超限等不同失败原因。八、集成测试中的真实血缘数据构造集成测试 展示了如何为工具准备可查询的血缘数据也验证了文档描述的端到端行为。测试通过环境变量DATALINEAGE_PROJECT指定项目L44并按 Data Lineage API 的资源层级依次构造setupDatalineageResources在projects/{project}/locations/us下创建Process血缘过程如一次 ETL 作业在 Process 下创建Run一次执行记录带startTime与COMPLETED状态在 Run 下创建LineageEvent其中包含一条source→target的EventLink两个实体使用custom:前缀的 FQN测试结束后通过DeleteProcess并等待长操作完成来清理资源。这个构造顺序Process → Run → LineageEvent体现了 Data Lineage API 的资源模型血缘链接是事件的一部分而事件隶属于某次 process run。对于使用datalineage-search-lineage工具的开发者理解这一模型有助于解释查询结果中links与processes的对应关系——链接描述谁流向谁process 描述经由什么作业流动。九、小结与使用前提配置三步走定义datalineagesource指定project→ 定义datalineage-search-lineagetool 并引用该 source → 为运行身份授予datalineage.events.get等 IAM 权限常用组合查上游影响面用direction: UPSTREAM查下游影响面用direction: DOWNSTREAM需要字段级分析时在root_entities中给出fields支持通配符需要解释 数据经过哪个作业流动 时将request_process_details设为true并显式设置max_process_per_link 0运行前提环境具备 Application Default Credentials 与 Cloud Platform 作用域凭据源码中FindDefaultCredentialsCloudPlatformScope可确认且血缘事件存储在配置的project内。所有关键实现可在以下路径复核source 实现、工具实现、source 单元测试、工具单元测试 与 集成测试。【免费下载链接】mcp-toolboxMCP Toolbox for Databases is an open source MCP server for databases.项目地址: https://gitcode.com/GitHub_Trending/ge/mcp-toolbox创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价