暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

从业务到模型:数据仓库逻辑模型设计全流程

陈乔数据观止 2025-11-10
151
添加v:cqhg_bigdata,备注数仓,送你一份【企业级数仓体系手册】

可加入微信技术交流群,不定期分享学习资源。

引言:为什么逻辑模型是数据仓库的基石

我们常常看到这样的场景:数据仓库或数据平台建成了,但业务人员抱怨找不到需要的数据,分析师抱怨数据难以理解且口径混乱,开发团队则疲于应对永无止境的“烟囱式”数据开发。问题的根源,往往在于缺失了一个坚实、清晰、面向业务的逻辑模型。

逻辑模型,是连接业务操作与数据技术的桥梁。它不关心数据存储在HDFS还是云上对象存储,也不关心计算引擎是Spark还是Flink。它只关心一件事:如何将纷繁复杂的业务过程,抽象为一套标准、一致、易于理解的数据蓝图。

一、逻辑模型设计全流程概览

逻辑模型的设计是一个环环相扣、迭代演进的过程。其核心流程如下图所示:

二、第一阶段:深入业务,明确边界

真实体验:小组曾接手一个重构项目,之前的模型因为设计者完全依赖二手业务文档,导致一个关键的“订单状态”字段包含了超过10个无法解释的值。最终我们不得不与业务方进行了长达数周的核对,才理清其真实含义。

1. 业务调研:不只是访谈

  • 与谁聊? 不仅要找业务负责人(明确目标和价值),更要找一线业务操作人员(了解真实流程和例外情况),还要找数据分析师(理解现有的分析需求和痛点)。
  • 聊什么?
    • 业务过程:客户从浏览商品到支付完成,经历了哪些核心环节?(例如:加购、提交订单、支付、发货、确认收货)。
    • 关键指标:业务最关心哪些数字?(例如:每日成交金额GMV、新老客占比、渠道转化率)。
    • 业务规则:什么是“有效订单”?“首单客户”如何定义?这些规则是数据一致性的生命线。
    • 数据源:了解操作型系统(如MySQL中的订单表、日志系统中的点击流数据)的数据结构、更新频率和数据质量。

2. 案例:电商业务梳理

假设我们为一个电商平台设计模型,通过调研,我们识别出以下核心业务过程:

  • 用户注册
  • 商品浏览/搜索
  • 加入购物车
  • 提交订单
  • 支付订单
  • 发货
  • 确认收货
  • 申请售后

具体建议:使用“用户故事”或“用例图”来记录和确认业务过程,确保技术团队和业务团队对流程的理解是一致的。

三、第二阶段:选择建模范式——Inmon还是Kimball?

这是一个经典的抉择。虽然现代数据仓库多有融合,但确立主导思想至关重要。

特性
Inmon范式建模
Kimball维度建模
核心思想
自上而下,建设企业级单一事实来源(EDW),再构建部门级数据集市。
自下而上,从业务过程出发,构建一致性维度的数据集市集群。
模型结构
3NF/范式化,减少数据冗余。
星型/雪花模型,反范式化,优化查询性能。
优点
数据集成度高,灵活性好,适应复杂业务变化。
易于理解和使用,查询性能高,快速交付价值。
缺点
建设周期长,对建模人员要求高,直接查询复杂。
业务过程变化可能导致大规模重构。
适用场景
企业级基础数据建设,主数据管理,业务逻辑极其复杂且多变。
面向具体分析场景,快速响应业务决策,是当前互联网行业的主流。

反思与选择:在互联网行业,业务快速迭代,对分析效率要求极高,Kimball的维度建模成为了事实上的标准。因为它对业务人员更友好,SQL查询简单,能快速满足80%的分析需求。下文我们将重点展开维度建模。

四、第三阶段:定义核心概念与架构

1. 构建总线矩阵

总线矩阵是Kimball方法中的核心工具,它明确了业务过程与维度之间的关系。

业务过程 \ 维度
日期
用户
商品
渠道
卖家
...
提交订单
✓
✓
✓
✓
✓

支付订单
✓
✓
✓
✓
✓

发货
✓
✓
✓

✓

用户注册
✓
✓

✓


真实体验:制作总线矩阵的过程,是暴露业务盲点的绝佳机会。我们曾发现,不同部门对“渠道”的定义完全不同,有的指引流渠道,有的指成交平台。在矩阵设计阶段统一这些一致性维度的定义,是避免未来数据孤岛的关键。

2. 划分数据域

为了管理方便,将业务过程按照功能模块归类。

  • 会员域:用户注册、资料修改等。
  • 交易域:下单、支付、退款等。
  • 商品域:商品上架、信息变更、类目调整等。
  • 日志域:浏览、点击、搜索等行为数据。

五、第四阶段:详细模型设计——事实表与维度表

1. 维度表设计

