OpenMetadata Athena 连接器配置指南:从 IAM 权限到元数据摄取实战
2026/9/15 0:13:48 网站建设 项目流程

OpenMetadata Athena 连接器配置指南:从 IAM 权限到元数据摄取实战

【免费下载链接】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 项目中 Athena 数据库连接器的完整配置与使用。你将了解连接 Athena 所需的 AWS IAM 权限模型(Athena、Glue、Lake Formation 三大服务权限)、连接详情中每一个配置字段的语义与注意事项,以及如何通过 YAML 工作流或 UI 完成元数据、血缘与 Usage 摄取。结合仓库内 Athena 连接器源码 与 示例工作流,本文会深入到 JDBC URL 的构建逻辑、测试连接的诊断能力等底层细节,帮助你一次性把 Athena 连接器配通、配稳。

一、Athena 连接器概览

OpenMetadata 的 Athena 连接器通过JDBC 连接摄取元数据(见 连接器文档)。从 service_spec.py 可以看出,Athena 属于默认数据库服务规格(DefaultDatabaseSpec),同时注册了四类能力:

  • 元数据摄取AthenaSource(metadata.py)
  • 血缘摄取AthenaLineageSource(lineage.py)
  • Usage 摄取AthenaUsageSource(usage.py)
  • 数据剖析AthenaProfilerInterface(位于ingestion/src/metadata/profiler/interface/sqlalchemy/athena/

这意味着,一个 Athena 数据服务可以同时跑元数据、血缘、Usage 和 Profiler 四条管道。

二、前置要求:IAM 权限模型

Athena 连接器通过 JDBC/ODBC 驱动访问 Athena,因此 IAM 权限策略必须覆盖 Athena 及其下游依赖服务。AWS 官方文档明确要求:使用 JDBC 或 ODBC 驱动时,IAM 权限策略需要包含 AWS managed policy: AWSQuicksightAthenaAccess 中列出的所有操作。

2.1 三大权限域

该策略聚合了三类服务的权限,对应 Athena 摄取链路的三个环节:

权限域作用
athena允许主体在 Athena 资源上运行查询,是元数据与 Usage 摄取的基础
glue允许访问 AWS Glue 数据库、表与分区;Athena 依赖 Glue Data Catalog 做元数据存储,此权限必须授予
lakeformation允许主体为已注册到 Lake Formation 的数据湖位置申请临时凭证

2.2 推荐的最小权限策略

原文档给出的策略可直接作为 JSON 粘贴到 IAM:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "athena:GetTableMetadata", "athena:ListDatabases", "athena:ListTableMetadata", "athena:GetQueryExecution", "athena:StartQueryExecution", "athena:GetQueryResults", "glue:GetDatabases", "glue:GetTables", "glue:GetTable", "lakeformation:GetDataAccess" ], "Resource": [ "*" ] } ] }

提示:如果你除了 Glue 之外还使用外部服务(如 S3 Tables、Federated Query 指向的外部数据源)并遇到权限问题,请把相应操作补充进上述 Action 列表。

2.3 权限不足时的表现(源码视角)

从 connection.py 的ATHENA_ERRORS诊断包可以看到,权限问题在测试连接阶段就会被精准识别:

  • AccessDeniedException/AccessDenied或错误信息包含 "not authorized" → 诊断为Not authorized,修复建议即为授予athena:*glue:*相关权限;
  • 错误信息包含workgroupis not found→ 诊断为Workgroup not found,提示核对工作组的账户与地域;
  • 错误信息包含output locationQuery result location not configured,要求设置可写的s3StagingDir或在工作组上配置查询结果位置;
  • 错误信息包含unable to verify/create output bucketQuery result bucket not usable,检查桶是否存在以及s3:ListBuckets3:GetBucketLocation权限;
  • 错误信息包含writing to locationCannot write query results,需要s3:PutObject权限,加密桶则需工作组启用服务端加密。

另外,AthenaChecks.get_tables的实现还揭示了一个隐蔽坑:AWS Lake Formation 在主体缺少授权时会静默返回空表列表(而非报错)。因此测试连接时若出现 "no readable tables" 提示,应检查 Lake Formation 的 DESCRIBE/SELECT 授权,而不是误判为目录为空。

三、Connection Details 全字段解析

连接器在 UI 表单中暴露了以下字段(对应AthenaConnection模型),按功能可分为认证相关、会话相关、查询相关、层次结构相关、过滤相关五组。

3.1 连接驱动:Scheme

驱动类型,选择连接到 Athena 的驱动。默认值为awsathena+rest(PyAthena),底层对应 connection.py 中_get_connection_url的 URL scheme 前缀。

3.2 AWS 静态凭证

AWS Access Key ID:AWS 安全凭证的第一部分(示例:AKIAIOSFODNN7EXAMPLE)。访问密钥由两部分组成:访问密钥 ID 与秘密访问密钥,两者必须同时使用才能完成请求认证。可在 AWS IAM 控制台的 Security Credentials 中管理。

AWS Secret Access Key:凭证的第二部分(示例:wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY)。

