ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

OpenMetadata Mode 仪表盘连接器接入指南:配置、元数据映射与血缘原理

OpenMetadata Mode 仪表盘连接器接入指南:配置、元数据映射与血缘原理 OpenMetadata Mode 仪表盘连接器接入指南配置、元数据映射与血缘原理【免费下载链接】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 中 Mode 仪表盘Dashboard连接器的完整接入指南涵盖前置要求、元数据映射规则、连接参数详解、凭据获取、连接测试以及基于源码的底层实现原理。读完本文你将能够在 OpenMetadata 中完成 Mode 服务的创建与配置理解报告、图表、查询数据模型与血缘的对应关系并掌握filterQueryParam等关键参数的实战含义。前置要求Mode Business WorkspaceOpenMetadata 的 Mode 连接器完全依赖 Mode 官方 API而该 API仅对 Mode Business Workspace 的成员开放。这意味着只有归属于 Mode Business Workspace 的资源才能通过 API 被访问和采集如果你的 Mode 账号属于非 Business 类型的 Workspace将无法使用本连接器完成元数据采集采集范围受 API Token 可见性约束——连接器只能采集 Token 所属工作区成员可见的 spaces空间、reports报告、queries查询、charts图表和 data sources数据源。因此在创建连接器之前请先确认你的 Mode 实例满足 Business Workspace 条件并准备好一个对该工作区拥有充分访问权限的 API Token。元数据映射Mode 对象如何进入 OpenMetadataMode 连接器的核心工作是将其领域模型翻译为 OpenMetadata 的实体模型。根据 Mode.md 文档与 mode/metadata.py 的实现映射关系如下Mode 对象OpenMetadata 实体说明Report报告Dashboard仪表盘报告的 token 作为仪表盘名称报告名称作为 displayName_links.share.href拼接出源 URLReport 中的可视化Chart图表图表类型统一标记为ChartType.Other名称取自view_vegas.titleReport 关联的 Query查询Dashboard Data Model仪表盘数据模型数据模型包含查询名称、SQL 文本与指向 Mode 中查询的链接由于 Mode 查询响应不包含结果列元数据查询数据模型的列列表为空底层数据表 → 查询 → 报告Lineage血缘当查询 SQL 可解析且源表可解析时建立 表 → 查询数据模型 → 报告仪表盘 的血缘链路关于血缘链路有一个值得注意的降级逻辑如果数据模型采集被禁用includeDataModelsfalse或者某个查询数据模型被过滤规则排除血缘会直接从底层表指向报告仪表盘跳过了数据模型这一跳。这一逻辑在_resolve_lineage_target方法中实现优先解析数据模型解析失败或未启用时回退到 Dashboard 本身。从源码结构可以确认Mode 源通过ModeSource(DashboardServiceSource)继承通用仪表盘采集框架逐项产出仪表盘、图表、数据模型与血缘请求其工作流入口注册在 mode/service_spec.py 中。连接参数详解Mode 连接的完整参数定义在 JSON Schema modeConnection.json 中。其中accessToken、accessTokenPassword、workspaceName为必填项其余为可选项。Host PorthostPort指定 Mode 服务器的地址与端口以 URI 字符串形式填写格式为https://app.mode.com。Schema 中该字段的默认值即为https://app.mode.com对于自托管或私有化部署的 Mode 实例请替换为实际的访问地址。OpenMetadata 在构造客户端时会通过clean_uri对地址做规范化处理见 client.py并以其为基准拼接后续所有 API 路径。Access TokenaccessToken与 Access Token PasswordaccessTokenPassword这两个字段是 Mode API 的认证凭据生成步骤如下登录 Mode 实例首页点击左上角你的名字进入My Account在左侧菜单中选择API Tokens输入 Token 名称点击Create token生成新的 API Token 与密码复制生成的 Access Token 与对应的密码。从源码可以看到ModeApiClient 在构造时会将accessToken与accessTokenPassword以冒号拼接后做 Base64 编码再以 HTTP Basic 认证方式auth_token_modeBasic注入Authorization请求头。这意味着Access Token 相当于 Basic Auth 中的用户名Access Token Password 相当于密码两者必须配对使用在 OpenMetadata UI 中accessTokenPassword以密码字段format: password存储录入与展示时会受到加密与脱敏保护。Workspace NameworkspaceNameMode 工作区名称用于在 API 路径中定位具体工作区。Mode 的所有资源spaces、reports、queries、data sources都隶属于某个工作区OpenMetadata 的采集请求路径形如/{workspace_name}/spaces、/{workspace_name}/reports/{report_token}/queries等因此该字段必须与 API Token 所属的工作区一致否则会因权限或路径不存在而采集失败。连接测试步骤CheckDashboards正是通过调用get_workspace(workspaceName)来验证该字段的有效性见 mode/connection.py。Filter Query ParamfilterQueryParam该值会作为filter查询参数传递给 Mode 的 spaces API用于在发现报告时对空间列表进行过滤。支持的取值为all获取所有空间默认值custom仅获取自定义空间。如果该字段留空OpenMetadata 会默认使用all。这一默认行为在 metadata.py 的get_dashboards_list方法中实现filter_param all if not self.filter_query_param else self.filter_query_param。同时client.py 的fetch_all_reports会对取值做校验一旦传入除custom、all之外的值会抛出ValueError提示期望的合法取值。过滤模式Filter Patterns除上述参数外连接配置还支持四类正则过滤模式用于控制采集范围均定义在 modeConnection.jsondashboardFilterPattern按名称正则包含/排除要采集的仪表盘chartFilterPattern按名称正则包含/排除图表dataModelFilterPattern按名称正则包含/排除查询数据模型projectFilterPattern按名称正则包含/排除项目。其中dataModelFilterPattern对血缘链路有直接影响被过滤掉的查询数据模型不会生成实体其血缘目标会按前述降级逻辑回退到报告仪表盘。图表与数据模型的过滤判定分别发生在yield_dashboard_chart与yield_datamodel中命中过滤规则时会在采集状态status中记录 Chart Pattern not Allowed 或 Data model filtered out。完整连接配置示例以下是一个可直接使用的 Mode 服务配置YAML示例字段结构依据 modeConnection.json 整理source: type: mode serviceName: mode_prod serviceConnection: config: type: Mode hostPort: https://app.mode.com accessToken: 你的 Access Token accessTokenPassword: 你的 Token 密码 workspaceName: my-company-workspace filterQueryParam: all # 可选all / custom留空默认 all # dashboardFilterPattern: # includes: [.*] # excludes: [temp_.*] # chartFilterPattern: # includes: [.*] # excludes: [] # dataModelFilterPattern: # includes: [.*] # excludes: [] # projectFilterPattern: # includes: [.*] # excludes: [] sourceConfig: config: type: DashboardMetadata includeDataModels: true # 关闭后查询将不再生成为数据模型 includeCharts: true includeOwners: true sink: type: metadata-rest config: {} workflowConfig: openMetadataServerConfig: hostPort: http://localhost:8585/api authProvider: openmetadata securityConfig: jwtToken: 服务账号 JWT Token实际使用中在 OpenMetadata UI 的 Settings → Services → Dashboard 中新建 Mode 服务并逐项填写上述字段即可平台会自动生成等价的配置。连接测试与底层实现创建服务或配置自动化工作流时OpenMetadata 会执行连接测试。Mode 的测试逻辑集中在 mode/connection.pyModeConnection继承通用BaseConnection[ModeConnectionConfig, ModeApiClient]_get_client负责基于连接配置构造ModeApiClienttest_connection通过test_connection_steps执行名为CheckDashboards的单一测试步骤其函数体为client.get_workspace(service_connection.workspaceName)测试超时默认设置为 3 分钟THREE_MIN。也就是说连接测试本质上就是调用一次/{workspace_name}接口验证 Token、密码、工作区名三者的组合是否有效。对应地test_connection.py 中的单元测试覆盖了ModeConnection继承关系、客户端构建以及测试步骤的执行路径。连接成功后采集阶段会调用以下 API 端点见 client.pyAPI 端点方法用途/{workspace}/spaces?filter{filter}fetch_all_reports获取空间列表并遍历拉取所有报告/{workspace}/spaces/{space_token}/reports?page{page}get_reports_for_space分页获取某空间下的报告/{workspace}/reports/{report_token}/queriesget_all_queries获取报告关联的查询/{workspace}/reports/{report_token}/queries/{query_token}/chartsget_all_charts获取查询下的图表/{workspace}/data_sourcesget_all_data_sources获取数据源用于血缘解析/{workspace}get_workspace获取工作区信息用于连接测试采集报告时采用分页策略每页固定请求 30 条报告REPORTS_PAGE_SIZE 30当返回条数小于 30 时认为该空间遍历完毕若连续两页返回相同内容会抛出 Mode returned the same report page twice 异常以防御死循环。这些行为均有对应的单元测试验证见 test_client.py如 paginates every space、requests page after exactly thirty results 等用例。血缘解析原理Mode 连接器的血缘采集是整套实现中最有技术含量的部分其链路为底层数据表 → 查询数据模型 → 报告仪表盘。整个流程在 metadata.py 的yield_dashboard_lineage_details中完成大致分为以下步骤解析数据源从每条查询中取出data_source_id在get_all_data_sources预取的数据源字典中定位对应的数据库名称database字段解析 SQL使用LineageParser对查询的raw_query做 SQL 解析提取source_tables源表集合限定搜索范围将数据源的数据库名、查询解析出的 schema/table 名与可选的数据库服务前缀db_service_prefix组合通过build_es_fqn_search_string构造全文检索串在 OpenMetadata 中搜索匹配的 Table 实体确定血缘目标调用_resolve_lineage_target在数据模型采集启用且数据模型已入库的情况下以查询数据模型为血缘终点to_entity否则回退为报告仪表盘产出血缘为每个匹配到的源表生成AddLineageRequest。从实现细节可以推断血缘解析的质量直接取决于查询是否带有data_source_id、数据源是否提供数据库名称、以及源表在 OpenMetadata 中是否已被其他数据库连接器采集入库。若数据源缺库名或查询缺 SQL对应查询会被跳过并在日志中给出 warning不会中断整体采集。使用限制与注意事项结合文档与源码使用 Mode 连接器时有以下几点需要特别留意Business Workspace 强依赖非 Business 工作区无法调用 Mode API这是连接器生效的硬性前提数据模型列信息缺失Mode 查询 API 不返回结果列元数据因此所有查询数据模型的columns列表为空这是上游 API 的限制而非 OpenMetadata 的问题可见性边界只能采集 API Token 可见的空间、报告、查询、图表与数据源。如果希望完整编目整个工作区请确保 Token 对应的工作区成员对每个空间与报告都有访问权限采集范围受过滤规则影响filterQueryParam与四类 Filter Pattern 会改变最终入库的实体集合配置血缘相关需求时请留意dataModelFilterPattern对链路形态的副作用血缘依赖已有表实体表 → 数据模型/仪表盘的血缘需要先在 OpenMetadata 中通过对应的数据库连接器将底层表采集入库否则 SQL 解析出的源表无法被检索匹配。相关代码与测试索引连接器配置文档Mode.md连接参数 SchemamodeConnection.json客户端与认证实现mode/client.py采集主逻辑mode/metadata.py连接测试实现mode/connection.py服务注册入口mode/service_spec.py连接单元测试test_connection.py客户端单元测试test_client.py拓扑级单元测试test_mode.py以上源码与测试共同构成了 Mode 连接器的完整证据链从 UI 表单参数到 JSON Schema 校验从 Basic Auth 客户端到分页采集与血缘解析读者可沿着这些文件深入理解连接器的每一个细节并在排查采集问题时快速定位到对应代码路径。【免费下载链接】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),仅供参考
返回列表