news 2026/9/14 19:49:35

OpenMetadata Doris 连接器接入指南:连接配置、SSL 与元数据采集实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
OpenMetadata Doris 连接器接入指南:连接配置、SSL 与元数据采集实战

OpenMetadata Doris 连接器接入指南:连接配置、SSL 与元数据采集实战

【免费下载链接】OpenMetadataThe Open Context Layer for Data and AI , OpenMetadata is the open platform for building trusted data context and business semantics for humans, AI assistants, and agents.项目地址: https://gitcode.com/GitHub_Trending/op/OpenMetadata

导读

本文基于 OpenMetadata 仓库中的 Doris 连接器配置文档,系统讲解如何在 OpenMetadata 中创建 Doris 数据库服务并完成元数据采集。你将掌握 Doris 连接器的全部连接参数(Scheme、Username、Host Port、Database Name、SSL 证书配置等)的语义与填写要点,理解 OpenMetadata 对 Doris 这类"无 Database 概念"数据源的特殊层级建模方式,并通过仓库源码了解连接器在底层如何建立 SQLAlchemy Engine、如何执行表/列/分区元数据抽取。读完本文,你可以直接对照表单逐项完成 Doris 服务的接入与验证。

前置要求

Doris 连接器是 OpenMetadata 数据库类连接器家族中的一员,其配置入口位于 UI 的 Database 服务创建页面(Settings → Database Services → Add New Service → Doris)。在开始配置前,需要确保:

  • OpenMetadata 服务已正常部署并运行(参考仓库根目录的 部署文档 与 配置说明);
  • 具备可访问的 Doris 实例,其 FE(Frontend)节点暴露了 MySQL 协议查询端口(默认9030);
  • 用于连接的账号拥有读取 Doris 元数据所需的最低权限(可读取information_schema中表、列、分区信息)。

值得说明的是,Doris 连接器对外的这份配置文档只是一层"参数说明书",其背后的真实连接与采集逻辑由仓库中的源码实现支撑,对应实现位于 ingestion/src/metadata/ingestion/source/database/doris/ 目录,包含connection.py(连接构建)、metadata.py(元数据抽取)、queries.py(采集 SQL)、lineage.py(视图血缘)与service_spec.py(服务装配)。下文在讲解每个配置项时,会同步引用这些源码作为佐证。

Connection Details(连接详情)

以下小节与 OpenMetadata UI 中 Doris 服务连接表单的字段一一对应。表单字段与数据模型中的属性定义保持一致,其完整 JSON Schema 定义位于 openmetadata-spec/src/main/resources/json/schema/entity/services/connections/database/dorisConnection.json。

Scheme(连接协议)

Scheme是 SQLAlchemy 驱动方案选项,即连接 URL 中使用的驱动 scheme。对 Doris 而言,该值固定为doris,由 Doris 的 SQLAlchemy 方言(pydoris.sqlalchemy.dialect.DorisDialect)提供支持。在 dorisConnection.json 中可以看到其枚举定义:

"dorisScheme": { "description": "SQLAlchemy driver scheme options.", "type": "string", "enum": ["doris"], "default": "doris" }

该字段通常无需修改,保留默认值doris即可。

Username(用户名)

用于连接 Doris 的用户名。该用户应具备读取 Doris 中全部元数据的权限(即能查询information_schema相关的表、列、注释、分区信息)。在 dorisConnection.json 中该字段被声明为必填项(required: ["hostPort", "username"]),因此创建服务时用户名与主机端口二者缺一不可。

实际采集时,连接器会以该用户身份执行一组元数据查询(详见 queries.py),包括:

  • DORIS_GET_TABLE_NAMES:从INFORMATION_SCHEMA.tables读取表名与引擎类型;
  • DORIS_SHOW_FULL_COLUMNS:通过SHOW FULL COLUMNS FROM {table_name}获取列的 Field、Type、Collation、Null、Key、Default、Extra、Privileges、Comment 等信息;
  • DORIS_TABLE_COMMENTS:读取表注释;
  • DORIS_PARTITION_DETAILS:通过SHOW PARTITIONS FROM {table_name}读取分区信息。

如果用户名权限不足,上述查询将失败,表现为连接测试或元数据采集报错,因此在配置时请优先确认该账号对 Doris 元数据的只读访问能力。

Password(密码)

