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

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. 流程图


http://www.kler.cn/a/547599.html

相关文章:

  • stm32 CubeMx 实现SD卡/sd nand FATFS读写测试
  • 2025年2月14日笔记 3
  • DeepSeek 可视化部署手册:环境配置与运维指南
  • DEIM:加速Transformer架构目标检测的突破,YOLO系列的启发
  • Qt中QApplication 类和uic、moc程序
  • P6792 [SNOI2020] 区间和 Solution
  • 哈希表(C语言版)
  • Dubbo 集群策略:负载均衡与容错机制
  • CST无限平面圆孔RCS --- 单站, 多角单频,T求解器(远场或探针),去耦平面
  • SOUI基于Zint生成Code 2 of 5码
  • AI预测气候变化:数据能否揭示未来的风暴?
  • 【若依免登录】登录状态已过期,您可以继续留在该页面,或者重新登录
  • 机试刷题_寻找第K大【python】
  • ElasticSearch基础和使用
  • UniApp 中制作一个横向滚动工具栏
  • 如何在 Mac 上解决 Qt Creator 安装后应用程序无法找到的问题
  • 技术速递|5 分钟用 GitHub Copilot Agent Mode 创建 Copilot Chat 应用
  • js考核第三题
  • 20250214 随笔 Elasticsearch(ES)索引数据 vs. 业务数据库冗余双写
  • 智能AI之隐私安全,尤其是医疗