AWS Region:AWS 在每个地理区域部署独立的服务实例,连接器必须知道目标服务所在的区域。值得注意的是,Region 是连接配置中唯一必填的 AWS 参数——其余 AWS 配置(凭证来源等)在编程访问时可以通过 boto3 的标准凭证链自动解析。

AWS Session Token:使用临时凭证访问服务时,除 Access Key ID 与 Secret Access Key 外还必须提供 Session Token。

3.3 会话与角色

Endpoint URL:AWS SDK 与 CLI 默认使用各服务在当前区域的默认端点,但当需要指向替代端点(如 VPC Endpoint、兼容 AWS API 的自建服务)时可在此指定。

Profile Name:AWS CLI 的命名配置文件(named profile),保存了一组可复用的设置与凭证。配置了多个 profile 时,可在此指定使用default之外的 profile。

Assume Role ARN:用于同账号或跨账号的AssumeRole场景。在此填写目标账号角色的 ARN;跨账号访问时,目标账号管理员必须为调用方附加允许对该 ARN 执行AssumeRole的策略。只有当你确实要使用 AssumeRole 时,此字段才是必填的。

从源码看,当配置了assumeRoleArn时,连接策略会切换为AthenaAssumeRoleStrategy(connection.py):

  • 通过AWSClient.create_session()创建可自动刷新凭证的 Boto3 会话;
  • 若此时又在connectionArguments中手写了session参数,会直接抛出ValueError提示冲突;
  • 会话凭证来自 STS 的 AssumeRole 结果,而非静态密钥。

Assume Role Session Name:被假定角色会话的标识符,用于区分同一角色被不同主体或出于不同原因被假定时的会话。默认值为OpenMetadataSession

Assume Role Source Identity:调用AssumeRole操作的主体指定的源身份(Source Identity),可借助它在 CloudTrail 日志中追踪是谁通过该角色执行了操作。

3.4 查询执行相关

S3Staging Dir:Athena 会自动把每次查询的结果与元数据信息保存到 S3 的查询结果位置。首次使用时可通过 Athena 控制台指定查询结果位置;此目录必须可写(参考 2.3 节的诊断信息)。在 示例工作流 中写作:

s3StagingDir: https://s3-directory-for-datasource.com

该值会经quote_plus编码后拼入 JDBC URL 的s3_staging_dir参数(见_get_connection_url)。

Workgroup:Athena 工作组用于隔离用户、团队、应用或工作负载。在此选择摄取流程应使用的工作组。配置后,JDBC URL 会附加&work_group=<name>参数。工作组也承担查询结果位置、加密与权限的集中管理,因此当s3StagingDir未配置时,工作组上配置的查询结果位置会被 Athena 作为兜底。

Catalog ID:Athena 的 Catalog 标识,在以下场景必须显式配置

  • S3 Tables:格式为s3tablescatalog/<bucket-name>(例如s3tablescatalog/my-table-bucket);
  • 跨账号 Catalog:填写拥有 Glue Data Catalog 的 AWS 账号 ID。

不填写时默认使用调用方自身的 AWS 账号。从 metadata.py 的prepare()query_table_names_and_types()可见,catalogId会以CatalogId参数传给 Glue 分页器;在连接层它被编码为 JDBC URL 的catalog_name参数。

3.5 层次结构与数据湖定位

Database Name:OpenMetadata 的数据库服务层次为Database Service > Database > Schema > Table。Athena 本身没有传统意义上的 Database 概念,若希望数据挂在名为default之外的数据库下,可在此指定名称。示例配置中为databaseName: database_name

Bucket Name:数据湖中用于组织、存储数据对象的唯一标识,类似"对象存储版的文件夹名"。

Prefix:数据路径的首段,用于在容器内组织、归类数据,帮助用户快速定位数据对象。

3.6 连接定制

Connection Options:附加的连接选项,用于构建发送给服务的连接 URL。

Connection Arguments:附加的连接参数(如安全或协议配置),会直接传给底层驱动。注意:当启用 AssumeRole 时,不得在此定义session键(源码会校验并抛错)。

3.7 过滤模式(Filter Pattern)

字段说明
Default Database Filter Pattern正则表达式,仅包含/排除匹配的数据库
Default Schema Filter Pattern正则表达式,仅包含/排除匹配的 Schema
Default Table Filter Pattern正则表达式,仅包含/排除匹配的表

这些过滤器在摄取层(filter_by_schema等工具函数)与测试连接层(AthenaChecks会按schemaFilterPattern计算目标 Schema 列表)同时生效。测试连接时最多探测 100 个 Schema(MAX_SCHEMAS_TO_PROBE),以避免大 Catalog 拖垮测试连接超时。

四、实战:三种工作流 YAML 配置

4.1 元数据摄取

基于仓库内的 athena.yaml(认证字段请替换为真实值):

