多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

DataHub Db2 元数据接入指南:权限准备、认证配置与源码级原理解析

DataHub Db2 元数据接入指南:权限准备、认证配置与源码级原理解析 DataHub Db2 元数据接入指南权限准备、认证配置与源码级原理解析【免费下载链接】datahubThe Context Platform for your Data and AI Stack项目地址: https://gitcode.com/GitHub_Trending/da/datahub导读本文面向需要将 IBM Db2LUW / z/OS / IBM i中的表、视图、Schema 字段、存储过程等元数据接入 DataHub 的工程师系统讲解 db2 元数据摄取模块在生产环境落地所需的前置条件、最小权限模型、认证与 TLS/SSL 配置方式并结合本仓库metadata-ingestion模块的源码实现与集成测试深入说明这些配置在底层是如何生效的。读完本文你将能够独立完成 Db2 源的连接配置、权限核查、安全加固与常见故障排查。模块概述DataHub 中的db2摄取源source用于将 Db2 中的元数据写入 DataHub。它面向生产环境摄取工作流设计支持的元数据实体包括数据集表 / 视图、Schema 字段以及容器Container同时支持表级与列级血缘lineage、数据画像profiling以及基于状态化摄取stateful ingestion的删除检测deletion detection。在源码中该模块由 db2.py 实现Db2Config负责配置解析Db2Source继承通用 SQL 摄取基类SQLAlchemySource并在其上叠加了 Db2 特有的方言修补、命名规范化与视图/存储过程解析逻辑。能力标记capability在类装饰器上直接声明db2.py当前支持状态为ALPHA。注意Db2 源在架构支持上有明确限制详见下文平台与架构支持在 Linux ARM 上执行会直接报错因此部署前务必先核对运行环境。前置条件在运行 Db2 元数据摄取之前需要确认以下三项基础条件全部满足网络连通性摄取进程必须能够访问 Db2 实例默认端口50000及相应的元数据 API有效的认证凭据具备可用的 Db2 用户名与密码或按需配置的其他认证方式元数据读取权限对模块所需访问的系统目录表拥有只读权限见下文权限模型。这三项条件缺一不可且是后续所有配置工作的前提。权限模型三平台系统 Schema 的最小 SELECT 权限db2 摄取模块在运行时需要通过系统目录表catalog tables读取对象定义、视图限定符和存储过程文本。由于 Db2 存在三个差异很大的平台各自的系统目录 schema 不同所需授权的对象也不同平台需授予 SELECT 的系统 Schema说明Db2 for LUWLinux/Unix/WindowsSYSCAT.*如SYSCAT.VIEWS、SYSCAT.ROUTINESDb2 for z/OSSYSIBM.*如SYSIBM.SYSVIEWS、SYSIBM.SYSROUTINESDb2 for IBM iAS/400QSYS2.*如QSYS2.SYSROUTINES如果启用了数据画像profiling还需要对被画像的表授予SELECT权限因为 profiling 需要对目标表实际执行采样查询。这些目录表的使用在源码中有直接体现例如视图限定符解析会按平台依次探测SYSCAT.VIEWS、SYSIBM.SYSVIEWS、QSYS2.SYSVIEWSdb2.py存储过程提取则按平台分别查询SYSCAT.ROUTINES、SYSIBM.SYSROUTINES、QSYS2.SYSROUTINESdb2.py。如果均未找到源码会抛出NotImplementedError: Couldnt find SYSCAT.VIEWS, SYSIBM.SYSVIEWS, or QSYS2.SYSVIEWS或对应 ROUTINES 版本——这通常是权限不足或连接到了错误的平台类型可作为排查信号。认证与 TLS/SSL 配置默认认证方式默认情况下db2 源使用Db2 用户名 密码进行认证并且连接是非加密的。这意味着在非受信网络中传输的凭据与元数据存在明文风险生产环境建议至少启用 TLS/SSL。通过 uri_args 扩展认证与加密其他认证方式以及 TLS/SSL 加密统一通过uri_args配置项以键值对形式追加到 SQLAlchemy 连接 URL 中。例如启用 SSLuri_args: Security: SSLuri_args在 db2.py 中被声明为Dict[str, str]类型字段。其生效路径是Db2Config.get_sql_alchemy_url()会先合并uri_args中的键值对再传递给 SQLAlchemy 生成连接 URLdb2.py。也就是说uri_args最终会表现为连接 URL 上的查询参数或连接选项具体支持的键取决于底层驱动ibm_db_saibm_db的能力——如Security: SSL、证书路径等 TLS 相关参数均可由此传入。连接 Scheme 与驱动Db2 源默认使用db2scheme即ibm_db驱动的ibm_db_sa方言host_port默认值为localhost:50000db2.py。scheme字段支持db2、db2pyodbc、db2pyodbc400三种取值其中db2pyodbc400用于走 IBM i Access ODBC 驱动直连 Db2 for IBM iAS/400详见下文IBM i 平台的 ODBC 直连。最小可用配置示例仓库中的 db2_recipe.yml 给出了完整的基线配置可直接作为模板source: type: db2 config: # Coordinates host_port: localhost:50000 database: dbname # Credentials username: db2inst1 password: password # Optional TLS # uri_args: # Security: SSL # Use the IBM i Access ODBC Driver to connect to Db2 for IBM i (AS/400) # scheme: db2pyodbc400其中type: db2指定使用本模块host_portDb2 主机与端口默认localhost:50000database要摄取的数据库名必填见 db2.pyusername/password认证凭据uri_args可选用于 TLS/SSL 或替代认证方式默认不启用注释状态scheme可选db2pyodbc400用于 IBM i Access ODBC 直连默认db2。database字段在 db2.py 中是必填的pydantic.Field此外该配置类还提供了两个与 Db2 特性直接相关的可选开关配置项默认值说明include_stored_procedurestrue是否摄取存储过程procedure_patternallow_all存储过程过滤正则需按schema.procedure_name全名匹配集成测试中的实际配置如 db2_basic.yml还演示了通过schema_pattern限制摄取范围的做法——只允许basicschema这是控制摄取范围、降低权限面与耗时的重要手段。平台与架构支持Db2 源的可用性受底层驱动ibm_db的安装限制影响具体如下仓库 README.md 与 db2_post.md 均有说明可用架构Windows x86_64、Linux x86_64、macOS x86_64、macOS ARM不可用架构Linux ARM直接执行将抛出错误。这一限制在源码中有硬性检查Db2Source.__init__会校验platform.machine()非 x86_64/amd64 且非 macOS 时直接抛出NotImplementedError: Db2 ingestion is not supported on platform-machinedb2.py。集成测试同样带有skipif条件仅在 x86_64 或 macOS 上运行test_db2.py从侧面印证了该限制。在 Db2 平台支持方面本模块已针对以下平台验证Db2 for LUW使用随acryl-datahub[db2]包附带的默认 CLI 驱动Db2 for z/OS使用默认 CLI 驱动部分场景可能额外需要 Db2 Connect 才能建立连接Db2 for IBM iAS/400使用 IBM i Access ODBC 驱动该驱动不随包附带需用户自行安装另提供对 Db2 for IBM iAS/400经 CLI 驱动连接的名义支持通常也需要 Db2 Connect。IBM i 平台的 ODBC 直连对于 Db2 for IBM iAS/400本模块支持使用IBM i Access ODBC Driver直接连接从而绕开依赖 Db2 Connect 的默认 CLI 驱动路径。使用前提是自行安装 IBM i Access ODBC Driver安装 ODBC 驱动管理器如unixodbc在摄取配置中显式指定db2pyodbc400schemescheme: db2pyodbc400如果你使用 DataHub Cloud 的 Remote Executor 运行摄取可以构建包含该 ODBC 驱动的自定义镜像db2_post.md 给出了参考 Dockerfile基于远程执行器父镜像安装ibm-iaccess软件包FROM ${remote_executor_image} # 父镜像名称请向 DataHub 账户负责人确认 USER root RUN wget -P /etc/apt/sources.list.d/ https://public.dhe.ibm.com/software/ibmi/products/odbc/debs/dists/1.1.0/ibmi-acs-1.1.0.list RUN apt-get update RUN apt-get install -y ibm-iaccess RUN apt-get clean RUN rm -rf /var/lib/apt/lists/* USER datahub源码实现细节命名规范化与平台差异处理除了配置与权限理解 Db2 源还需要知道它在源码层做了哪些关键处理这有助于解释为什么权限要求是这些以及为什么行为与直觉略有不同。结果列名大小写规范化ibm_db_sa驱动返回的结果列名存在大小写不一致的问题且会无条件小写化名称导致无法区分大小写敏感的表名。因此 db2.py 中的patch_dialect()会在每个 inspector 创建后执行两处修补将requires_name_normalize置为False将normalize_name/denormalize_name替换为恒等函数让原始名称原样透传。同时数据库名会被统一规范化为大写get_db_name()见 db2.py标识符统一按database.schema.object三段式组装db2.py这与table_pattern等过滤正则的匹配格式数据库.schema.表一致。视图与存储过程的默认 Schema 解析Db2 的视图和存储过程在解析未限定名称时查找的是创建时的会话 schema而非对象自身所在的 schema。源码针对这一语义做了专门处理视图分别从SYSCAT.VIEWSLUW读取QUALIFIER、从SYSIBM.SYSVIEWSz/OS解析PATHSCHEMAS并过滤掉SYSFUN、SYSIBM、SYSIBMADM、SYSPROC等系统级 schemadb2.py。PATHSCHEMAS的解析逻辑双引号包裹、逗号分隔、转义双引号在 test_db2_source.py 中有完整的单测覆盖包括多 schema 时抛出NotImplementedError的边界行为存储过程按平台查询对应目录表并组装BaseProcedure同时保留QUALIFIER作为默认 schemadb2.py。为保证大小写敏感名称在传给 SQLGlot 血缘解析器时不被规范化schema 名会用双引号包起来_quote_identifier转义规则见 test_db2_source.py 的单元测试。能力与状态化删除检测db2 源声明的能力包括db2.pyPlatform Instance默认启用Domains通过domain配置字段支持Data Profiling可选启用对应上文提到的 profiling 表级SELECT权限需求Deletion Detection通过状态化摄取默认启用。这些能力定义在metadata-ingestion/src/datahub/ingestion/source/sql/db2.py的类装饰器中是判断某个功能是否需要额外配置的权威依据详见 db2_post.md 的 Capabilities 章节说明。集成测试验证仓库为 db2 源提供了完整的集成测试矩阵位于 metadata-ingestion/tests/integration/db2/db2_basic.yml基础表摄取db2_case_sensitivity.yml大小写敏感场景db2_comments.yml注释摄取db2_procedures.yml存储过程摄取db2_view_qualifier.yml视图限定符解析。测试通过 Docker 拉起 Db2 容器并执行 setup SQL 后用真实Pipeline跑摄取、再与 golden 文件比对 MCE 输出test_db2.py。如果你在本地调通环境可直接参照这些配置编写自己的摄取 recipe。限制与故障排查模块行为受制于源平台的 API、权限与所暴露的元数据以下限制需在规划时纳入考量Linux ARM 上不可用直接报错Db2 for z/OS 部分连接场景依赖 Db2 ConnectDb2 for IBM i 使用 CLI 驱动时同样可能需要 Db2 Connect使用 IBM i Access ODBC 驱动则需自行安装驱动与 ODBC 驱动管理器视图/存储过程默认 schema 解析在个别复杂PATHSCHEMAS场景下多个用户级 schema 并存会显式报错而非静默取错。故障排查建议顺序db2_post.md 亦强调先验证凭据、权限、连通性与过滤范围schema_pattern/table_pattern是否误过滤再查看摄取日志中的源特定错误根据错误码调整配置。常见信号包括Couldnt find SYSCAT.VIEWS...权限或平台不匹配、连接超时网络/端口、TLS 握手失败uri_args配置问题。参考资源模块概述与概念映射metadata-ingestion/docs/sources/db2/README.md能力、架构与平台支持、限制与排障metadata-ingestion/docs/sources/db2/db2_post.md最小配置模板metadata-ingestion/docs/sources/db2/db2_recipe.yml源码实现metadata-ingestion/src/datahub/ingestion/source/sql/db2.py集成测试metadata-ingestion/tests/integration/db2/test_db2.py 及同目录下的配置与 golden 文件单元测试metadata-ingestion/tests/unit/test_db2_source.py【免费下载链接】datahubThe Context Platform for your Data and AI Stack项目地址: https://gitcode.com/GitHub_Trending/da/datahub创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表