DataHub MariaDB 数据源接入指南:元数据、血缘与使用统计的完整实践
DataHub MariaDB 数据源接入指南元数据、血缘与使用统计的完整实践【免费下载链接】datahubThe Context Platform for your Data and AI Stack项目地址: https://gitcode.com/GitHub_Trending/da/datahubMariaDB 是广泛用于存储与查询分析型或操作型数据的数据库平台。DataHub 的 MariaDB 集成以 MySQL Source 为基础实现用于抽取数据集/表/视图、Schema 字段、容器等核心元数据并支持表级与列级血缘、数据画像以及有状态删除检测。本文以仓库中的 MariaDB Source 文档 为主体结合 MariaDB 源码实现、MySQL 基类 与集成测试完整讲解配置方式、能力矩阵、使用统计与血缘提取原理帮助你用一份可复制的 recipe 将 MariaDB 接入 DataHub。概览DataHub 如何集成 MariaDBMariaDB 是一个用于存储和查询分析型或操作型数据的数据平台更多信息可参考官方 MariaDB 文档mariadb.org。DataHub 对 MariaDB 的集成覆盖了以下核心元数据实体datasets / tables / views将数据库中的表与视图作为 Dataset 实体入库schema fields抽取每张表/视图的字段与列级 Schema 信息containers按数据库/平台作用域组织资产形成容器层级lineage支持表级与列级血缘data profiling可选的表级数据画像行数、大小等统计stateful deletion detection有状态删除检测用于发现已删除的实体。从源码结构看MariaDBSource 直接继承自MySQLSource仅重写了get_platform()以返回平台标识mariadb其配置类复用了MySQLConfig见config_class(MySQLConfig)装饰器。也就是说MariaDB 的绝大多数行为、配置项与底层查询逻辑都与 MySQL 源共享这对熟悉 MySQL 接入的用户是显著优势。概念映射源概念到 DataHub 概念虽然 MariaDB 专属的概念映射仍在完善中但以下展示了 DataHub 的通用概念映射关系源概念DataHub 概念说明Platform/account/project scope平台/账号/项目作用域Platform Instance、Container在平台上下文内组织资产Core technical asset如表/视图/主题/文件Dataset主要的被采集技术资产Schema fields / columns字段/列SchemaField支持 Schema 抽取时包含Ownership and collaboration principals所有者与协作者CorpUser、CorpGroup由支持所有权与身份元数据的模块发出Dependencies and processing relationships依赖与处理关系Lineage edges血缘边当支持并启用血缘抽取时可用对于 MariaDB 源而言两张表表/视图会成为 Dataset列会成为 SchemaField数据库本身可作为 Container 组织资产。快速开始编写 MariaDB 采集 Recipe仓库在 metadata-ingestion/docs/sources/mariadb/mariadb_recipe.yml 中提供了一份完整的示例 recipe是实际接入的起点。完整内容如下source: type: mariadb config: # 连接坐标 host_port: localhost:3306 database: dbname # 凭据 username: root password: example # 可选从查询历史中推导使用统计与查询级血缘 # include_usage_statistics: true # usage_source: performance_schema # 默认值规范化摘要无需额外配置 # usage_source: general_log # 字面 SQL 按用户归因需要 general_logON, log_outputTABLE # 如果需要用 SSL 连接 MariaDB # options: # connect_args: # ssl_ca: path_to/server-ca.pem # ssl_cert: path_to/client-cert.pem # ssl_key: path_to/client-key.pem # sink configs写入目标例如 datahub-rest / file要点说明type: mariadb是 DataHub Ingestion 框架中的源类型标识对应 connector 注册表 中的mariadb条目host_port默认值为localhost:3306scheme固定为mysqlpymysql见 MySQLConnectionConfigdatabase指定目标库若留空则枚举全部数据库并可用database_pattern过滤。运行采集的命令为datahub ingest -c mariadb_recipe.yml集成测试中同样使用run_datahub_cmd([ingest, -c, f{config_file}])的方式执行采集可参考 test_mariadb.py。核心配置项详解以下配置继承自MySQLConfig定义于 mysql.py对 MariaDB 源完全适用。连接与认证配置项类型默认值说明host_portstringlocalhost:3306MariaDB 主机与端口usernamestring无连接用户名passwordstring无连接密码databasestring无目标数据库为空则枚举全部并受database_pattern过滤auth_modeenumPASSWORDPASSWORD标准账号密码或AWS_IAMAWS RDS IAM 认证aws_configobject默认AWS RDS IAM 认证配置仅在auth_modeAWS_IAM时使用optionsobject无透传给 SQLAlchemy 引擎的额外选项如connect_args中的 SSL 参数关于auth_modeAWS_IAM源码在初始化时通过parse_host_port解析主机与端口端口必填并通过RDSIAMTokenManager生成临时令牌在每次数据库连接时通过 SQLAlchemy 的do_connect事件监听器注入passwordPyMySQL 要求 RDS IAM 认证必须启用 SSL见 mysql.py 与 mysql.py。过滤模式database_patternAllowDenyPattern类型按数据库名过滤默认全部允许源码中系统库information_schema、performance_schema、mysql、sys会被无条件排除见 mysql.py 与_is_allowed_database。schema_pattern、table_pattern、view_pattern沿用 SQL 通用源的层级过滤模式。存储过程include_stored_proceduresboolean默认true是否采集存储过程procedure_patternAllowDenyPattern按database.schema.procedure_name全名匹配过滤例如Customer.public.customer.*匹配 Customer 库 public schema 下所有以 customer 开头的存储过程。采集存储过程时源码从information_schema.ROUTINES读取过程名、定义与语言对于原生 SQL 存储过程EXTERNAL_LANGUAGE为 NULL会默认设为QueryLanguageClass.SQL从而保证过程级血缘提取能够正常触发见 mysql.py。集成测试 mariadb_to_file.yml 演示了通过procedure_pattern只采集test_db.*并排除.*_temp$的过滤方式。数据画像Profilingprofiling配置复用GEProfilingConfig并额外提供两个 MariaDB/MySQL 特有的护栏参数见 MySQLProfilingConfig配置项默认值说明profiling.enabledfalse是否启用数据画像profiling.profile_table_row_limitnull仅对估算行数小于该值的表做画像。行数来自information_schema.tables.table_rows存储引擎统计可能过期设置为null表示不限profiling.profile_table_size_limitnull仅对大小小于指定 GB 数的表做画像大小取自information_schema.tables.data_lengthnull表示不限这两项护栏值必须大于 0否则配置校验会直接报错ValueError: profile_table_row_limit must be greater than 0 (or null to disable filtering)。源码在画像候选生成时读取_table_rows_cache与dataset_name_to_storage_bytes由information_schema.tables全表扫描填充超限的表会被记入profiling_skipped_row_limit/profiling_skipped_size_limit统计。源码还会在运行结束后给出画像耗时的表建议若某张表画像耗时超过 30 秒会提示设置profile_table_row_limit、profile_table_size_limit或调低profiling.max_workers并发全表扫描会倍增峰值内存建议例如max_workers5以缓解内存压力见 mysql.py。注意profile_if_updated_since_days对 MySQL/MariaDB 画像不生效会输出提示后被忽略。使用统计与查询血缘两种查询历史来源这是 MariaDB 集成最具特色的能力。开启include_usage_statistics: true后DataHub 会读取查询历史同时产出使用统计datasetUsageStatistics与查询级表血缘。查询历史的来源由usage_source控制二选一方式一performance_schema默认零配置source: type: mariadb config: host_port: localhost:3306 database: dbname username: root password: example include_usage_statistics: true usage_source: performance_schema # 默认值底层查询performance_schema.events_statements_summary_by_digest见 mysql.py每行是一个规范化语句摘要DIGEST_TEXT去除了字面量替换为?的语句文本COUNT_STAR自上次计数器重置以来服务器重启或表被 truncate的执行次数LAST_SEEN最近一次执行时间SCHEMA_NAME语句所在库。特点与注意点无需任何服务端配置只要 statements digest 消费者已启用、用户对 performance_schema 有 SELECT 权限即可无按用户归因摘要按语句聚合不携带执行者因此不会产生 per-user 使用统计集成测试断言userCounts为空见 test_mariadb.py首次采集可能产生峰值由于COUNT_STAR是累计值启用后第一次采集可能把历史全部归到一个时间戳上出现单日大峰值属预期现象每条摘要以usage_multipliercount计入聚合器。方式二general_log字面 SQL 按用户归因source: type: mariadb config: host_port: localhost:3306 database: dbname username: root password: example include_usage_statistics: true usage_source: general_log # 需要服务端开启 general log要求 MariaDB 服务端开启general_logON且log_outputTABLE并且连接用户对mysql.general_log表有 SELECT 权限。底层查询见 mysql.pySELECT event_time, user_host, thread_id, command_type, CONVERT(argument USING utf8mb4) AS argument FROM mysql.general_log WHERE command_type IN (Query, Init DB, Connect) AND event_time BETWEEN :start_time AND :end_time ORDER BY event_time, thread_id特点与注意点保留字面 SQL、执行用户与真实时间戳因此可以按用户归因使用统计由于 general_log 没有 schema 列源码通过跟踪每个会话thread_id的当前库来解析未限定表名Connect事件解析 userhost on db using protocol 中的初始库Init DB/USE db语句切换当前库会话映射采用 LRU 上限默认最多跟踪 10000 个会话见 mysql.py只解析SELECT、INSERT、UPDATE、DELETE、REPLACE、WITH、CALL、MERGE等 DML 语句见_DML_LEADING_KEYWORDSSET、SHOW、COMMIT等管理语句被跳过用户名取自user_host的priv_user[login_user] host [ip]格式若用户名不是邮箱形式可用email_domain配置项补全域名如 LDAP 登录名使其正确映射到 CorpUser例如email_domain: example.comConnect事件还用于记录会话初始默认库当客户端连接时未选择数据库db槽位为空则该会话在出现USE/Init DB前 schema 未知相关语句会被跳过调试日志提示 has no known database。两条来源路径均通过_usage_connection上下文管理器建立一个一次性、用完即释放NullPool dispose的 UTC 时区连接SET time_zone 00:00保证时间戳解析一致见 mysql.py。若读取查询历史失败如消费者未启用、权限不足仅记录 warning 并跳过使用统计不会中断已完成的元数据采集。血缘能力视图血缘与查询血缘根据 mariadb.py 的能力声明MariaDB 源的血缘能力分为两档能力默认状态说明LINEAGE_COARSE粗粒度默认开启视图表级血缘由include_view_lineage控制开启使用统计后还可从查询历史推导表级血缘LINEAGE_FINE细粒度/列级默认开启视图列级血缘由include_view_column_lineage控制开启使用统计后还可从查询历史推导列级血缘实现上MySQLSource._create_aggregator在开启include_usage_statistics时会构造一个查询 使用统计 血缘全功能的SqlParsingAggregator见 mysql.pygenerate_lineageTrue查询历史推导表血缘与include_view_lineage相互独立后者只控制视图定义血缘generate_queriesTrue、generate_query_usage_statisticsTrue、generate_usage_statisticsTrue同时产出查询与使用统计generate_operationsFalse两种来源均不产出操作operationaspect_is_allowed_table/_is_temp_table回调确保未被采集的表临时表、被过滤库的表、解析器误展开的db.db.table引用仅作为血缘中转节点不会产生幽灵数据集。另外源码会保存发现的 Schema 到解析器即使未启用视图血缘只要开启使用统计也需要见_save_schema_to_resolver保证未限定的表引用能被正确解析。能力矩阵小结以下能力来自 mariadb.py 的装饰器声明能力支持情况Platform Instance默认启用Domains通过domain配置字段支持Data Profiling数据画像可选通过配置启用Usage Stats使用统计可选通过include_usage_statistics开启读取 performance_schema 摘要默认或 mysql.general_logusage_source: general_log同时产出查询级表血缘Lineage - Coarse粗粒度视图默认启用include_view_lineage表级血缘可在开启使用统计后由查询历史推导Lineage - Fine列级视图默认启用include_view_column_lineage列级血缘可在开启使用统计后由查询历史推导MariaDB 源在 mariadb.py 中标注的 SupportStatus 为GA正式可用。测试验证集成测试与单元测试仓库为 MariaDB 源提供了完整的测试覆盖是理解行为边界的绝佳参照单元测试test_mariadb_source.py 验证MariaDBSource.platform mariadb确认平台标识正确设置集成测试test_mariadb.py 使用mariadb:11.4Docker 镜像见 docker-compose.yml执行三类场景元数据采集以mariadb_to_file.yml为配置将结果写入 MCE JSON与 golden 文件mariadb_mces_golden.json对比校验覆盖存储过程采集与过程级血缘performance_schema 使用统计断言生成了raw_customer_data的使用统计、无 per-user 归因、查询血缘存在见 test_mariadb.pygeneral_log 使用统计断言按用户归因urn:li:corpuser:root出现在 userCounts 中且查询血缘存在见 test_mariadb.py连接测试对可达与不可达的 host_port 分别验证test connection成功与失败。这些测试中执行的使用工作负载由tests/test_helpers/mysql_usage_helpers.py提供与 MySQL 源共享。常见问题与排障使用统计未生成检查include_usage_statistics是否开启performance_schema 场景需确认 digest 消费者已启用且用户对performance_schema有 SELECT 权限general_log 场景需确认general_logON、log_outputTABLE且用户对mysql.general_log有 SELECT 权限。读取失败仅告警不中断。general_log 场景下部分语句被跳过会话在出现USE/Init DB/Connect前 schema 未知的语句会被跳过属于预期行为。首次启用使用统计出现单日大峰值performance_schema 的COUNT_STAR为累计值首次采集会把历史全部归到一个时间戳属已知现象可等待计数器重置后再次采集。画像未覆盖大表确认profile_table_row_limit/profile_table_size_limit是否为null或误设为 0/负数会直接校验失败行数为information_schema估算值可能过期可执行ANALYZE TABLE刷新。存储过程血缘缺失确认include_stored_procedures为 true 且procedure_pattern未过滤掉目标过程原生 SQL 过程的语言默认按 SQL 处理以支持血缘提取。延伸阅读MariaDB 源文档本文的原始依据MariaDB 示例 Recipe可直接复制的配置模板MariaDB 源码实现能力声明与平台标识MySQL 基类实现全部配置项与查询历史/画像/存储过程逻辑MariaDB 集成测试 与 单元测试行为边界的可执行验证通用 SQL 源概念映射可参考 DataHub 文档中的 metadata-model 与概念说明docs/what 目录。【免费下载链接】datahubThe Context Platform for your Data and AI Stack项目地址: https://gitcode.com/GitHub_Trending/da/datahub创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

