当前位置: 首页 > news >正文

OpenMetadata 获取 MySQL 数据库表血缘关系详解

概述

OpenMetadata 是一个开源的元数据管理平台,支持端到端的血缘关系追踪。对于 MySQL 数据库,OpenMetadata 通过解析表的外键约束、视图定义及查询日志(可选)构建表级血缘。本文结合源码分析其实现机制。


环境配置与数据摄取

1. 配置文件示例(YAML)

source:
  type: mysql
  serviceName: mysql_dev
  serviceConnection:
    config:
      type: Mysql
      username: admin
      password: pass
      hostPort: localhost:3306
      databaseSchema: sales_db
  sourceConfig:
    config:
      includeViews: true
      includeTables: true
      markDeletedTables: true
      lineageQuery: "SELECT * FROM information_schema.views WHERE view_definition LIKE '%{table}%';"
sink:
  type: metadata-rest
  config: {
   }
workflowConfig:
  openMetadataServerConfig:
    hostPort: "http://localhost:8585/api"
    authProvider: openmetadata
    securityConfig:
      jwtToken: "token"

2. 关键配置项

  • lineageQuery: 自定义血缘分析 SQL(可选)
  • includeViews: 是否解析视图血缘
  • markDeletedTables: 处理已删除表

源码解析与核心流程

1. 入口类:MysqlSource

路径:openmetadata-ingestion/src/metadata/ingestion/source/database/mysql/connection.py

class MysqlSource(RDBMSSource):
    def __init__(self, config: WorkflowSource, metadata_config: OpenMetadataConnection):
        super().__init__(config, metadata_config)
        self.connection = MysqlConnection(config.serviceConnection.__root__.config)

2. 血缘提取核心方法

路径:openmetadata-ingestion/src/metadata/ingestion/source/database/common_db_source.py

class CommonDbSourceService(ABC):
    def process_table_lineage(self, table: Table) -> None:
        # 通过外键解析直接血缘
        for column in table.columns:
            if column.foreignKeys:
                self._build_foreign_key_lineage(table, column)
        
        # 通过视图定义解析
        if self.config.sourceConfig.config.includeViews:
            view_def = self._get_view_definition(table.name)
            self._parse_view_lineage(view_def, table)

3. SQL 解析器

路径:openmetadata-ingestion/src/metadata/ingestion/source/database/lineage/parser.py

class LineageParser:
    @staticmethod
    def parse(sql: str) -> List[LineageEdge]:
        # 使用 ANTLR 解析 SQL,生成语法树
        parser = SqlLineageParser(sql)
        return parser.get_lineage_edges()

4. 流程图

相关文章:

  • 【kafka系列】broker
  • DeepSeek官方推荐的AI集成系统
  • Windows安装Rust环境(详细教程)
  • 解读 Flink Source 接口重构后的 KafkaSource
  • AcWing——61. 最长不含重复字符的子字符串
  • 基于AIOHTTP、Websocket和Vue3一步步实现web部署平台,无延迟控制台输出,接近原生SSH连接
  • 刷题记录(回顾)HOT100 二叉树-10: ​199. 二叉树的右视图
  • 【仪器仪表专题】案例:示波器控制通道开关SCPI命令不同的原因
  • 使用verilog 实现cordic 算法 ---- 向量模式
  • 【java】方法--拷贝数组
  • Hami项目开发笔记
  • 1.从零开始学会Vue--{{基础指令}}
  • 浅介绍redis特性
  • DeepSeek-R1本地部署配置要求
  • vscode配置django环境并创建django项目(全图文操作)
  • 每天五分钟深度学习框架pytorch:搭建谷歌的Inception网络模块
  • Vue3折线图,柱状图,饼图,各种图表,适用于所有全平台
  • Vscode 主题,文件图标,插件
  • Kotlin 2.1.0 入门教程(二十一)数据类
  • AI Agent 有哪些痛点问题
  • 瑞士联邦主席凯勒-祖特尔、联邦副主席帕姆兰会见何立峰
  • 巴基斯坦外长:印巴已同意立即停火
  • 2025年4月份CPI环比由降转涨,核心CPI涨幅稳定
  • AI药企英矽智能第三次递表港交所:去年亏损超1700万美元,收入多数来自对外授权
  • 云南一餐馆收购长江野生鱼加工为菜品,被查处罚款
  • 中华人民共和国和俄罗斯联邦关于进一步加强合作维护国际法权威的联合声明