对应用户的登录密码。该字段在 Schema 中以"format": "password"声明(见 dorisConnection.json),在 UI 表单中会以密码输入框呈现,存储与传输时会按 OpenMetadata 的凭据管理机制处理,不会明文展示。

Host Port(主机与端口)

该参数指定 Doris 实例的FE 主机名与查询端口,格式为hostname:port字符串,例如localhost:9030。需要注意:

  • 这里是 FE(Frontend)节点的MySQL 协议查询端口(默认9030),而非 BE(Backend)节点端口,也非 HTTP 访问端口(8030);
  • 该字段与 username 一样是必填项,见 dorisConnection.json 的required声明。

连接器底层通过BasicAuthStrategy基于该主机端口构建 SQLAlchemy Engine(见 connection.py):

class DorisConnection(BaseConnection[DorisConnectionConfig, Engine]): def _get_client(self) -> Engine: engine = BasicAuthStrategy(self.service_connection).build() self._on_close(engine.dispose) dialect = cast("DefaultDialect", engine.dialect) engine.dialect.identifier_preparer = DorisIdentifierPreparer(dialect) return engine

值得关注的是,Doris 相比 MySQL 保留了更多保留字,因此源码自定义了DorisIdentifierPreparer,其_requires_quotes直接返回True,即对所有标识符强制加引号,避免因保留字导致的 SQL 解析失败:

class DorisIdentifierPreparer(MySQLIdentifierPreparer): """Quote every identifier because Doris reserves more words than MySQL.""" def _requires_quotes(self, value: str) -> bool: return True

这也是 Host Port 之外,连接器在方言层面为 Doris 做的关键适配之一。

Database Name(数据库名称)

在 OpenMetadata 中,Database 服务的数据层级遵循如下结构:

Database Service > Database > Schema > Table

Doris 本身并没有传统意义上的 Database 概念(其元数据组织为 Catalog → Database → Table)。因此接入 OpenMetadata 时,连接器会为该服务创建一个统一的逻辑 Database 节点。如果你希望该 Database 在 OpenMetadata 中以default之外的名字呈现,就在此字段中指定名称;留空时默认使用default

这一点在 dorisConnection.json 中有明确描述:"Optional name to give to the database in OpenMetadata. If left blank, we will use default as the database name.",与 UI 文档表述完全一致。

Database Schema(数据库 Schema)

这是一个可选参数。当填写了某个 Schema 名称时,OpenMetadata 将只采集该单一 Schema 下的元数据;留空时则扫描 Doris 中的全部 Schema(对应 Doris 侧的 Database 概念)。Schema 级过滤同样适用于 dorisConnection.json 中定义的schemaFilterPatterntableFilterPatterndatabaseFilterPattern正则过滤模式——这些字段允许你用正则精确控制"采集哪些、排除哪些"。

从源码角度看,Schema 维度贯穿采集全程:

  • 表名与类型查询按TABLE_SCHEMA = :schema过滤(见 queries.py);
  • 表注释查询按TABLE_SCHEMA = :schema AND TABLE_NAME = :table_name定位(见 queries.py);
  • query_table_names_and_types在执行DORIS_GET_TABLE_NAMES时传入 schema 参数(见 metadata.py)。

因此合理设置该字段可以有效缩短采集时长、减少元数据噪音。

SSL CA(CA 证书)

用于 SSL 校验的 CA 证书内容,对应 SQLAlchemy 连接参数中的ssl_ca。当 Doris 服务端启用了 TLS 且你需要校验证书链时,在此粘贴或上传 CA 证书内容。

在 validateSSLClientConfig.json 中该字段被定义为format: passworduiFieldType: fileOrInput,即既支持直接输入文本,也支持上传证书文件;接受.pem.crt.cer.der.p12等常见证书格式。

SSL Certificate(SSL 证书)

用于客户端身份认证(mTLS)的客户端 SSL 证书,对应连接参数ssl_cert。当 Doris 要求客户端出示证书时使用,接受格式与 CA 证书相同(见 validateSSLClientConfig.json)。

SSL Key(SSL 私钥)

与 SSL 证书配套的私钥,对应连接参数ssl_key。三者(CA 证书、客户端证书、私钥)共同构成完整的 TLS 客户端配置,定义于 validateSSLClientConfig.json。

在 verifySSLConfig.json 中,SSL 校验模式共有三种取值,默认no-ssl

