OpenMetadata Spline 管道连接器接入指南通过 Spline REST API 采集数据血缘与管道元数据【免费下载链接】OpenMetadataThe Open Context Layer for Data and AI , OpenMetadata is the open platform for building trusted data context and business semantics for humans, AI assistants, and agents.项目地址: https://gitcode.com/GitHub_Trending/op/OpenMetadata导读本文基于 OpenMetadata 仓库中 Spline 管道连接器的官方接入文档系统讲解如何将 Spline一个面向 Spark 应用的数据血缘追踪与可视化工具接入 OpenMetadata实现管道元数据与表级、列级血缘的自动采集。通过阅读本文你将掌握 Spline REST Server 与 Spline UI 两个关键连接参数的配置方法、UI 界面上的连接配置路径、底层 API 调用链路execution-events、lineage-detailed、attribute-lineage-and-impact以及如何编写一份可直接运行的 Spline 元数据摄取工作流。Spline 连接器概述Spline 连接器是 OpenMetadata 中 Pipeline 类数据源之一其接入文档位于 openmetadata-ui/src/main/resources/ui/public/locales/en-US/Pipeline/Spline.md供 UI 配置界面渲染各字段的说明与提示。OpenMetadata 并不直接连接 Spark 集群而是通过 Spline 对外暴露的REST API来提取执行细节并生成血缘。也就是说你的 Spark 作业需要先通过 Spline Agent 把执行计划上报到 Spline ServerOpenMetadata 再作为 Consumer 从 Spline Server 拉取这些数据。前置要求一个可访问的 Spline REST Server且其 API 端口对运行 OpenMetadata 摄取服务ingestion的主机开放可选一个可访问的 Spline UIPortal用于从 OpenMetadata 页面跳转到 Spline 查看执行事件详情需要在 OpenMetadata 中已经注册了与 Spline 血缘关联的数据库服务例如 Databricks、PostgreSQL 等否则表级血缘无法落地详见下文源码分析。连接配置字段详解Spline 连接器仅有三个核心配置项type、hostPort、uiHostPort其中hostPort为必填项。这可以从 JSON Schema splineConnection.json 中确认required: [hostPort]且hostPort与uiHostPort的格式均为uri。Spline REST Server Host Port必填hostPortOpenMetadata 通过 Spline REST Server 的 API 来提取执行细节并生成血缘。该字段应填写为 URI 字符串格式为scheme://hostname:port示例http://localhost:8080、http://host.docker.internal:8080后者用于 OpenMetadata 与 Spline 均运行在 Docker 容器中的场景通过宿主机回环地址互相访问该值会被底层客户端用作 REST API 的base_url并拼接consumer作为 API 版本前缀。Spline UI Host Port可选uiHostPort该字段用于生成从 OpenMetadata 跳转到 Spline Portal 的重定向 URL属于可选项。格式同样为 URIscheme://hostname:port示例http://localhost:9090、http://host.docker.internal:9090如果配置了该字段OpenMetadata 中的 Pipeline 实体会携带一个sourceUrl指向{uiHostPort}/app/events/overview/{executionEventId}用户可以在 OpenMetadata 管道详情页一键跳转到 Spline UI 查看该次执行的完整事件。UI 配置入口与流程在 OpenMetadata 界面中配置 Spline 连接器的步骤如下进入Settings → Services → Pipelines点击Add New Pipeline Service在数据源列表中选择Spline填写服务名称service name例如local_spline在 Connection Details 区域依次配置Spline REST Server Host Port与可选的Spline UI Host Port点击Test Connection验证连通性通过后保存服务在服务详情页配置 Metadata Ingestion 工作流PipelineMetadata指定需要关联的数据库服务与过滤模式然后运行摄取。UI 右侧面板展示的字段说明文字即直接渲染自本文开头提到的 Spline.md 文档。底层实现客户端如何调用 Spline API连接配置最终会落到 Python 摄取端。连接处理类定义在 connection.py它基于BaseConnection构建SplineClient并通过get_pipelines_test_connection作为唯一的连接测试步骤GetPipelines来验证连通性。SplineClient定义在 client.py其核心逻辑是以clean_uri(str(self.config.hostPort))为base_urlapi_versionconsumer构建TrackedREST客户端调用GET /execution-events拉取执行事件列表并依据pageNum * pageSize totalCount循环翻页_paginate_pipelines调用GET /lineage-detailed?execId{pipeline_id}获取执行计划的输入/输出表与属性列表调用GET /attribute-lineage-and-impact?execId{pipeline_id}attributeId{attribute_id}获取列级column-level血缘细节。对应的响应模型定义在 models.py包括ExecutionEventexecutionEventId、executionPlanId、applicationName、ExecutionPlaninputs、output、extra.attributes以及列血缘的Lineage/ColLineage/ColNodes等。血缘提取流程与表名解析策略管道血缘的生成逻辑在 metadata.py 中SplineSource继承自PipelineServiceSource主要流程为get_pipelines_list遍历execution-events分页结果把每个执行事件映射为一个 Pipeline 实体Pipeline 名称即executionEventId显示名为applicationNameyield_pipeline_lineage_details对每个执行计划调用lineage-detailed接口拿到executionPlan.inputs输入表与executionPlan.output输出表再遍历executionPlan.extra.attributes逐个调用attribute-lineage-and-impact接口把属性attribute层面的血缘边聚合成target_to_sources_map从而得到列级血缘通过AddLineageRequest将EntitiesEdge含columnsLineage与pipeline引用写入 OpenMetadata。其中有一个关键前提源码可证yield_pipeline_lineage_details开头即判断if not self.get_db_service_names(): return并且_get_table_entity会遍历dbServiceNames构建表 FQN 去匹配。这意味着你必须先在 sourceConfig 中声明 dbServiceNames已接入 OpenMetadata 的数据库服务Spline 的血缘才能关联到具体表。Spline 中数据源的表示方式有两种解析策略在 utils.pyjdbc 前缀使用 ANTLR 文法JdbcUriLexer/JdbcUriParser解析 JDBC URL提取 database、schema、table。其中postgresql、oracle:thin、vertica、redshift属于多库数据源MULTI_DB_SOURCE会保留真实 database 名其余数据源如 mysql、hive2统一回退为DEFAULT_DATABASEdbfs 前缀取路径最后一段作为表名parse_dbfs_path适用于 Databricks 场景。这些解析行为均有单元测试覆盖见 test_spline.py其中包含大量 JDBC URL 解析用例PostgreSQL、Oracle、MySQL、Hive2、Vertica、Redshift可直接作为排查血缘匹配问题的参考。完整工作流配置示例仓库提供了可直接参考的示例配置spline.yaml。下面是一个完整、可运行的摄取工作流source: type: spline serviceName: local_spline serviceConnection: config: type: Spline hostPort: http://localhost:8081/ uiHostPort: http://localhost:9090 sourceConfig: config: type: PipelineMetadata lineageInformation: dbServiceNames: - local_databricks - local_postgres_empty1 pipelineFilterPattern: includes: - .*jdbc.* - .*databricks.* sink: type: metadata-rest config: {} workflowConfig: # loggerLevel: INFO # DEBUG, INFO, WARN or ERROR openMetadataServerConfig: hostPort: http://localhost:8585/api authProvider: openmetadata securityConfig: jwtToken: your-jwt-token配置要点说明配置项说明source.type固定为splineserviceName服务名称需与 UI 中创建的服务一致serviceConnection.config.hostPortSpline REST Server 地址必填格式scheme://hostname:portserviceConnection.config.uiHostPortSpline UI 地址可选用于跳转链接sourceConfig.config.type固定为PipelineMetadatalineageInformation.dbServiceNames声明参与血缘匹配的数据库服务列表血缘落地的前提pipelineFilterPattern正则过滤要采集的管道如.*jdbc.*、.*databricks.*sink.type固定为metadata-rest将结果写入 OpenMetadata 服务端workflowConfig.openMetadataServerConfigOpenMetadata 服务端地址、认证方式与令牌运行方式ingestion 目录下metadata ingest -c path-to/spline.yaml连接测试与故障排查Test Connection在 UI 中创建服务后即可测试连通性底层执行的是GET /execution-events请求只有返回非空响应才算连接成功对应 connection.py 中的GetPipelines步骤连接超时连接测试默认超时时间为 3 分钟THREE_MIN血缘为空优先检查sourceConfig.config.lineageInformation.dbServiceNames是否已声明且这些数据库服务已经完成元数据摄取其次确认 Spline 执行计划中的输入/输出表确实以jdbc:或dbfs:开头否则_get_table_from_datasource_name直接返回 None跳转链接 404确认uiHostPort填写的端口是 Spline UIPortal而非 REST API 端口两者通常不同REST 默认 8080UI 默认 9090管道状态注意 Spline 连接器不支持管道运行状态pipeline status采集yield_pipeline_status为空实现见 metadata.py。小结Spline 连接器是 OpenMetadata 摄取 Spark 血缘的一条轻量路径只需配置 Spline REST Server 地址即可拉取执行事件与血缘配好uiHostPort还能获得从 OpenMetadata 直达 Spline UI 的跳转体验。理解其底层的三个 REST 端点execution-events、lineage-detailed、attribute-lineage-and-impact与 JDBC/dbfs 数据源解析规则有助于你快速定位血缘缺失问题。相关源码与测试分布在 ingestion/src/metadata/ingestion/source/pipeline/spline/ 与 ingestion/tests/unit/topology/pipeline/test_spline.py可作为深入研读的起点。【免费下载链接】OpenMetadataThe Open Context Layer for Data and AI , OpenMetadata is the open platform for building trusted data context and business semantics for humans, AI assistants, and agents.项目地址: https://gitcode.com/GitHub_Trending/op/OpenMetadata创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