source: type: athena serviceName: local_athena serviceConnection: config: type: Athena databaseName: database_name awsConfig: awsAccessKeyId: access key id awsSecretAccessKey: access secret key awsRegion: us-east-1 s3StagingDir: https://s3-directory-for-datasource.com workgroup: workgroup name sourceConfig: config: type: DatabaseMetadata sink: type: metadata-rest config: {} workflowConfig: loggerLevel: INFO # DEBUG, INFO, WARN or ERROR openMetadataServerConfig: hostPort: http://localhost:8585/api authProvider: openmetadata securityConfig: jwtToken: "<JWT_TOKEN>"

仓库还提供了 athena_lineage.yaml(血缘)与 athena_usage.yaml(Usage)两份参考配置,可在ingestion/src/metadata/examples/workflows/目录下查看完整内容。

4.2 摄取流程中的核心逻辑(源码级)

  • 表类型识别query_table_names_and_types()优先走 Glue API(带分页),根据表参数中的table_type == "ICEBERG"判定为 Iceberg 表,否则标记为 External 表(见 metadata.py);Glue 不可用时回退到 JDBC inspector 的表名列表。
  • Schema 描述prepare()阶段通过 Glueget_databases分页拉取数据库描述,存入schema_description_map,供get_schema_description()使用——因此 Athena 下 Schema 的描述直接来自 Glue Data Catalog。
  • 分区信息get_table_partition_details()读取分区列,并按列类型映射分区区间类型(ATHENA_INTERVAL_TYPE_MAP):字符串/枚举映射为COLUMN_VALUE,整型映射为INTEGER_RANGE,日期/时间戳映射为TIME_UNIT
  • 表位置get_table_description()在读取表注释的同时,从表选项(awsathena_location)提取外部位置,供外部表血缘(ExternalTableLineageMixin)使用。
  • Lake Formation 标签yield_tag()yield_table_tags()通过AthenaLakeFormationClient拉取库级、表级与列级 LF 标签,转换为 OpenMetadata 的标签与分类实体。
  • Iceberg 自定义属性:当启用includeCustomProperties时,通过查询 Athena 的<table>$properties元表读取 Iceberg 原生属性,并注册为表实体上的字符串型自定义属性;非法字符会被替换为__,超长键名回退为 MD5 摘要。

4.3 Usage 与血缘摄取

UsageAthenaUsageSource(usage.py)从 Athena 查询执行记录中提取成功状态(SUCCEEDED)的查询,记录提交/完成时间、执行时长、是否被取消(CANCELLED),并过滤掉 dbt 与 OpenMetadata 自身产生的查询,最终写入TableQueries实体,供 OpenMetadata 的 Usage 与数据洞察分析使用。

血缘AthenaLineageSource(lineage.py)结合查询解析器(AthenaQueryParserSource,见 query_parser.py)从 SQL 中提取表级血缘,并借助ExternalTableLineageMixin补齐外部表(S3 位置)的血缘信息。

4.4 测试连接(Test Connection)

测试连接由 connection.py 中的AthenaChecks驱动,依次执行:

  1. CheckAccess:执行SELECT 1,验证 JDBC 连接与 AWS 凭证有效性(走 HTTPS over botocore,而非 TCP 探测);
  2. GetSchemas:列出 Schema(对应athena:ListDatabases);
  3. GetTables:探测目标 Schema 中表的可读性(对应athena:ListTableMetadata),空列表会给出 Lake Formation 授权相关的非阻塞提示;
  4. GetViews:探测视图可见性,非必检项,视图缺失不视为失败。

该设计让权限、工作组、查询结果位置等问题在正式摄取前即可暴露,并给出可执行的修复建议。

五、常见问题与排障速查

现象可能原因处置
测试连接报 "Not authorized"IAM 缺少 Athena/Glue 权限按 2.2 节策略授予权限
"Workgroup not found"工作组不存在或区域不匹配核对工作组名称、账号与awsRegion
"Query result location not configured"未配置s3StagingDir,工作组也无查询结果位置设置可写 S3 路径或在工作组配置结果位置
"Query result bucket not usable"桶不存在或缺少s3:ListBucket/s3:GetBucketLocation核对桶与区域,补权限
"Cannot write query results"缺少s3:PutObject或加密策略不匹配授予写权限,或让工作组启用服务端加密
摄取 0 张表且无报错Lake Formation 未授权(静默返回空列表)授予 Lake Formation DESCRIBE/SELECT 权限
跨账号/S3 Tables 元数据为空未配置catalogId按 3.4 节设置s3tablescatalog/<bucket>或账号 ID
AssumeRole 配置后连接失败connectionArguments中冲突定义了session移除session键,由连接器自动管理会话

六、延伸阅读

  • 连接器 UI 文案与字段说明原稿:Athena.md
  • Athena 连接器源码:连接构建与测试连接见 connection.py,元数据摄取见 metadata.py,Usage 见 usage.py
  • 工作流示例:athena.yaml、athena_lineage.yaml、athena_usage.yaml
  • 单元测试与拓扑测试:test_connection.py、test_athena.py

掌握上述权限模型与字段语义后,你可以在 UI 中快速创建一个 Athena 数据服务,或直接套用 YAML 工作流启动元数据、血缘与 Usage 三条管道,让 Athena 之上的数据资产在 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),仅供参考

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

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

立即咨询