shared_preferences_web 版本演进全解析:Web 端 LocalStorage 持久化插件的迭代路线与技术实现

shared_preferences_web 版本演进全解析:Web 端 LocalStorage 持久化插件的迭代路线与技术实现

shared_preferences_web 版本演进全解析:Web 端 LocalStorage 持久化插件的迭代路线与技术实现 【免费下载链接】packages A collection of useful packages maintained by the Flutter team 项目地址: https://gitcode.com/GitHub_Trending/pac/packages 本…

2026/9/18 21:58:22 阅读更多 →
Windows批处理(.bat)与PowerShell(.ps1)脚本全面对比

Windows批处理(.bat)与PowerShell(.ps1)脚本全面对比

1. 脚本文件的基础认知在Windows环境下工作多年的老鸟们,肯定都接触过.bat和.ps1这两种脚本文件。它们就像是系统管理员手中的瑞士军刀,能够自动化完成各种繁琐操作。但很多刚入行的朋友经常搞不清楚两者的区别,甚至把它们混为一谈。今天我就…

2026/9/18 21:58:22 阅读更多 →
强化学习与POMDP驱动的自动驾驶行为决策:从DQN到分层决策

强化学习与POMDP驱动的自动驾驶行为决策:从DQN到分层决策

简介:基于强化学习的无人驾驶车辆行为决策研究进展是一份面向自动驾驶、强化学习与智能决策方向的综述型文档,适合科研人员、算法工程师及研究生快速建立领域认知。资源为单个docx文档,约37KB,内容紧凑、结构清晰,便于…

