一、数据仓库基础概念:从“为什么需要它”说起
说实话,我入行头两年一直有个困惑:明明公司已经有那么多业务系统,每天跑得挺欢,为什么还要专门搞个数据仓库?后来踩了几个坑才明白——业务系统是拿来“干活”的,数据仓库是拿来“看路”的。两码事。
1.1 什么是数据仓库
数据仓库,说白了就是一个专门存历史数据的“大仓库”。它把公司各个业务系统的数据捞过来,清洗、整合、存储,最后供你做分析决策用。
我习惯用一句话跟业务方解释:数据仓库就是企业数据的“统一记忆”。你想想看,销售系统记的是今天卖了啥,财务系统记的是钱怎么走的,CRM记的是客户怎么来的——这些数据各自为政,想拉一起看个全貌?没数据仓库之前,那叫一个痛苦。
1.2 OLTP 与 OLAP 的区别
这两个概念我当年背得滚瓜烂熟,但真正理解是在一次线上事故之后。那次业务系统白天跑批,直接把OLTP库拖死了,前台收银全卡住。老板脸都绿了。
后来我画了张表给团队看,大家一下就明白了:
| 对比维度 | OLTP(联机事务处理) | OLAP(联机分析处理) |
|---|---|---|
| 典型系统 | 订单系统、ERP、CRM | 数据仓库、BI报表 |
| 用户 | 一线操作人员 | 分析师、管理层 |
| 操作类型 | 增删改查(短事务) | 查询、聚合(长查询) |
| 数据量级 | GB级,单次操作小 | TB/PB级,全量扫描 |
| 响应时间 | 毫秒级 | 秒级到分钟级 |
| 设计目标 | 高并发、高可用 | 高吞吐、灵活分析 |
嗯,这里要注意:千万别在OLTP库上跑分析查询。我曾经见过一个团队,直接在订单库上跑月报聚合,结果跑了40分钟,把整个库的锁都堵死了。这就是典型的“用错工具”。
1.3 数据仓库的四大核心特征
这四个特征,我每次面试新人都会问。不是考背诵,而是看他们能不能讲出“为什么”。
1.3.1 面向主题
业务系统是按“流程”组织的——订单、支付、物流各管各的。数据仓库是按“主题”组织的——比如“客户”这个主题,会把他在订单、客服、营销里的所有行为串起来。
我举个例子:你在电商平台买过东西,业务系统里你的信息散落在十几个表里。但在数据仓库里,“客户”就是一个主题域,所有跟你相关的数据都汇聚在这里。
1.3.2 集成
这是数据仓库最“脏”的活,也是最有价值的活。不同系统的数据格式千奇百怪:
- A系统里性别存的是“男/女”
- B系统里存的是“M/F”
- C系统里干脆是“1/0”
进数据仓库之前,必须统一编码。我做过一个项目,光“客户状态”这个字段,就对齐了7套系统、13种取值。那段时间我做梦都在做数据映射。
1.3.3 非易失
业务系统的数据会变——订单状态从“待支付”变成“已支付”。但数据仓库里的数据,一旦写入,原则上就不改了。
为什么?因为你要的是“历史快照”。比如分析上个月的订单转化率,如果数据被改了,那分析结果就失真了。
我习惯的做法是:数据仓库只做“增量追加”,不做“原地更新”。真要修正数据?那也是通过“拉链表”或“快照表”来记录变更历史。
1.3.4 随时间变化
数据仓库里几乎每个表都有时间字段。这不是为了“记录时间”,而是为了支持时间维度的分析。
你想想看:
- 这个月的销售额跟去年同期比,涨了还是跌了?
- 过去3年,客户流失率的变化趋势是什么?
- 昨天的大促活动,每个小时的流量峰值在哪?
没有时间维度,这些分析全做不了。所以数据仓库的数据,通常至少保留3-5年。我见过最夸张的,金融行业的数据仓库保留了10年以上的交易明细。
1.4 一张图看懂数据仓库核心逻辑
下面这张图,是我给团队做培训时常用的。它把数据仓库的定位和核心特征串在了一起:
1.5 一个真实案例:为什么数据仓库不能省
我记得2019年帮一家零售企业做数据架构。他们之前没有数据仓库,所有报表都直接从业务库拉。结果呢?
- 月底出报表,财务和运营的数据对不上,差了好几百万
- 想分析“去年双11的客户复购率”,发现历史数据被覆盖了
- 业务高峰期,报表查询直接把订单库拖慢,前台收银排队
后来我们上了数据仓库,花了3个月把数据整合好。第一个月对账就平了,老板说“终于不用半夜被财务电话吵醒了”。
1.6 本章小结
数据仓库不是什么高深的概念,说白了就是:把散落的数据收拢、洗干净、存好,让你能看清过去、把握现在、预测未来。
记住四个关键词:面向主题、集成、非易失、随时间变化。后面讲维度建模和宽表设计,都是围绕这四个特征展开的。基础打牢了,后面的路才好走。