滾屏網(wǎng)站模板網(wǎng)站生成器
概述
OpenMetadata 是一個開源的元數(shù)據(jù)管理平臺,支持端到端的血緣關(guān)系追蹤。對于 MySQL 數(shù)據(jù)庫,OpenMetadata 通過解析表的外鍵約束、視圖定義及查詢?nèi)罩荆蛇x)構(gòu)建表級血緣。本文結(jié)合源碼分析其實現(xiàn)機制。
環(huán)境配置與數(shù)據(jù)攝取
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. 關(guān)鍵配置項
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()