首页/数据/数仓建模速查/Data Vault 模型基础
建模基础69 条

Data Vault 模型基础

Data Vault 用 Hub(业务键)、Link(关系)、Satellite(描述属性)三类对象组织数据,强调可审计、可并行加载与源系统可追溯。

数仓建模速查数据更新于 2026-10-13

Data Vault 解决什么问题

Data Vault 用 Hub、Link、Satellite 三类对象组织数据:Hub 存业务键,Link 存实体之间的关系,Satellite 存描述属性与历史。它把「同一件事的稳定标识」与「属性的历史变化」彻底分开,因此天然支持多源整合、并行加载与逐条追溯来源。

基本信息

Hub业务键去重 + 代理键(常用 hash 生成)
Link实体间关系,只存键,不存描述
Satellite描述属性与历史,按源或变更节奏拆分
附加字段hash key、load_dts、record_source、hashdiff
适用场景多源整合、强审计、频繁新增源系统

典型使用场景

  • 多源整合:同一客户在 CRM、ERP、订单系统各有标识,需要长期合并而不丢来源
  • 审计与合规:每条记录都要能回答来自哪个系统、什么时候进入仓库
  • 源系统频繁新增:新增一个源只需加 Hub、Link 或 Satellite,不动既有结构
  • 并行加载:按对象分片加载,互不阻塞,吞吐可线性扩展
  • 需要重放:原始与历史完整保留,可回溯到任意时点重算

三类对象示意

三类对象示意
-- Hub:只存业务键与加载信息,同一业务键只出现一次
hub_customer(hub_customer_key, cust_id, load_dts, record_source)

-- Link:只存关系,两个 Hub 的键加加载信息
link_order_customer(link_key, hub_order_key, hub_customer_key, load_dts)

-- Satellite:属性与历史,按源拆分,hashdiff 用于变更检测
sat_customer_crm(hub_customer_key, load_dts, name, level, hashdiff)

-- 取某客户当前最新属性:从 Satellite 里按加载时间取第一行
SELECT * FROM sat_customer_crm
WHERE hub_customer_key = :hk
ORDER BY load_dts DESC LIMIT 1;

对象职责读法

对象存什么不存什么
Hub业务键、代理键、来源与加载时间任何描述属性
Link实体间关系的键组合描述属性、度量
Satellite属性值、历史版本、变更标记关系的键组合
hash key由业务键计算出的代理键业务含义,仅用于关联
Data Vault 的可审计与可并行是有代价的:查询一张完整的客户视图要关联多个 Hub、Link 与 Satellite。它的定位是集成层,面向分析仍需要在上层做维度化加工,直接把它交给 BI 使用通常会被 join 复杂度劝退。
hash key 的算法与输入必须在全仓统一(例如统一是否大写、是否拼接来源标识),算法不一致会导致本该相同的业务键算出不同哈希,join 结果静默出错,排查成本极高。

易错点

  • 把 Data Vault 当最终分析层,BI 侧要写多层 join,使用方绕开模型直接查源表
  • hash key 拼接规则或算法不统一,同一业务键算出不同值,关联结果缺失且不报错
  • 把所有属性塞进 Hub 或 Link,模型失去扩展性,新增源时不得不改存量结构
  • 单 Satellite 混装多个源的数据,源之间谁覆盖谁说不清,审计追溯失效

数据来源与参考

  • Data Vault 2.0 建模规范
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