取值含义
no-ssl不启用 SSL(默认)
ignore忽略证书校验(不验证证书有效性,仅加密传输)
validate校验证书(此时需要配置 CA 证书等 SSLConfig)

只有选择validate时,上述三个证书字段才真正参与证书链校验与客户端认证。Doris 连接器的DorisSource在初始化时会调用check_ssl_and_init(service_connection)创建SSLManager并完成 SSL 环境的初始化(见 metadata.py),之后连接参数会带上对应的ssl_ca/ssl_cert/ssl_key

Connection Options(连接选项)

额外的连接选项,用于构建发送给服务的连接 URL,例如追加自定义的 URL 查询参数。它的 Schema 定义引用自 connectionBasicType.json 中的connectionOptions(键值对形式,值为字符串)。典型场景包括:指定charsetconnect_timeout等 SQLAlchemy URL 参数。

Connection Arguments(连接参数)

额外的连接参数,用于在连接时传递给服务端或驱动,例如安全或协议相关配置。与 Connection Options 的区别在于:Options 影响 URL 的构建,Arguments 作为键值对直接传给驱动层(如sslpool_size等)。同样定义于 connectionBasicType.json 中的connectionArguments。使用时应以你所用 Doris SQLAlchemy 驱动(pydoris)支持的参数名为准。

连接测试与元数据采集流程

连接测试(Test Connection)

创建服务或运行自动化工作流时,OpenMetadata 会调用DorisConnection.test_connection()验证连通性。该方法委托给test_connection_db_schema_sources(见 connection.py),即执行数据库类数据源通用的连接测试步骤(取连接、检查访问权限、验证元数据查询能力),默认超时时间为 3 分钟。测试通过意味着:主机端口可达、用户名密码正确、元数据读取权限就绪。

元数据采集(Metadata Ingestion)

创建服务后,需运行 Metadata Ingestion 工作流执行实际采集。DorisSource继承自CommonDbSourceService(见 metadata.py),逐表执行以下抽取逻辑:

  1. 表清单与类型识别:执行DORIS_GET_TABLE_NAMES获取表名与ENGINE字段,并通过RELKIND_MAP将引擎类型映射为 OpenMetadata 的表类型(见 metadata.py):
Doris ENGINEOpenMetadata TableType
DorisRegular
View / MEMORYView
OLAPMaterializedView
Iceberg / ICEBERGIceberg
  1. 列与约束抽取:通过SHOW FULL COLUMNS获取列的完整定义,_get_column会解析 Doris 特有的类型表示(见 metadata.py):
    • CHAR(1)→ 提取长度 → 系统类型CHAR
    • DECIMALV3(9, 0)/DECIMAL[9,0]→ 提取 precision/scale → 系统类型DECIMAL
    • DATEV2→ 归一化为DATE
    • ARRAY<...>→ 提取子类型作为arrayDataType
    • STRUCT<...>→ 递归解析为子列(children)。
  2. 表注释抽取:通过DORIS_TABLE_COMMENTS查询information_schema.tables中的TABLE_COMMENT(见 utils.py)。
  3. 分区信息抽取:通过SHOW PARTITIONS判断表是否为分区表,并提取分区键构建TablePartition(见 metadata.py)。
  4. 视图与血缘DorisLineageSource实现视图血缘的采集(见 lineage.py),通过DORIS_VIEW_DEFINITIONS识别 Engine 为View/MaterializedView的对象。

整个服务由service_spec.py统一装配:DefaultDatabaseSpec将元数据采集、血缘采集与连接三类实现绑定为完整的 Doris ServiceSpec(见 service_spec.py)。

最小连接配置示例

结合以上参数说明,一份完整的 Doris 服务连接配置(JSON 形式)示例如下:

{ "type": "Doris", "scheme": "doris", "username": "your_doris_user", "password": "your_doris_password", "hostPort": "localhost:9030", "databaseName": "doris_warehouse", "databaseSchema": "", "connectionOptions": {}, "connectionArguments": {}, "supportsMetadataExtraction": true, "supportsDBTExtraction": true, "supportsProfiler": true, "supportsQueryComment": true, "supportsViewLineageExtraction": true }

其中typescheme的默认值与枚举约束见 dorisConnection.json,能力开关(supports*)定义于同一文件的 L93-L111,分别标识该连接器对元数据抽取、dbt、Profiler、查询注释与视图血缘的原生支持。连接测试通过后即可在此基础上运行 Metadata Ingestion 工作流,将 Doris 的表、列、分区、注释与视图血缘持续同步到 OpenMetadata。