维度是观察数据的角度。设计目标是:稳定、清晰、内容丰富。

  • 主维表:存储当前最新的、完整的维度信息。例如dim_user
    (用户维度表)。
  • 缓慢变化维解决方案:这是维度表设计的核心挑战。
    • TYPE 1:覆盖。直接更新为最新值,不保留历史。适用于纠正错误数据。
    • TYPE 2:增加新行。最常用、最重要的方案。当维度属性变化时,插入一条新记录,并分配新的代理键和版本标识。完美记录所有历史状态。
    • TYPE 3:增加新列。仅保留少量历史版本,例如“当前值”和“上一个值”。

案例:用户U001
改变了所在城市。 TYPE 2处理后的dim_user
表:

user_sk
user_id
user_name
city
start_date
end_date
is_current
1
U001
张三
北京
2023-01-01
2023-05-19
0
2
U001
张三
上海
2023-05-20
9999-12-31
1

具体建议:为所有维度表分配无意义的代理键,而非使用业务系统主键。这能有效隔离源系统变化,并高效处理TYPE 2变化。

顺丰科技二面:什么是代理键,为什么在维度表中它比自然键更受推荐?

2. 事实表设计

事实是业务过程的度量,通常是可加的数字。

  • 事务事实表:最核心、最常用。记录特定业务事件发生时的瞬间状态,数据一旦产生就不再变化。例如fct_order
    (订单事实表)。
  • 周期快照事实表:按固定周期(如每天)汇总数据,用于评估定期绩效。例如fct_daily_sales
    (日销售汇总表)。
  • 累积快照事实表:用于描述具有明确工作流和生命周期的过程,在流程关键节点更新记录。例如fct_order_flow
    (订单流转事实表),记录从下单到收货的各个时间点。

案例:fct_order
(事务事实表)

order_sk
user_sk
product_sk
date_sk
quantity
order_amount
...
1001
2
45
20230520
1
199.00
...

案例:fct_order_flow
(累积快照事实表)

order_sk
user_sk
...
order_date
pay_date
deliver_date
confirm_date
1001
2
...
2023-05-20
2023-05-20
2023-05-22
2023-05-25

具体建议:

  1. 事实表的粒度必须明确声明,且是原子级的。
  2. 尽量将所有维度外键包含在内,确保分析的灵活性。
  3. 可加性事实(如金额、数量)是最佳选择;半可加事实(如余额)需谨慎处理;不可加事实(如比率)应尽量避免,转而存储其分子分母。

六、第五阶段:评审、落地与迭代

1. 模型评审会

召集业务方、分析师、开发工程师进行评审。重点审查:

  • 业务契合度:模型是否能支持已知的分析需求?
  • 易用性:表结构和字段命名对分析师是否友好?
  • 可扩展性:未来业务变化是否容易扩展?
  • 技术可行性:ETL开发复杂度是否在可接受范围?

2. 生成DDL与数据标准

使用SQL DDL将逻辑模型转化为物理模型。

-- 以dim_user为例
CREATE TABLE dim_user (
  user_sk BIGINT COMMENT'用户代理键',
  user_id STRING COMMENT'用户业务ID',
  user_name STRING COMMENT'用户姓名',
  city STRING COMMENT'所在城市',
  start_date STRING COMMENT'记录生效日期',
  end_date STRING COMMENT'记录失效日期',
  is_current INT COMMENT'是否为当前记录 1是 0否',
  dw_create_time TIMESTAMP COMMENT'数据创建时间'
) COMMENT'用户维度表'
PARTITIONED BY (dt STRING COMMENT'日期分区')
STORED AS PARQUET;

具体建议:

  • 建立统一的数仓命名规范,例如表名dim_/fct_
    前缀,字段名小写蛇形。
  • 为每个字段和表添加清晰的注释,这是数据资产可管理性的基础。
  • 考虑数据生命周期,在物理设计时引入分区和分桶策略。

3. 持续运营

逻辑模型不是一成不变的。必须建立一套变更管理流程。

  • 小变更:增加一个维度属性,通过评审后直接补充。
  • 大变更:业务过程重构(如新增一个订单状态),可能需要新建事实表或对现有模型进行重大调整。

反思:我们曾因未建立严格的变更流程,导致不同开发人员对同一个业务概念建立了多个不同的事实表,造成了严重的数据重复和口径不一致。后来我们引入了“数据模型Owner”机制,任何对核心模型的修改都必须由Owner组织评审。

结论

数据仓库逻辑模型设计,本质上是一个将业务知识“翻译”为数据语言的过程。它要求设计者既深刻理解业务,又熟练掌握数据建模技术。

一个优秀的逻辑模型,能够:

  • 打通数据孤岛,提供统一的数据视图。
  • 提升数据质量,确保口径一致、准确可信。
  • 降低开发成本,避免重复建设和混乱的烟囱式开发。
  • 加速数据价值兑现,让分析师和业务人员能够自助、高效地获取洞察。


扫码即可加入星球👇全部获取


#数据仓库    #逻辑模型    #维度建模    #事实表    #维度表    #总线矩阵

文章转载自陈乔数据观止,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论