传统的数据目录通常解决的是“登记”和“搜索”问题:有哪些表、有哪些字段、谁创建的、文档在哪里。随着数据平台规模扩大,仅靠静态目录会遇到几个明显瓶颈。
第一,数据资产数量增长很快。一个企业可能同时使用 Hive、Iceberg、Snowflake、BigQuery、Kafka、dbt、Airflow、Spark、Tableau、Looker、Superset 等工具。
第二,数据上下文变化很快。字段新增、表废弃、owner 变更、任务依赖调整、指标口径更新、质量状态波动,都是高频事件。如果目录系统只能靠人工维护,很快就会失真。
第三,数据治理从“文档治理”转向“运行时治理”。例如,当某个公开数据集新增了 PII 字段,治理系统最好能实时感知并触发访问控制或审查流程。
二、DataHub 的核心定位
DataHub 是一个面向现代数据栈的开源元数据平台,支持 Data Discovery、Collaboration、Governance 和 end-to-end Observability,并采用 model-first 的理念,以便在不同工具和系统之间释放互操作能力 。因此,DataHub 的定位更接近“元数据中枢”,而不是单纯的数据目录页面。
可以把 DataHub 理解为三层能力的组合:
| 层次 | 解决的问题 | DataHub 中的体现 |
|---|---|---|
| 数据资产目录 | 数据在哪里、叫什么、怎么搜索 | Dataset、Dashboard、Chart、Data Job、Data Flow 等实体 |
| 元数据图谱 | 资产之间是什么关系 | Entity、Aspect、Relationship、URN、血缘 |
| 治理与自动化 | 如何让元数据参与实际管理流程 | 标签、术语、Owner、Domain、Policy、Actions、事件订阅 |
DataHub 的关键思想是:把元数据当作可建模、可查询、可订阅、可治理的生产级数据,而不是附属文档。
三、架构原理
DataHub 的整体架构可以概括为:数据源通过采集框架或 SDK 产生元数据变更,元数据服务写入存储,并通过 Kafka 事件驱动搜索索引、图索引、动作框架和外部订阅系统更新。
<span>+</span><span>-----------------------------+</span>
<span>|</span> 数据源与工具生态 <span>|</span>
<span>|</span><span>-----------------------------|</span>
<span>|</span> DB <span>/</span> Lake <span>/</span> Warehouse <span>|</span>
<span>|</span> BI <span>/</span> Dashboard <span>/</span> Chart <span>|</span>
<span>|</span> dbt <span>/</span> Airflow <span>/</span> Spark <span>|</span>
<span>|</span> Kafka <span>/</span> ML <span>/</span> Quality Tools <span>|</span>
<span>+</span><span>--------------+--------------+</span>
<span>|</span>
<span>|</span> Pull <span>/</span> Push
v
<span>+</span><span>------------------+ +------+-------+ +------------------+</span>
<span>|</span> CLI <span>/</span> YAML Recipe<span>|</span> <span>|</span> SDK <span>/</span> API <span>|</span> <span>|</span> UI Ingestion <span>|</span>
<span>|</span> 批式采集 <span>|</span> <span>|</span> 程序化写入 <span>|</span> <span>|</span> 页面配置采集 <span>|</span>
<span>+</span><span>--------+---------+ +------+-------+ +---------+--------+</span>
<span>|</span> <span>|</span> <span>|</span>
<span>+</span><span>---------------------+-----------------------+</span>
<span>|</span>
v
<span>+</span><span>------------+-------------+</span>
<span>|</span> Metadata Service <span>/</span> GMS <span>|</span>
<span>|</span> 元数据写入、校验、查询 <span>|</span>
<span>+</span><span>------+-----------+-------+</span>
<span>|</span> <span>|</span>
<span>|</span> <span>|</span>
<span>+</span><span>----------v--+ +--v----------------+</span>
<span>|</span> Metadata DB <span>|</span> <span>|</span> Kafka Metadata <span>|</span>
<span>|</span> 持久化 Aspect<span>|</span> <span>|</span> Events <span>|</span>
<span>+</span><span>-------------+ +--+----------------+</span>
<span>|</span>
v
<span>+</span><span>------------------+------------------+</span>
<span>|</span> <span>Search</span> Index <span>/</span> Graph Index <span>/</span> Actions <span>|</span>
<span>|</span> 搜索、关系遍历、血缘、自动化响应 <span>|</span>
<span>+</span><span>------------------+------------------+</span>
<span>|</span>
v
<span>+</span><span>-------------+-------------+</span>
<span>|</span> Web UI <span>/</span> GraphQL <span>/</span> REST <span>|</span>
<span>|</span> 搜索、治理、血缘、集成调用 <span>|</span>
<span>+</span><span>---------------------------+</span>
1.元数据模型
DataHub 采用 schema-first 的元数据建模方式,它使用 LinkedIn 的 Pegasus schema language,也就是 PDL,并扩展了一组注解来建模元数据;存储、服务、索引和采集层都直接建立在这个元数据模型之上,从客户端到存储层保持强类型 。
它的模型可以用四个关键词理解:Entity、Aspect、Relationship、URN。
其中:
| 概念 | 含义 | 示例 |
|---|---|---|
| Entity | 元数据图谱中的主节点 | Dataset、Chart、Dashboard、CorpUser、DataJob |
| Aspect | 描述 Entity 某个侧面的属性集合,也是 DataHub 中最小的原子写入单位 | ownership、globalTags、glossaryTerms、status |
| Relationship | 两个 Entity 之间的命名边,可以双向遍历 | OwnedBy、Contains |
| URN | Entity 的字符串化唯一标识 | urn:li:dataset:(...) |
Aspect 是 DataHub 中最小的原子写入单位,多个 Aspect 可以独立更新;Relationship 通过 Aspect 中的外键属性和 @Relationship 注解声明,并支持双向遍历 。
2.事件机制
DataHub 的实时性主要依赖元数据事件:Metadata Change Proposal、Metadata Change Log、Platform Event 等,这些事件最初使用 PDL 定义,并转换为 Avro 后写入或读取 Kafka。典型链路如下:
Metadata Change Proposal 可以理解为“请求变更某个 Entity 的某个 Aspect”;Metadata Change Log 表示已经写入元数据图谱的变更;Platform Event 则表示 DataHub 在业务逻辑层产生的事件,例如 Entity Change Event。这套事件模型让 DataHub 不只是保存元数据,还能把元数据变化传播给搜索、图谱、自动化和外部系统。
3.采集方式
DataHub 的采集方式可以用 Pull 和 Push 两类理解。
Pull-based 集成适合周期性扫描已有系统,例如 Snowflake、BigQuery、dbt、Looker、Airflow 等;Push-based 集成适合在代码运行过程中主动上报元数据,例如通过 Python SDK、Java SDK、Spark、Great Expectations 等方式写入 。
常见落地路线是:先用 CLI + YAML recipe 接入核心数仓和调度系统,再逐步通过 SDK 将自研平台、数据质量结果、指标平台和审批流程中的元数据写入 DataHub。
四、功能特性
DataHub 的功能可以分为数据发现、血缘分析、治理协作、采集集成、API 与自动化几类。
| 功能 | 说明 | 价值 |
|---|---|---|
| 数据搜索与发现 | 在统一目录中搜索 Dataset、Dashboard、Chart 等资产 | 快速定位数据资产,减少重复建表和口径误用 |
| 元数据采集 | 支持从数据库、数仓、BI、调度、流系统等采集元数据 | 让平台资产自动进入目录 |
| 血缘分析 | 支持上游和下游依赖分析 | 评估变更影响,辅助故障定位 |
| Owner 与文档 | 为资产维护负责人、说明、链接、机构记忆等 | 降低跨团队沟通成本 |
| 标签与术语 | 支持 Tags、Glossary Terms 等治理语义 | 标识敏感字段、核心指标、业务主题 |
| API 与 SDK | 支持 GraphQL、OpenAPI、Python SDK、Java SDK、CLI | 方便与平台工程、CI/CD、数据治理流程集成 |
| 事件订阅 | 基于元数据事件驱动外部动作 | 构建自动治理、通知、审计和质量联动 |
DataHub 的 ingestion framework 和 CLI 可从 50+ 数据源拉取元数据,也可以通过 Python 或 Java SDK 将元数据从自有管道和应用中推送到目录;采集方式包括 CLI + YAML recipe、Python SDK、Java SDK 和 UI Ingestion 。
DataHub 的优势不在于某一个单点功能,而在于它把数据发现、元数据建模、血缘、治理和事件机制放在同一个体系中。
- 模型清晰:Entity、Aspect、Relationship 和 URN 让 DataHub 能够表达复杂数据资产及其关系。相比只存表名、字段名和描述的目录系统,这种图谱模型更适合表达“表由哪个任务产出”“报表依赖哪些数据集”“字段属于哪个业务术语”等关系。
- 实时性较好:DataHub 是 stream-oriented,元数据变化可以在数秒内反映到平台中,也可以被外部系统订阅 。这让它适合承载访问控制联动、敏感字段发现、质量告警传播、变更影响通知等场景。
- 集成面广:支持 Snowflake、BigQuery、Redshift、dbt、Databricks、Looker、Tableau、Power BI、Airflow、Spark、Kafka、PostgreSQL、MySQL、Hive、Glue、S3、Iceberg、Unity Catalog 等来源 ,这对异构大数据平台尤其重要。
- 面向工程化:DataHub 支持 CLI、GraphQL、OpenAPI、Python SDK、Java SDK 等接口,这意味着它不是只能靠 UI 人工维护,而是可以纳入平台工程体系。
五、适用场景
DataHub 适合数据资产复杂、团队协作频繁、治理要求较高的组织。尤其是当数据平台已经从单一 Hive 或数仓演进到湖仓、BI、调度、质量、指标、机器学习并存时,DataHub 的价值会更明显。
| 场景 | DataHub 的作用 |
|---|---|
| 数据资产盘点 | 汇总多个系统中的表、视图、文件、Topic、报表、任务 |
| 数据血缘治理 | 分析表、字段、任务、报表之间的上下游关系 |
| 变更影响分析 | 修改字段、下线表、调整任务前识别受影响对象 |
| 数据治理 | 标注 Owner、标签、术语、Domain、敏感信息 |
| 数据质量联动 | 把质量结果、Profile、运行状态写入资产上下文 |
| 平台自助服务 | 让业务和分析人员通过搜索、文档、血缘自行理解数据 |
| AI 数据上下文 | 为 AI Agent 提供可信的数据目录、字段、血缘和语义上下文 |
但 DataHub 不一定适合所有团队。如果团队规模较小、数据源单一、资产数量有限,并且主要痛点只是“写几份表说明”,那么直接维护轻量文档或数仓内置 Catalog 可能成本更低。
六、部署使用
DataHub 部署支持 Self-hosted via Docker、Kubernetes Helm,其中 Docker 适合开发和小团队,Kubernetes Helm 推荐用于生产级自托管部署 。
本地体验最常见的方式是 Docker Quickstart:
<span># macOS / Linux</span>
brew install datahub-project/tap/datahub
<span># 或使用 pip</span>
python3 -m pip install --upgrade acryl-datahub
<span># 启动本地 DataHub</span>
datahub docker quickstart
启动后,可通过http://localhost:9002访问 DataHub Web 应用,默认账号密码为datahub / datahub。
一个典型的 Snowflake 采集 recipe 形态如下:
<span>source:</span>
<span>type:</span> <span>snowflake</span>
<span>config:</span>
<span>account_id:</span> <span>my_account</span>
<span>username:</span> <span>my_user</span>
<span>password:</span> <span>my_password</span>
<span>role:</span> <span>DATAHUB_ROLE</span>
<span>warehouse:</span> <span>COMPUTE_WH</span>
<span>sink:</span>
<span>type:</span> <span>datahub-rest</span>
<span>config:</span>
<span>server:</span> <span>http://localhost:8080</span>
执行采集:
datahub ingest <span>-</span><span>c</span> snowflake_recipe.yml
除了 CLI + YAML recipe,DataHub 还支持 Python SDK、Java SDK 和 UI Ingestion;其中 UI Ingestion 可在 DataHub UI 的 Ingestion 页面配置并运行。
七、工程落地建议
建议不要一开始就把 DataHub 当作“全量治理平台”推进,而是从高价值资产入手。
第一阶段可以接入核心数仓、调度系统和 BI 系统。目标是让用户能查到表、字段、负责人、文档和基础血缘。
第二阶段可以接入 dbt、数据质量平台、指标平台和权限系统。目标是让 DataHub 从“能搜”变成“可信”。
第三阶段可以基于事件和 API 做自动化治理。例如,当高价值表缺失 Owner、核心字段缺少描述、敏感字段进入公开数据集、下游报表依赖废弃表时,自动触发提醒、审批或修复流程。
一个较稳妥的路线如下:
阶段 <span>1</span>:资产可见
数据源接入 <span>-></span> 表字段采集 <span>-></span> Owner/描述补齐 <span>-></span> 搜索可用
阶段 <span>2</span>:关系可信
调度接入 <span>-></span> dbt 接入 <span>-></span> BI 接入 <span>-></span> 血缘可用
阶段 <span>3</span>:治理联动
标签/术语 <span>-></span> 质量结果 <span>-></span> 事件订阅 <span>-></span> 自动化动作
阶段 <span>4</span>:平台化
API 集成 <span>-></span> 自研系统写入 <span>-></span> AI Agent 使用元数据上下文
DataHub 把元数据做成可建模、可订阅、可治理的生产级资产,价值在跨系统发现、血缘与自动治理。适合数据栈复杂、平台工程能力较强的团队分阶段落地。