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

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

概述

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


环境配置与数据摄取

1. 配置文件示例(YAML)

source:type: mysqlserviceName: mysql_devserviceConnection:config:type: Mysqlusername: adminpassword: passhostPort: localhost:3306databaseSchema: sales_dbsourceConfig:config:includeViews: trueincludeTables: truemarkDeletedTables: truelineageQuery: "SELECT * FROM information_schema.views WHERE view_definition LIKE '%{table}%';"
sink:type: metadata-restconfig: {}
workflowConfig:openMetadataServerConfig:hostPort: "http://localhost:8585/api"authProvider: openmetadatasecurityConfig: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:@staticmethoddef parse(sql: str) -> List[LineageEdge]:# 使用 ANTLR 解析 SQL,生成语法树parser = SqlLineageParser(sql)return parser.get_lineage_edges()

4. 流程图

http://www.lryc.cn/news/537477.html

相关文章:

  • 计算机组成原理—— 总线系统(十二)
  • 详解如何使用Pytest内置Fixture tmp_path 管理临时文件
  • Banana Pi OpenWRT One 官方路由器的第一印象
  • Golang GORM系列:GORM事务及错误处理
  • NLLB 与 ChatGPT 双向优化:探索翻译模型与语言模型在小语种应用的融合策略
  • ASP.NET Core SixLabors.ImageSharp v1.0 的图像实用程序类 web示例
  • ffmpeg configure 研究1-命令行参数的分析
  • 数据结构与算法之排序算法-归并排序
  • 高血压危险因素分析(项目分享)
  • java集合框架之Map系列
  • android设置添加设备QR码信息
  • Python实现微博关键词爬虫
  • linux概念详解
  • 【设计模式】-工厂模式(简单工厂、工厂方法、抽象工厂)
  • AMESim中批处理功能的应用
  • 《Spring实战》(第6版)第1章 Spring起步
  • E卷-特殊的加密算法-(200分)
  • QT 异步编程之多线程
  • K-均值(K-means)
  • AI agent 未来好的趋势:AI医疗影像、智能客服、个性化推荐
  • 接入 SSL 认证配置:满足等保最佳实践
  • 微软AutoGen高级功能——Selector Group Chat
  • w206基于Spring Boot的农商对接系统的设计与实现
  • Springboot中使用Elasticsearch(部署+使用+讲解 最完整)
  • 深度求索—DeepSeek API的简单调用(Java)
  • flv实时监控视频
  • 有哪些免费的SEO软件优化工具
  • 跟着ai辅助学习vue3
  • 什么是Mustache
  • C++,STL容器适配器,priority_queue:优先队列深入解析