2026/9/18 21:57:22 阅读更多 →

最新新闻

本地知识库问答系统部署指南:Ollama+FAISS+Rerank+LLM全链路实践

本地知识库问答系统部署指南:Ollama+FAISS+Rerank+LLM全链路实践

如果你现在的目标非常明确,就是要在自己的机器上把一套本地知识库问答系统跑起来,那Ollama FAISS Embedding Rerank LLM这套组合目前是所有方案里最值得照着我抄作业的。我最近一个月把整条链路从零到一完整部署了至少三遍,踩遍了 Ollama…

2026/9/18 22:37:45 阅读更多 →
Mapster 构造函数映射指南:用 ConstructUsing 与 MapToConstructor 掌控目标对象创建

Mapster 构造函数映射指南:用 ConstructUsing 与 MapToConstructor 掌控目标对象创建

Mapster 构造函数映射指南:用 ConstructUsing 与 MapToConstructor 掌控目标对象创建 【免费下载链接】Mapster A fast, fun and stimulating object to object Mapper 项目地址: https://gitcode.com/GitHub_Trending/ma/Mapster Mapster 默认通过无参构造函…

2026/9/18 22:37:45 阅读更多 →
Hermes Agent 跑 ima 全自动入库,Base URL 填 TaoToken 的 API

