ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

OpenMetadata Greenplum 连接器接入指南:连接配置、认证模式与元数据摄取原理

OpenMetadata Greenplum 连接器接入指南:连接配置、认证模式与元数据摄取原理 OpenMetadata Greenplum 连接器接入指南连接配置、认证模式与元数据摄取原理【免费下载链接】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 仓库中的 Greenplum 连接器 UI 配置文档 为核心系统讲解在 OpenMetadata 中接入 Greenplum 数据库服务的完整流程从连接参数逐项说明、Basic / IAM 两种认证方式到 Profiler 与数据质量前置权限要求并结合仓库内连接器源码连接处理、元数据摄取、视图血缘与单元测试帮助读者既能在 UI 上正确完成配置也能理解底层是如何工作的。连接器概览Greenplum 在 OpenMetadata 中的定位Greenplum 是构建在 PostgreSQL 之上的大规模并行处理MPP分析型数据库因此 OpenMetadata 的 Greenplum 连接器在协议层面复用了 PostgreSQL 生态其 SQLAlchemy 驱动 scheme 固定为postgresqlpsycopg2元数据读取也大量复用pg_catalog系统表。这一点可以从 greenplumConnection.json 的 schema 定义中得到确认greenplumScheme: { description: SQLAlchemy driver scheme options., type: string, enum: [postgresqlpsycopg2], default: postgresqlpsycopg2 }该连接器在仓库中由一组模块共同实现目录位于 ingestion/src/metadata/ingestion/source/database/greenplum/connection.py负责构建 SQLAlchemy Engine 并执行连接测试metadata.py实现GreenplumSource完成数据库、表、分区等元数据摄取lineage.py实现GreenplumLineageSource提供视图级血缘queries.py集中存放所有针对 Greenplum 系统表的 SQL 语句utils.py重写 SQLAlchemy PostgreSQL dialect 的列反射逻辑适配 Greenplum 类型service_spec.py将上述类装配成DefaultDatabaseSpec供工作流调度。前置要求Profiler 与数据质量的权限准备在执行Profiler数据剖析工作流或数据质量Data Quality测试时连接 Greenplum 所使用的用户必须拥有对目标表/模式schema的SELECT权限否则剖析与质量测试将无法读取数据。这一点在连接器文档的 Requirements 一节中明确强调Profiler 工作流的完整搭建步骤可参考仓库 docs/quality.md 与 docs/index.md 中关于数据质量可观测性的相关说明数据质量测试的通用执行方式可参考 ingestion 目录下的工作流配置示例。此外若要完整摄取元数据该用户还应具备读取pg_catalog系统目录的权限——源码中的各类查询见下文均直接访问pg_catalog与information_schema。连接参数详解Connection Details以下参数对应 Greenplum.md 中 Connection Details 部分每一项在 UI 表单中的 id 与 JSON Schema 中的属性一一对应。Connection SchemeschemeSQLAlchemy 驱动 scheme即连接 URL 的协议前缀。Greenplum 连接器仅支持postgresqlpsycopg2一种取值默认值即为此值。也就是说最终生成的连接串形如postgresqlpsycopg2://username:passwordhost:port/database仓库中的单元测试 test_connection.py 验证了这一点def test_basic_auth_builds_expected_url(): connection GreenplumConnectionConfig( usernameopenmetadata_user, authTypeBasicAuth(passwordopenmetadata_password), hostPortlocalhost:5432, databaseopenmetadata_db, schemeGreenplumScheme.postgresql_psycopg2, ) engine GreenplumConnection(connection).client assert ( engine.url.render_as_string(hide_passwordFalse) postgresqlpsycopg2://openmetadata_user:openmetadata_passwordlocalhost:5432/openmetadata_db )Usernameusername连接 Greenplum 的用户名在 greenplumConnection.json 中描述为 Username to connect to Greenplum。该用户应具备读取 Greenplum 全部元数据的权限若同时使用 Profiler 与数据质量还需拥有目标对象的SELECT权限。该字段为必填项。Auth ConfigauthType认证配置支持两种类型Basic Auth基础认证使用密码直接认证IAM based AuthIAM 认证通过 AWS IAM 凭据连接与 AWS 相关的服务例如部署在 AWS 上的 Greenplum / RDS 兼容场景。两种配置在 greenplumConnection.json 中以oneOf形式声明分别引用./common/basicAuth.json与./common/iamAuthConfig.json。Basic Auth 配置Passwordpassword选择 Basic Auth 时此处填写连接 Greenplum 的密码。在 connection.py 中GreenplumConnection._get_client()通过BasicAuthStrategy(self.service_connection).build()构建 SQLAlchemy Engine即基础认证的账号密码会直接拼入连接 URL见上文单元测试。IAM Auth 配置选择 IAM 认证时需要配置以下 AWS 凭据相关字段。这些参数在 UI 表单中按id组织语义与 AWS 官方概念一致AWS Access Key IDawsAccessKeyId访问密钥 ID例如AKIAIOSFODNN7EXAMPLE。AWS 使用安全凭据对请求进行身份验证与授权访问密钥由两部分组成访问密钥 ID 与秘密访问密钥二者必须同时使用。AWS Secret Access KeyawsSecretAccessKey秘密访问密钥例如wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY。AWS RegionawsRegion目标服务所在 AWS 区域。注意在 AWS 官方语义中 Region 是唯一必填参数——当以编程方式连接服务时其余 AWS 配置可以通过多种途径环境变量、配置文件、IAM 角色等自动获取因此 OpenMetadata 的 IAM 认证实现同样依赖此信息定位服务。AWS Session TokenawsSessionToken当使用临时凭据访问服务时除 Access Key ID 与 Secret Access Key 外还需提供会话令牌Session Token。Endpoint URLendPointURL自定义 AWS 服务端点。AWS SDK 与 CLI 默认使用每个服务在每个区域的默认端点但你可以为 API 请求指定替代端点例如使用兼容 AWS 协议的第三方对象存储或本地模拟服务时。Profile NameprofileNameAWS CLI 的命名配置文件named profile。一个命名配置文件是设置与凭据的集合多个命名配置文件可存储于config与credentials文件中。此处留空时使用default配置文件填写后则使用指定配置文件。Assume Role ARNassumeRoleArn当需要跨账户或使用角色访问时填写目标角色的 ARNAmazon Resource Name。要访问其他账户中的角色用户必须获得账户管理员委派的权限允许对该角色 ARN 调用AssumeRole。若打算使用 AssumeRole此为必填字段。Assume Role Session NameassumeRoleSessionName被假定角色会话的标识符用于在多个主体或不同原因假定同一角色时区分会话。默认值为OpenMetadataSession。Assume Role Source IdentityassumeRoleSourceIdentity调用AssumeRole操作的主体指定的源身份Source Identity。源身份信息会记录在 AWS CloudTrail 日志中用于追溯是谁以某个角色执行了操作。连接地址与数据库范围Host and PorthostPortGreenplum 实例的主机与端口格式为hostname:port例如localhost:5432Greenplum 默认端口与 PostgreSQL 相同。一个常见的坑是容器网络如果 OpenMetadata 摄取服务运行在 Docker 中而 Greenplum 部署在宿主机localhost上则需要使用host.docker.internal:5432作为主机地址才能从容器内部访问宿主机服务。Databasedatabase要连接的初始 Greenplum 数据库。若只想摄取该库中的表保持此值即可若要摄取集群内所有数据库需要将ingestAllDatabases置为 true。在 greenplumConnection.json 中对该字段的补充说明为Initial database to connect to. Metadata reading is restricted to this database unless Ingest All Databases is enabled, in which case this database is used as the entry point to discover and scan all databases.——即该数据库同时是发现并扫描全部数据库时的入口点。Ingest All DatabasesingestAllDatabases布尔开关默认值为false勾选工作流将摄取集群中的所有数据库不勾选仅摄取上述 Database 字段指定库中的表。该开关在源码 metadata.py 中有明确的对应实现def get_configured_database(self) - str | None: if not self.service_connection.ingestAllDatabases: return self.service_connection.database return None def get_database_names(self) - Iterable[str]: if not self.config.serviceConnection.root.config.ingestAllDatabases: configured_db self.config.serviceConnection.root.config.database self.set_inspector(database_nameconfigured_db) yield configured_db else: for new_database in self.get_database_names_raw(): # 支持 databaseFilterPattern 过滤 ...可以看到当ingestAllDatabases开启时会遍历pg_catalog.pg_database查询语句见 queries.py获取全部数据库名并支持通过databaseFilterPattern做包含/排除过滤若关闭则只锁定配置的单个数据库。SSL 配置SSL ModesslMode连接 Greenplum 时的 SSL 模式可选值如prefer、verify-ca、allow等。文档特别提示若使用 IAM 认证建议选择allow推荐或根据实际场景选择其他选项。从 schema 看该字段引用的是 verifySSLConfig.json 中定义的sslMode枚举属于 OpenMetadata 全局统一的 SSL 配置体系。SSL CAcaCertificate用于 SSL 校验的 CA 证书对应 PostgreSQL 的sslrootcert参数。Greenplum 连接器仅需要 CA 证书无需客户端证书与私钥。高级连接参数Connection ArgumentsconnectionArguments在连接期间发送给服务的额外连接参数例如安全或协议相关配置。这类参数直接作用于 SQLAlchemyconnect()调用。Connection OptionsconnectionOptions用于构建连接 URL 的额外选项会在 URL 中以 query string 形式附加到服务连接串上。底层实现连接建立与测试连接处理的核心在 connection.pyclass GreenplumConnection(BaseConnection[GreenplumConnectionConfig, Engine]): def _get_client(self) - Engine: Return the SQLAlchemy Engine for Greenplum. return BasicAuthStrategy(self.service_connection).build() def test_connection(self, metadata, automation_workflowNone, timeout_secondsTHREE_MIN): queries {GetDatabases: GREENPLUM_GET_DATABASE} return test_connection_db_common( metadatametadata, engineself.client, service_connectionself.service_connection, automation_workflowautomation_workflow, queriesqueries, timeout_secondstimeout_seconds, )要点解读_get_client()统一通过BasicAuthStrategy构建 Engine这意味着无论选择 Basic 还是 IAM 认证最终都会落到该策略完成驱动与凭据组装test_connection复用了 OpenMetadata 通用的数据库连接测试入口test_connection_db_common并传入GetDatabases探活查询select datname from pg_catalog.pg_database该测试既可在元数据摄取工作流中执行也可在**自动化工作流Automation Workflow**中独立运行默认超时时间为 3 分钟THREE_MIN。这个流程与 UI 上创建服务时的 Test Connection 按钮一一对应用户在页面上看到的连通性检查结果即由此产生。元数据摄取从系统表到 OpenMetadata 实体GreenplumSource见 metadata.py继承自CommonDbSourceService与MultiDBSource并混入PgMatviewMixin以支持多数据库遍历与物化视图。它通过重写 SQLAlchemy 的 PostgreSQL dialect 方法get_columns、get_table_comment、get_view_definition等来适配 Greenplum关键查询集中在 queries.py表清单GREENPLUM_GET_TABLE_NAMES查询pg_catalog.pg_class仅选取relkind in (r,p,f)普通表、分区表、外部表并通过pg_partition_rule排除分区子表pr.oid is null避免将分区叶子重复识别为独立表分区信息GREENPLUM_PARTITION_DETAILS读取pg_catalog.pg_partition将parkind映射为list/hash/range三种分区策略结合information_schema.columns定位分区键列最终形成TablePartition元数据对应代码 metadata.py表注释GREENPLUM_TABLE_COMMENTS从pg_description读取表级注释支持r/v/m/f/p各类关系视图定义GREENPLUM_VIEW_DEFINITIONS使用pg_get_viewdef提取视图/物化视图定义并自动拼接create view schema.table as前缀为列级血缘生成提供 SQL 文本查询文件中的注释明确说明了这一设计列信息GREENPLUM_SQL_COLUMNS与GREENPLUM_COL_IDENTITY读取列名、类型format_type、默认值、非空、注释、生成列与 identity 序列信息utils.py中重写的get_column_info/get_column_args负责把 Greenplum 特有类型如geometry、interval、bit varying、数组类型、带时区的时间戳等正确映射为 SQLAlchemy 类型。换句话说Greenplum 连接器在元数据层面做到了协议复用、语义定制既沿用了 PostgreSQL 的反射能力又针对 MPP 的分区模型与外部表做了专门处理。血缘能力与装配关系GreenplumLineageSource见 lineage.py继承LineageSource负责视图血缘的提取——结合上文GREENPLUM_VIEW_DEFINITIONS重建的视图 DDLOpenMetadata 可以解析出视图与底层表之间的列级血缘关系。create()方法会校验传入的连接配置必须是GreenplumConnection类型否则抛出InvalidSourceException。最终service_spec.py 将三个核心类装配为完整的服务规格ServiceSpec DefaultDatabaseSpec( metadata_source_classGreenplumSource, lineage_source_classGreenplumLineageSource, connection_classGreenplumConnection, )这也解释了 UI 配置文档中Connection Details各字段最终的去向它们被序列化为GreenplumConnectionJSON进入摄取工作流的serviceConnection再由connection.py翻译成真实的数据库连接。配置示例与验证以下是一个基于 test_connection.py 的最小 Basic Auth 配置示意对应 UI 表单填写结果字段示例值Connection Schemepostgresqlpsycopg2Usernameopenmetadata_userAuth ConfigBasic AuthPasswordopenmetadata_passwordHost and Portlocalhost:5432容器内访问宿主机时用host.docker.internal:5432Databaseopenmetadata_dbSSL ModeallowIAM 认证推荐Ingest All Databasesfalse等效的摄取连接 URL 为postgresqlpsycopg2://openmetadata_user:openmetadata_passwordlocalhost:5432/openmetadata_db在创建 Database Service 时选择 Greenplum 类型按上表填写后点击Test Connection即会触发connection.py中的GetDatabases探活查询通过后再配置元数据摄取Metadata Ingestion工作流即可将库、表、视图、分区与血缘同步到 OpenMetadata。若计划执行 Profiler 或数据质量任务请先确认所用账号对目标 schema/表具备SELECT权限。【免费下载链接】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),仅供参考
返回列表