DataHub BigQuery 接入实战:资产覆盖范围、摄取管道能力与连接器配置解析(基于 quick-ingestion-guides/bigquery)
2026/9/17 21:48:00 网站建设 项目流程

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。管道最终沉淀三类核心资产:

  1. BigQuery 资产实体:Projects(项目)、Datasets(数据集)、Tables(表)、Views(视图)、Materialized Views(物化视图)、External Tables(外部表);
  2. 动态元数据:用量统计(Usage statistics)、表级血缘(Table-level lineage);
  3. 数据形状信息:表级与列级画像统计(Profile statistics)。

其中外部表是重点:连接器的摄取结果会把源文件格式(source format)、文件 URI 列表、压缩方式(compression)、最大坏记录数(max bad records)等外部表特有的属性写入 DataHub 的 custom properties,让"表实际指向哪些 GCS 文件"这类信息直接在目录中可查。

二、明确的能力边界:哪些资产不会抽取

总览文档特别用 caution 提示了连接器的能力边界:Routines(存储过程/函数)与 Search Indexes(搜索索引)不会被抽取,当前连接器不支持这两类资产。规划接入范围时应以此为前提。

反过来,从源码结构看连接器实际支持面比"六大资产"更宽。在 bigquery_config.py 的BigQueryV2Config中还可以看到这些可选能力开关(默认值均以当前仓库为准):

配置项默认值作用
include_schema_metadataTrue是否摄取项目、数据集、表与视图的 Schema 元数据
include_usage_statisticsTrue是否生成用量统计
include_table_lineageTrue是否生成表级血缘
use_queries_v2True启用新版 queries 抽取器(默认路径)
include_table_snapshotsTrue是否摄取表快照(table snapshots)
include_external_urlTrue是否为实体填充 BigQuery Console 跳转链接
capture_table_label_as_tagFalse是否把 BigQuery 表级 labels 捕获为 DataHub 标签
capture_view_label_as_tagFalse视图 labels 转标签
capture_dataset_label_as_tagFalse数据集 labels 转标签
include_linked_dataset_lineageFalse检测 BigQuery Sharing 的 linked datasets 并生成血缘
extract_policy_tags_from_catalogFalse通过 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-usregion-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_configpath_specsstrip_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_keyprivate_key_idproject_idclient_emailclient_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 摄取工作流:

  1. 进入右上角Ingestion页(若无入口需管理员授权);
  2. Secrets页点击Create new secret,创建两个私钥型 Secret:
    • 名为BIGQUERY_PRIVATE_KEY的 Secret,值填入 Service Account Key 中的private_key
    • 名为BIGQUERY_PRIVATE_KEY_ID的 Secret,值填入private_key_id
  3. Sources页点击Create new source,选择BigQuery
  4. 填写 BigQuery Recipe:Project ID、Client Email、Client ID 取自 Key 文件,Private Key / Private Key ID 两个字段选择上一步创建的 Secret;
  5. 点击Test Connection——该步骤会实际校验凭据并确认具备抽取全部相关元数据的权限,通过后点Next
  6. 设置调度周期(day / hour / minute 等)与时区,点Next
  7. 为数据源命名,点击Save and Run,即可看到新管道进入运行状态;
  8. 验证结果:在 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_patternmatch_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),仅供参考

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

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

立即咨询