Hermes Agent 跑 ima 全自动入库,Base URL 填 TaoToken 的 API

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/18 22:37:45 阅读更多 →
Cline 还要去 DeepSeek 官方申请 token?TaoToken 这样改接口地址

Cline 还要去 DeepSeek 官方申请 token?TaoToken 这样改接口地址

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/18 22:37:45 阅读更多 →
文件头必填项校验:DeepSeek Harness 用 TaoToken 决定 Obsidian 召回

文件头必填项校验:DeepSeek Harness 用 TaoToken 决定 Obsidian 召回

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/18 22:37:45 阅读更多 →
大语言模型学习路线:从零基础到AI工程师

大语言模型学习路线:从零基础到AI工程师

1. 为什么现在是大语言模型学习的最佳时机?2023年被称为"大语言模型元年",各种参数规模超过百亿的模型如雨后春笋般涌现。但不同于早期需要专业实验室才能接触的AI技术,如今个人开发者只需一台普通电脑就能运行微调后的开源模型。这…

2026/9/18 22:36:44 阅读更多 →

日新闻

Matlab手写逻辑回归:从数学原理到多变量概率预测模型实现

Matlab手写逻辑回归:从数学原理到多变量概率预测模型实现

很多朋友第一次看到"逻辑回归"这四个字,第一反应就是——这玩意儿是个回归模型吧?我当年也是在Matlab里跑完一段代码,看着输出的0.73、0.86这种概率值,才回过神来:这家伙其实是披着回归外衣的分类神器&#…

