DataHub 接入 Vertica 元数据摄取完全指南:能力矩阵、配置详解与故障排查
2026/9/19 17:28:36 网站建设 项目流程

DataHub 接入 Vertica 元数据摄取完全指南:能力矩阵、配置详解与故障排查

【免费下载链接】datahubThe Context Platform for your Data and AI Stack项目地址: https://gitcode.com/GitHub_Trending/da/datahub

导读

本文围绕 DataHub 官方 Vertica 摄取模块(verticasource)展开,系统梳理该模块支持摄取的核心元数据实体(数据库、Schema、表、视图、Projection、ML 模型)、能力边界与限制、完整可运行的配置示例,并结合仓库源码与集成测试说明每项配置背后的实现原理,以及当摄取失败时应遵循的排查路径。读完本文,你将能够独立编写 Vertica → DataHub 的摄取 Recipe、按需裁剪能力开关,并快速定位常见摄取问题。

模块概览:Vertica 元数据摄取到 DataHub

Vertica 是用于存储和查询分析型或操作型数据的列式分析数据库。DataHub 的vertica模块负责把 Vertica 中的元数据摄取进 DataHub,形成可搜索、可治理的元数据资产。

从模块说明文档 vertica_pre.md 可以看到,该插件(Plugin)面向生产环境的摄取工作流,提取的内容包括:

  • 数据库(Database)、Schema、视图(View)、表(Table)、Projection的元数据
  • 表级血缘(Table level lineage)
  • ML 模型(ML Models)元数据

从 README.md 的 Overview 来看,该集成还覆盖了 schema 字段、容器(container)层级,并支持表级/列级血缘、数据画像(data profiling)以及基于有状态摄取(stateful ingestion)的删除检测。

概念映射

原文档将 Vertica 源概念与 DataHub 概念做了如下映射,这是理解摄取产物在 DataHub 中如何落地的关键:

源概念(Source Concept)DataHub 概念(DataHub Concept)备注
Vertica平台Data Platform对应urn:li:dataPlatform:vertica
表(Table)Dataset摄取为 Dataset 实体
视图(View)Dataset摄取为 Dataset 实体
ProjectionDataset摄取为 Dataset 实体,并带有PROJECTIONS子类型

关于 DataHub 中实体(Entity)与数据集(Dataset)的通用概念,可参考 docs/what/entity.md。从集成测试的黄金文件 vertica_mces_with_db_golden.json 可以看到实际的 MCE 产物形态:数据库和 Schema 会以container实体落库,包含containerProperties(携带platformenvdatabaseschema等自定义属性)、statusdataPlatformInstancesubTypes(如Database)和browsePathsV2等 aspect。

前置条件

根据 vertica_pre.md 的 Prerequisites 章节,使用该模块前需要满足:

  • Vertica Server版本为10.1.1-0 或更高(更老版本可能可以工作,但未经测试);
  • 凭据(Credentials):需要用户名和密码用于连接数据库。

快速开始:最小可运行 Recipe

仓库为 Vertica 模块提供了官方 Recipe 模板 vertica_recipe.yml,内容如下,可直接作为配置起点:

source: type: vertica config: # Coordinates host_port: localhost:5433 database: DATABASE_NAME # Credentials username: "${VERTICA_USER}" password: "${VERTICA_PASSWORD}" include_tables: true include_views: true include_projections: true include_models: true include_view_lineage: true include_projection_lineage: true sink: # sink configs

DATABASE_NAME替换为实际数据库名,并通过环境变量注入VERTICA_USERVERTICA_PASSWORD(避免明文凭据)。保存为recipe.yml后,通过 CLI 执行:

datahub ingest -c recipe.yml

集成测试 test_vertica.py 使用类似配置执行datahub ingest --strict-warnings -c <config>并校验输出结果,验证了该配置形态的有效性。

配置参数详解

连接与坐标参数

Vertica 连接配置继承自 DataHub SQL 源的通用配置BasicSQLAlchemyConfig(定义于 sql_config.py),核心参数包括:

参数说明示例
host_portVertica 服务器地址与端口,默认端口为 5433。配置类中的clean_host_port校验器会自动剥离协议前缀(如https://localhost:5433
database目标数据库名称Vmart
username/password连接凭据${VERTICA_USER}/${VERTICA_PASSWORD}

从源码 vertica.py 可见,VerticaConfig将连接 scheme 固定默认为vertica+vertica_python,即使用vertica_python驱动建立 SQLAlchemy 连接。单元测试 test_vertica_source.py 验证了最终生成的 SQLAlchemy URL 形态:

vertica+vertica_python://user:password@host:5433/db

实体摄取开关(Vertica 特有配置)

vertica模块在通用 SQL 配置之上扩展了VerticaConfig(vertica.py),新增了以下专属配置项,这是 Recipe 中include_*系列开关的来源:

参数默认值说明
include_projectionstrue是否摄取 Projection(Vertica 特有的物化存储对象)
include_modelstrue是否摄取 ML 模型
models_pattern允许全部用于过滤 ML 模型的正则AllowDenyPattern,格式如allow: [".*"]deny: ["^test_.*"]
include_view_lineagetrue是否摄取视图(View)血缘
include_projection_lineagetrue是否摄取 Projection 血缘

此外,通用 SQL 配置还提供了include_tablesinclude_viewsinclude_view_column_lineagetable_patternschema_patternview_pattern等过滤与开关项。集成测试配置 vertica_to_file.yml 中即同时开启了include_view_column_lineage: true,说明视图列级血缘也被支持。

get_workunits_internal(vertica.py)的实现中,摄取流程按"数据库容器 → Schema 容器 → Projection → ML 模型 → Profiling 请求"的顺序依次产出 WorkUnit,include_projections/include_models开关直接决定对应循环是否执行。

数据画像(Profiling)

与 DataHub 其他 SQL 源一致,Vertica 模块支持可选的 Profiling 能力。当is_profiling_enabled()为真时,loop_profiler_requests(vertica.py)会为表及 Projection 生成画像请求,并遵循profiling.partition_profiling_enabledpartition_datetime等通用画像配置。从源码结构看,Projection 的画像请求同样受分区(partition)检测逻辑约束:若分区表为空或分区 ID 无效,会跳过画像并在报告中记录 warning。

能力矩阵:支持的功能与开关

关联文档 vertica_post.md 的 Capabilities 章节指出:以模块文档页上方的 "Important Capabilities" 表格作为支持特性的权威来源(该能力表对应 vertica_pre.md 模块页面上的能力声明)。能力声明在源码中通过装饰器体现,VerticaSource(vertica.py)标注的能力如下:

能力状态与开关
PLATFORM_INSTANCE(平台实例)默认启用,通过platform_instance配置
DOMAINS(域)通过domain配置字段支持
DATA_PROFILING(数据画像)可选启用(通过 profiling 相关配置)
LINEAGE_COARSE(粗粒度血缘)默认启用,可通过include_view_lineageinclude_projection_lineage关闭;细分子类型为 View 与 Projections
DELETION_DETECTION(删除检测)默认通过有状态摄取(stateful ingestion)启用

同时,模块标注为SupportStatus.GA,即处于正式发布(GA)支持状态。

四大实体摄取实现解析

结合源码,理解各实体的摄取逻辑有助于判断配置开关的实际效果。

表(Table)与 Schema 字段

表摄取复用通用SQLAlchemySource_process_table流程,并在此基础上额外提取表所有者(owner)VerticaSource._process_table(vertica.py)通过inspector.get_table_owner(table, schema)获取表属主,并将其作为corpuser所有者写入 Dataset 实体。

视图(View)与视图血缘

loop_views(vertica.py)遍历 Schema 内所有视图:

  • 视图名会先经过view_pattern过滤,不符合规则的被丢弃(report_dropped);
  • 单个视图摄取失败时仅记录 warning 并继续,不会中断整个 Schema 的摄取;
  • include_view_lineage开启时,调用inspector._populate_view_lineage(view, schema)获取视图的上游表,构造UpstreamLineage(血缘类型为TRANSFORMED)写入实体(vertica.py)。

Projection 与其血缘

Projection 是 Vertica 特有的存储对象——建表时会自动创建一个 super projection 来存储数据。loop_projections(vertica.py)与_process_projections(vertica.py)负责其摄取:

  • 使用projections_seen集合去重,避免重复摄取;
  • 复用table_pattern进行过滤;
  • 提取 Projection 的注释文本与属性(如投影类型 super/segmented、分区键、分段信息等),见get_projection_properties(vertica.py);
  • 解析主键约束与外键,生成 SchemaMetadata;
  • 为实体打上DatasetSubTypes.PROJECTIONS子类型标签;
  • include_projection_lineage开启时,通过_populate_projection_lineage生成 Projection → 上游表的血缘(vertica.py)。

ML 模型

Vertica 内置了机器学习能力,loop_models(vertica.py)与_process_models(vertica.py)负责 ML 模型元数据摄取:

  • 通过inspector.get_models_names(schema)枚举模型,models_pattern参与过滤;
  • 提取模型注释与属性(如模型属性、模型规格信息),见get_model_properties(vertica.py);
  • ML Models子类型标记实体,并挂载到对应的 Schema 容器下。

限制说明(Limitations)

vertica_post.md 的 Limitations 章节明确指出:模块行为受源端 API、权限以及平台暴露的元数据范围约束,对于不支持或有条件的特性,应以上述能力表格中的说明为准。结合源码可以补充以下具体边界:

  • 视图血缘依赖 Vertica 提供视图定义信息(通过_populate_view_lineage),若视图定义无法解析出上游表,则不会产出血缘(源码中会记录 "No lineage found" 日志并返回None);
  • Projection/模型的注释与属性获取依赖 SQLAlchemy inspector 的get_projection_commentget_model_comment接口,若底层驱动未实现(抛NotImplementedError),则仅返回空属性而不报错中断(vertica.py);
  • 数据库与 Schema 的额外属性(extra_properties)获取失败时会在报告中记录 failure,但不会中断整个摄取(vertica.py);
  • Vertica Server 版本要求 10.1.1-0 及以上,旧版本未经过测试验证。

故障排查指南(Troubleshooting)

vertica_post.md 给出的排查主线为:若摄取失败,先验证凭据、权限、连通性和作用域过滤(scope filters),再检查摄取日志中的源特有错误,并据此调整配置。具体展开如下:

  1. 凭据(Credentials):确认username/password正确且环境变量已注入;可先在 Vertica 侧用vsql手动连接验证(集成测试即通过vsql -w abc123执行 DDL,见 test_vertica.py)。
  2. 权限(Permissions):确认账号拥有读取系统目录(catalog)的权限,能列出目标 Schema 的表、视图、Projection 与模型——权限不足通常表现为枚举结果为空或查询系统表报错。
  3. 连通性(Connectivity):确认host_port可达、端口(默认 5433)开放、网络与防火墙规则允许连接;注意host_port会被自动剥离协议前缀,不要写成带http://的地址。
  4. 作用域过滤(Scope filters):检查schema_patterntable_patternview_patternmodels_pattern是否误过滤了目标对象;被过滤的对象会在报告中以 dropped 形式记录(源码中report_dropped调用点,见 vertica.py)。
  5. 日志排查:摄取报告(SQLSourceReport的扩展VerticaSourceReport,见 vertica.py)会统计projection_scannedmodels_scanned等扫描计数,以及 warning / failure 明细。日志中的Ingestion errorProjection errorModel errorViews error等上下文信息可用于定位是哪个对象、哪个环节失败。

验证与回归测试

仓库为 Vertica 模块提供了完整的测试覆盖,可作为验证配置正确性的参考:

  • 单元测试test_vertica_source.py:验证VerticaConfig的 SQLAlchemy URL 生成逻辑;
  • 集成测试test_vertica.py:通过 Docker 启动vertica/vertica-ce社区版容器,执行 DDL 造数,运行datahub ingest --strict-warnings摄取,并将输出与黄金文件 vertica_mces_with_db_golden.json 比对(对create_timetable_sizeProjection_sizeROS_Countcluster_sizeudx_language等运行时动态属性做了忽略处理)。

注意:该集成测试当前因 Vertica 官方容器镜像的已知问题被标记为 skip(见 test_vertica.py 中的注释链接),在本地复现时需关注镜像可用性。

总结

vertica模块是 DataHub 中面向 Vertica 分析数据库的完整摄取方案:它以vertica+vertica_python驱动连接数据库,支持数据库/Schema/表/视图/Projection/ML 模型等元数据实体的摄取,提供视图与 Projection 血缘、数据画像、有状态删除检测等增强能力,所有能力均可通过 Recipe 中的开关精确控制。当遇到摄取问题时,按照"凭据 → 权限 → 连通性 → 作用域过滤 → 日志"的顺序排查,并结合模块报告中的扫描计数与错误上下文即可快速定位根因。

【免费下载链接】datahubThe Context Platform for your Data and AI Stack项目地址: https://gitcode.com/GitHub_Trending/da/datahub

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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询