一、数据仓库基础概念:从“为什么需要它”说起

说实话,我入行头两年一直有个困惑:明明公司已经有那么多业务系统,每天跑得挺欢,为什么还要专门搞个数据仓库?后来踩了几个坑才明白——业务系统是拿来“干活”的,数据仓库是拿来“看路”的。两码事。

1.1 什么是数据仓库

数据仓库,说白了就是一个专门存历史数据的“大仓库”。它把公司各个业务系统的数据捞过来,清洗、整合、存储,最后供你做分析决策用。

我习惯用一句话跟业务方解释:数据仓库就是企业数据的“统一记忆”。你想想看,销售系统记的是今天卖了啥,财务系统记的是钱怎么走的,CRM记的是客户怎么来的——这些数据各自为政,想拉一起看个全貌?没数据仓库之前,那叫一个痛苦。

核心定义:数据仓库(Data Warehouse)是一个面向主题的、集成的、非易失的、随时间变化的数据集合,用于支持管理决策。

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种取值。那段时间我做梦都在做数据映射。

避坑指南:集成阶段最容易出问题的是“同名不同义”和“同义不同名”。比如A系统的“订单金额”含税,B系统的不含税。这种坑,我建议在数据字典里提前标清楚,不然后面报表对不上,哭都来不及。

1.3.3 非易失

业务系统的数据会变——订单状态从“待支付”变成“已支付”。但数据仓库里的数据,一旦写入,原则上就不改了。

为什么?因为你要的是“历史快照”。比如分析上个月的订单转化率,如果数据被改了,那分析结果就失真了。

我习惯的做法是:数据仓库只做“增量追加”,不做“原地更新”。真要修正数据?那也是通过“拉链表”或“快照表”来记录变更历史。

1.3.4 随时间变化

数据仓库里几乎每个表都有时间字段。这不是为了“记录时间”,而是为了支持时间维度的分析。

你想想看:

  • 这个月的销售额跟去年同期比,涨了还是跌了?
  • 过去3年,客户流失率的变化趋势是什么?
  • 昨天的大促活动,每个小时的流量峰值在哪?

没有时间维度,这些分析全做不了。所以数据仓库的数据,通常至少保留3-5年。我见过最夸张的,金融行业的数据仓库保留了10年以上的交易明细。

1.4 一张图看懂数据仓库核心逻辑

下面这张图,是我给团队做培训时常用的。它把数据仓库的定位和核心特征串在了一起:

数据仓库核心逻辑框架图 数据仓库核心逻辑框架 业务系统 OLTP(订单/CRM/ERP) ETL 集成 抽取-转换-加载 数据仓库 面向主题 · 集成 · 非易失 · 随时间变化 面向主题 按业务主题组织 客户/产品/销售 跨系统整合 集成 统一编码与格式 消除数据孤岛 一致性保证 非易失 数据只追加不修改 历史快照保存 支持回溯分析 随时间变化 时间维度标记 趋势与周期分析 数据保留3-5年 输出:支持管理决策 · BI报表 · 数据挖掘 核心思路:OLTP负责“干活”,数据仓库负责“看路”,ETL是中间的桥梁

1.5 一个真实案例:为什么数据仓库不能省

我记得2019年帮一家零售企业做数据架构。他们之前没有数据仓库,所有报表都直接从业务库拉。结果呢?

  • 月底出报表,财务和运营的数据对不上,差了好几百万
  • 想分析“去年双11的客户复购率”,发现历史数据被覆盖了
  • 业务高峰期,报表查询直接把订单库拖慢,前台收银排队

后来我们上了数据仓库,花了3个月把数据整合好。第一个月对账就平了,老板说“终于不用半夜被财务电话吵醒了”。

警告:不要试图用OLTP库替代数据仓库。短期看省了成本,长期看是给自己埋雷。数据量一上来,查询慢、数据不一致、历史丢失——这些问题迟早会找上门。

1.6 本章小结

数据仓库不是什么高深的概念,说白了就是:把散落的数据收拢、洗干净、存好,让你能看清过去、把握现在、预测未来。

记住四个关键词:面向主题、集成、非易失、随时间变化。后面讲维度建模和宽表设计,都是围绕这四个特征展开的。基础打牢了,后面的路才好走。