2026/9/18 0:00:28 阅读更多 →
高值医用耗材研报PDF:用Python完成字段抽取、清洗与趋势预测

高值医用耗材研报PDF:用Python完成字段抽取、清洗与趋势预测

简介:这份报告是2023-2028年高值医用耗材行业调研及发展前景趋势预测报告,面向医疗器械企业管理者、投资机构、行业研究人员及关注政策变化的从业者,用于把握行业监管动向、市场格局与未来趋势。报告以PDF格式呈现,共1个文件、整体…

2026/9/18 0:00:28 阅读更多 →
三维高斯场赋能世界模型:几何语义蒸馏与机器人决策实战

三维高斯场赋能世界模型:几何语义蒸馏与机器人决策实战

先把我自己的背景交代一下:我之前在搞具身智能和机器人导航相关的项目,很长一段时间里都被“环境表示”这件事卡着。传统做法是用点云或者网格做几何建模,语义信息另外再跑分割模型,两套东西各管各的,时间一长就会发现…

2026/9/18 0:00:28 阅读更多 →

周新闻

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验 【免费下载链接】ai The AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and ag…

2026/9/16 19:03:19 阅读更多 →
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化 【免费下载链接】refine A React Framework for building internal tools, admin panels, dashboards & B2B apps with unmatched flexibility. 项目地址: https://gitcode.com/GitH…

2026/9/17 7:57:36 阅读更多 →
Flutter应用改名全指南:从Android到iOS的配置与工具实践

Flutter应用改名全指南:从Android到iOS的配置与工具实践

刚接一个外包项目时,甲方要求把工程里临时用的应用名改成正式产品名。我本来觉得“改名”这种小事,打开配置文件改一行不就完了?结果真动手才发现,Flutter项目里“应用名称”根本不是一处配置,而是一整套散落在 Androi…

2026/9/17 10:19:14 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/16 22:31:27 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/15 21:39:18 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/16 22:32:59 阅读更多 →