常见问题与排障建议

  • 连接测试失败(无法建立连接):优先检查hostPort是否指向 FE 节点的 MySQL 协议端口(默认9030),以及防火墙/网络策略是否放行该端口。
  • 权限不足报错:确认username对应的账号能正常执行SHOW FULL COLUMNS、查询INFORMATION_SCHEMA.tables等元数据语句;采集代码中对单表异常有兜底日志(Table description error for table [...],见 metadata.py),权限缺失时可在工作流日志中定位具体表。
  • SSL 配置无效:确认verifySSL选择为validate后再配置证书;证书文本以 PEM 格式粘贴或上传.pem/.crt/.cer/.der/.p12文件均可。
  • 采集范围过大:通过databaseSchemaschemaFilterPattern/tableFilterPattern正则缩小采集范围,避免全量扫描带来过长的采集时长。
  • 标识符被保留字干扰:Doris 保留字多于 MySQL,连接器已通过DorisIdentifierPreparer对所有标识符强制加引号处理(见 connection.py),如仍出现解析问题,请确认采集所用账号与表名拼写一致。

总结

Doris 连接器是 OpenMetadata 数据库服务矩阵中针对 Apache Doris 的专门适配,其 UI 配置文档(Doris.md)以表单字段为单位,完整覆盖了从基础认证(Scheme/Username/Password/Host Port)到数据范围控制(Database Name/Database Schema)、再到安全传输(SSL CA/SSL Certificate/SSL Key)与高级参数(Connection Options/Connection Arguments)的全部配置项。结合 dorisConnection.json 的 Schema 定义与 ingestion 源码 的实现,你可以清晰地把"表单字段"对应到"底层行为":强制标识符加引号的方言适配、information_schema驱动的表/注释采集、SHOW语句驱动的列/分区解析,以及独立的视图血缘通道。据此按本文步骤完成配置、测试与采集,即可将 Doris 纳入 OpenMetadata 的统一数据上下文管理。

【免费下载链接】OpenMetadataThe Open Context Layer for Data and AI , OpenMetadata is the open platform for building trusted data context and business semantics for humans, AI assistants, and agents.项目地址: https://gitcode.com/GitHub_Trending/op/OpenMetadata

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/14 19:49:01

统一Shuffle引擎Apache Uniffle:原理、部署与调优实战

每天认识一个组件&#xff1a;统一 Shuffle 引擎 Apache Uniffle做大数据的人应该都有过这样的经历&#xff1a;Spark 作业跑着跑着&#xff0c;Web UI 上出现一堆FetchFailedException&#xff0c;或者磁盘被 shuffle 中间文件写爆&#xff0c;又或者某个节点一挂&#xff0c;…

作者头像 李华
网站建设 2026/9/14 19:46:49

三个月价格腰斩,大模型的“聪明”正在贬值?

大模型肉搏战的另一面。文&#xff5c;魏琳华编&#xff5c;刘俊宏七、八、九三个月&#xff0c;大模型行业像打了鸡血。从海外“御三家”到国内大模型厂商&#xff0c;轮番发布的新模型让人目不暇接。9月第一周&#xff0c;OpenAI、Anthropic、谷歌你方唱罢我登场&#xff0c;…

作者头像 李华
网站建设 2026/9/14 19:46:24

鸿蒙与Flutter多引擎架构实践与优化

1. 鸿蒙与Flutter多引擎架构概述 在鸿蒙生态中集成Flutter框架时&#xff0c;多引擎架构是解决复杂业务场景的核心方案。不同于传统的单引擎模式&#xff0c;多引擎允许不同业务模块运行在独立的Flutter环境中&#xff0c;这种架构设计源于鸿蒙分布式能力的底层支持。每个Flutt…

作者头像 李华
网站建设 2026/9/14 19:43:04

如何扩展一台已停止的 Lume macOS 虚拟机磁盘并验证来宾容量?

如何扩展一台已停止的 Lume macOS 虚拟机磁盘并验证来宾容量&#xff1f; 【免费下载链接】cua Scale computer-use 2.0 with open-source drivers, cross-OS fleets, and benchmarks for training, evaluation, and data generation. 项目地址: https://gitcode.com/GitHub_…

作者头像 李华