DataHub BigQuery 接入实战:资产覆盖范围、摄取管道能力与连接器配置解析(基于 quick-ingestion-guides/bigquery)
【免费下载链接】datahubThe Context Platform for your Data and AI Stack项目地址: https://gitcode.com/GitHub_Trending/da/datahub
本篇指南基于 DataHub 仓库中的 BigQuery 快速接入总览 展开,完整覆盖 UI 摄取工作流能抽取的 BigQuery 资产类型、用量/血缘/画像三类元数据管道,以及当前版本 BigQuery 连接器(bigquery_v2)在源码中对应的核心配置项与默认值,帮助你从零搭建一条周期性运行的 BigQuery 元数据摄取管道,并理解其底层实现边界。
一、指南目标:你将得到什么
按照 总览文档、设置文档 与 配置文档 完成全部步骤后,你会获得一条周期性运行的摄取管道(recurring ingestion pipeline):它持续从 BigQuery 抽取元数据并加载到 DataHub。管道最终沉淀三类核心资产:
- BigQuery 资产实体:Projects(项目)、Datasets(数据集)、Tables(表)、Views(视图)、Materialized Views(物化视图)、External Tables(外部表);
- 动态元数据:用量统计(Usage statistics)、表级血缘(Table-level lineage);
- 数据形状信息:表级与列级画像统计(Profile statistics)。
其中外部表是重点:连接器的摄取结果会把源文件格式(source format)、文件 URI 列表、压缩方式(compression)、最大坏记录数(max bad records)等外部表特有的属性写入 DataHub 的 custom properties,让"表实际指向哪些 GCS 文件"这类信息直接在目录中可查。
二、明确的能力边界:哪些资产不会抽取
总览文档特别用 caution 提示了连接器的能力边界:Routines(存储过程/函数)与 Search Indexes(搜索索引)不会被抽取,当前连接器不支持这两类资产。规划接入范围时应以此为前提。
反过来,从源码结构看连接器实际支持面比"六大资产"更宽。在 bigquery_config.py 的BigQueryV2Config中还可以看到这些可选能力开关(默认值均以当前仓库为准):
| 配置项 | 默认值 | 作用 |
|---|---|---|
include_schema_metadata | True | 是否摄取项目、数据集、表与视图的 Schema 元数据 |
include_usage_statistics | True | 是否生成用量统计 |
include_table_lineage | True | 是否生成表级血缘 |
use_queries_v2 | True | 启用新版 queries 抽取器(默认路径) |
include_table_snapshots | True | 是否摄取表快照(table snapshots) |
include_external_url | True | 是否为实体填充 BigQuery Console 跳转链接 |
capture_table_label_as_tag | False | 是否把 BigQuery 表级 labels 捕获为 DataHub 标签 |
capture_view_label_as_tag | False | 视图 labels 转标签 |
capture_dataset_label_as_tag | False | 数据集 labels 转标签 |
include_linked_dataset_lineage | False | 检测 BigQuery Sharing 的 linked datasets 并生成血缘 |
extract_policy_tags_from_catalog | False | 通过 INFORMATION_SCHEMA 与 Data Catalog API 抽取 policy tags |
这些字段均可在 UI 配方表单之外的 CLI recipe(YAML)中精细配置,UI 快速接入默认使用上述默认值即可。
三、动态元数据管道:用量、血缘与画像
总览文档承诺的三项动态元数据,在连接器源码中都有明确的实现模块(目录:metadata-ingestion/src/datahub/ingestion/source/bigquery_v2/):
3.1 用量统计(Usage)
usage.py 与 bigquery_audit.py 负责从 BigQuery 的审计日志(audit logs)中读取近期查询活动,按表聚合出读取量等用量指标。默认情况下use_queries_v2: True,查询抽取走 queries_extractor.py 的新版抽取路径。
从源码结构看,queries-v2 路径会扫描 INFORMATION_SCHEMA JOBS 视图,默认扫描区域由region_qualifiers配置控制(默认region-us与region-eu,见 bigquery_config.py)。如果你的项目存在其他区域的 dataset,可开启region_qualifiers_auto_discovery(默认False,避免意外的查询费用)让连接器自动扩展扫描区域。
3.2 表级血缘(含外部表到 GCS 的路径血缘)
lineage.py 与 bigquery_audit_log_api.py 实现从审计日志构建"表读取谁"的血缘边。两个关键默认行为:
lineage_use_sql_parser(默认True):使用 SQL 解析器解析查询文本,把血缘精确落到查询中真正引用的表/视图;include_column_lineage_with_gcs(默认True):当查询涉及外部表时,还会建立外部表到 GCS 源路径的列级血缘——这正是总览文档所说"lineage from external tables to their GCS source paths"的实现来源,相关 GCS 路径匹配规则由 common.py 中的路径处理逻辑与gcs_lineage_config(path_specs、strip_urls等)控制。
此外源码中还提供两条高级血缘路径(默认关闭):extract_lineage_from_catalog(走 Google Data Catalog 的 Data Lineage API,注意其无法构建视图血缘)与use_exported_bigquery_audit_metadata(读取导出到指定 dataset 中的cloudaudit_googleapis_com_data_access审计日志表,需配套bigquery_audit_metadata_datasets配置)。
3.3 表级与列级画像统计
总览文档承诺抽取table- and column-level profile statistics。画像能力由 bigquery_v2/profiling/ 子目录实现,BigQueryV2Config通过继承StatefulProfilingConfigMixin(见 bigquery_config.py)接入 DataHub 通用的有状态画像配置(采样率、画像列过滤、增量画像等)。需要注意的是:启用画像会改变抽取权限要求(见下节 Role 分配),且会触发use_tables_list_query_v2相关的数据读取路径(have_table_data_read_permission属性由use_tables_list_query_v2 or is_profiling_enabled()判定,见 bigquery_config.py)。
四、前置条件:Service Account 与 IAM 角色
以下内容继承自 setup.md,是接入的硬性前提:你需要一个配置了正确权限的Service Account及其Service Account Key。
4.1 管理侧权限(用于创建账号与授权)
创建和管理 Service Account / Key 时需要:
- 创建 Service Account:
iam.serviceAccounts.create - 为 Service Account 分配角色:
serviceusage.services.enable - 对项目设置权限策略:
resourcemanager.projects.setIamPolicy - 生成 Key:Service Account Key Admin(
roles/iam.serviceAccountKeyAdmin)角色
4.2 抽取侧角色(分配给 Service Account)
| 角色 | 服务的抽取能力 |
|---|---|
| BigQuery Job User | 基础作业执行权限 |
| BigQuery Metadata Viewer | 元数据(Schema)抽取 |
| BigQuery Resource Viewer | 表级血缘与用量抽取 |
| Logs View Accessor | 表级血缘与用量抽取(审计日志读取) |
| BigQuery Data Viewer | 画像(Profiling) |
| BigQuery Read Session User | 画像(Profiling) |
如果计划按project_labels过滤项目,还需在 Google Cloud Console 启用Cloud Resource Manager API;最后创建并下载 Service Account Key(JSON 文件),DataHub 中会用到其中的private_key、private_key_id、project_id、client_email、client_id字段。
4.3 DataHub Cloud(Observe)断言的附加权限
setup 文档还给出了使用 DataHub Cloud 断言(Freshness / Volume / Column / Custom SQL)时的权限矩阵,要点:
- Freshness & Volume 断言:Platform API 源只需 BigQuery Metadata Viewer(免费 API 调用,但受 BigQuery API 速率限制,建议错峰调度);Information Schema 源额外需要 BigQuery Data Viewer;Audit Log 源需要
logging.logEntries.list+logging.privateLogEntries.list;Query / Last Modified Column / High Watermark Column 源需要 BigQuery Data Viewer;DataHub Operation / DataHub Dataset Profile 源无需 BigQuery 权限。 - Column(字段)断言:All Rows Query / Changed Rows Query 需要 BigQuery Data Viewer;DataHub Dataset Profile 无需 BigQuery 权限(仅对部分指标类型可用)。
- Custom SQL 断言:需要 BigQuery Job User + BigQuery Data Viewer,且 Service Account 必须能访问 SQL 中引用的所有表。
五、UI 配置步骤:Secrets、Recipe、调度与验证
以下内容继承自 configuration.md,对应 DataHub UI 摄取工作流:
- 进入右上角Ingestion页(若无入口需管理员授权);
- 在Secrets页点击Create new secret,创建两个私钥型 Secret:
- 名为
BIGQUERY_PRIVATE_KEY的 Secret,值填入 Service Account Key 中的private_key; - 名为
BIGQUERY_PRIVATE_KEY_ID的 Secret,值填入private_key_id;
- 名为
- 在Sources页点击Create new source,选择BigQuery;
- 填写 BigQuery Recipe:Project ID、Client Email、Client ID 取自 Key 文件,Private Key / Private Key ID 两个字段选择上一步创建的 Secret;
- 点击Test Connection——该步骤会实际校验凭据并确认具备抽取全部相关元数据的权限,通过后点Next;
- 设置调度周期(day / hour / minute 等)与时区,点Next;
- 为数据源命名,点击Save and Run,即可看到新管道进入运行状态;
- 验证结果:在 Ingestion 页查看运行状态,展开历史运行记录,进入 Details 页点View All查看本次抽取的实体清单,并抽查某个实体确认包含了预期细节(Schema、血缘、用量等)。
六、项目过滤与关键参数:源码级说明
UI 快速接入使用默认配置即可跑通;当需要控制"摄取哪些项目/数据集"时,recipe 层的过滤配置(定义在 bigquery_config.py 的BigQueryFilterConfig)是关键:
project_ids:显式指定要摄取的项目列表,覆盖project_id_pattern;同时避免给 Service Account 授予resourcemanager.projects.list权限;project_labels:按项目级标签(key:value形式)过滤项目。注意源码中的优先级逻辑:若设置了project_ids则本项不生效;未设置project_ids时先按 label 过滤、再叠加project_id_pattern正则;project_id_pattern/dataset_pattern:AllowDenyPattern 正则过滤。源码中dataset_pattern在match_fully_qualified_names: True(默认)时会把不含.的模式自动改写为.*.<pattern>形式以匹配<project_id>.<dataset_name>全限定名(见 bigquery_config.py 的改写逻辑);rate_limit/requests_per_min:API 限流开关,默认关闭、开启后默认 60 次/分钟(见 bigquery_config.py);max_threads_dataset_parallelism:并行抽取数据集元数据的线程数(默认值来自环境变量,可设为 1 禁用并行);temp_table_dataset_prefix:默认_,利用"下划线开头的数据集默认隐藏"的约定过滤临时表 dataset;sharded_table_pattern:把_yyyymmdd等日期分片表合并为一张逻辑表的正则(已标记 deprecated,谨慎修改)。
另外源码中可以看到若干历史配置迁移行为,避免踩坑:project_id(单数)会自动合并进project_ids;顶层start_time/end_time/bucket_duration/max_query_duration是控制 lineage + usage 的统一时间窗口参数,写在usage.子段下会触发弃用告警并自动前移到顶层(见 bigquery_config.py)。
七、进阶路径:从 UI 走向 CLI
当 UI 快速接入不能满足需求(更复杂的过滤、变换、多源编排)时,总览文档指出的进阶入口是:
- CLI 摄取的整体介绍:metadata-ingestion/README.md(Introduction to Metadata Ingestion);
- 生成版的 BigQuery 连接器参考文档:仓库内所有字段级说明以 bigquery_config.py 中各
Field(description=...)为准,可结合 总览文档 末尾指向的官方 Reference 使用。
连接器的注册入口在 bigquery_v2/bigquery.py(BigQuerySource主实现),配合 bigquery_test_connection.py(Test Connection 的实现)、bigquery_report.py(摄取报告)与 bigquery_schema_gen.py(配方表单生成)构成完整的 source 包。
八、小结
- 本文对应文档为 docs/quick-ingestion-guides/bigquery/overview.md,配套 setup.md 与 configuration.md;
- 完成后你拥有:周期摄取 Projects / Datasets / Tables / Views / Materialized Views / External Tables(含外部表文件属性),并附带用量统计、表级血缘(含外部表到 GCS 的路径血缘)、表级与列级画像;
- 边界明确:Routines 与 Search Indexes 不在抽取范围内;
- 深入定制时,以 bigquery_v2 目录 源码与
BigQueryV2Config的字段定义为最终事实来源。
【免费下载链接】datahubThe Context Platform for your Data and AI Stack项目地址: https://gitcode.com/GitHub_Trending/da/datahub
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考