1. 数据仓库概述
各位同学好,我是老赵。做数据这行十几年了,今天咱们聊聊数据仓库。说实话,我刚入行那会儿,对“数据仓库”这个概念也是一头雾水——不就是个数据库吗?怎么还单独起个名字?后来踩了不少坑才明白,这两者压根儿不是一回事。
咱们这门课叫《数据仓库分层设计实践》,第一章节,先把地基打牢。你想想看,如果连数据仓库是什么、跟数据库有什么区别都搞不清楚,后面谈分层设计就是空中楼阁。
1.1 什么是数据仓库?
数据仓库,英文叫 Data Warehouse,简称 DW。我个人的理解很简单:它是一个面向分析的、集成的、稳定的、反映历史变化的数据集合。
说白了,数据仓库不是用来“干活”的,而是用来“看”的。业务系统(比如订单系统、CRM)负责每天处理交易,数据仓库负责把这些散落的数据收拢起来,清洗干净,整理好,然后让分析师、报表工具、AI 模型来“翻阅”。
一句话总结:数据库帮企业“跑业务”,数据仓库帮企业“看业务”。
我记得 2015 年在一家电商公司,业务方每天要拉几十张报表,直接从 MySQL 订单库查。结果一到月底大促期间,订单库 CPU 飙到 99%,前端下单都卡顿。后来我们上了数据仓库,把分析查询全部迁移过去,业务系统才喘过气来。这就是数据仓库存在的意义——为分析而生,不干扰业务。
1.2 数据仓库与数据库的区别
很多新手容易混淆这两个概念。我列个表,你一看就明白:
| 对比维度 | 数据库(OLTP) | 数据仓库(OLAP) |
|---|---|---|
| 核心用途 | 支撑日常业务交易 | 支撑分析决策 |
| 数据特点 | 当前状态,实时更新 | 历史快照,批量刷新 |
| 读写模式 | 频繁增删改查(CRUD) | 大量读取,极少修改 |
| 数据模型 | 高度范式化(3NF) | 维度建模(星型/雪花型) |
| 响应时间 | 毫秒级,要求低延迟 | 秒级到分钟级,可接受 |
| 典型产品 | MySQL, PostgreSQL, Oracle OLTP | Snowflake, Redshift, ClickHouse |
一个小技巧:判断一个系统是数据库还是数据仓库,你就看它是不是经常执行 UPDATE 或 DELETE。如果频繁修改单行数据,那大概率是 OLTP 数据库;如果主要是 SELECT 加聚合,那就是 OLAP 数据仓库。
1.3 数据仓库的四大核心特征
这部分是重点,也是面试常考题。我习惯把这四个特征记成“面集非时”——面向主题、集成、非易失、时变。咱们一个一个说。
1.3.1 面向主题(Subject-Oriented)
数据库是按“业务流程”组织的,比如订单表、用户表、库存表。数据仓库是按“分析主题”组织的,比如“客户分析主题”、“销售分析主题”、“供应链分析主题”。
举个例子:在数据库里,一个客户的信息可能分散在订单表、客服记录表、会员表里。但在数据仓库的“客户主题”里,我们会把客户的所有行为数据整合在一起,方便你从全局视角分析这个客户。
我曾经帮一家零售企业做数据仓库,他们的业务系统有 200 多张表,但分析需求只有 8 个主题。我们按主题重新组织数据后,报表开发效率提升了 3 倍。这就是面向主题的力量——让数据为分析服务,而不是为流程服务。
1.3.2 集成(Integrated)
这是数据仓库最核心、也最头疼的特征。数据来自多个源系统,格式不同、编码不同、单位不同,必须统一。
比如:A 系统的性别字段存的是“男/女”,B 系统存的是“M/F”,C 系统存的是“1/0”。到了数据仓库里,必须统一成一个标准——比如都用“M/F”。
避坑指南:我曾经接手过一个项目,ETL 工程师偷懒,没有做编码统一。结果“男性客户”在报表里出现了三种写法,业务方开会时吵了半小时才发现是同一个意思。从那以后,我要求所有源系统的字典表必须先做映射,再进数据仓库。这个习惯救了我很多次。
集成还包括:字段命名统一、度量单位统一(比如有的用“元”,有的用“分”)、时间格式统一等等。这一步做不好,后面全是脏数据。
1.3.3 非易失(Non-Volatile)
数据仓库里的数据,一旦写入,原则上不允许修改或删除。它只做两件事:加载(Load)和查询(Query)。
为什么?因为数据仓库记录的是历史事实。你今天看到昨天的销售额是 100 万,明天再看,它还是 100 万。如果允许随意修改,那历史分析就失去了可信度。
当然,实际工作中会有“数据修正”的场景,比如发现昨天的数据算错了。但修正的方式不是直接 UPDATE,而是插入一条新的修正记录,保留原始数据。这叫“不可变数据”原则。
1.3.4 时变(Time-Variant)
数据仓库保存的是历史快照。数据库里,一条订单记录被修改后,旧值就丢了。数据仓库里,我们会保留每一天、每一周、每一月的快照。
比如:你想知道“去年双十一当天,每个小时的下单量趋势”。数据库只能告诉你现在的总订单数,但数据仓库可以告诉你每一小时的变化——因为它存了历史。
时变特征通常通过时间维度来实现。每张事实表都会有一个时间戳字段,记录数据所属的时间点。这也是为什么数据仓库的存储量通常比源系统大 5-10 倍——因为存了历史。
核心记忆点:数据库告诉你“现在是什么”,数据仓库告诉你“过去发生了什么,以及趋势是怎样的”。
1.4 数据仓库的典型应用场景
光讲理论没意思,咱们看看实际中数据仓库都在解决什么问题。
- 经营报表与 BI 分析:这是最经典的应用。管理层每天看的销售日报、月报、同比环比,背后都是数据仓库在支撑。我见过最夸张的案例,一家连锁零售企业,每天凌晨 3 点数据仓库跑完 500 多张报表,早上 9 点老板打开手机就能看到全国各门店的实时经营数据。
- 用户行为分析:互联网公司最常用。埋点数据(点击、浏览、停留时长)进入数据仓库,分析师可以分析用户转化漏斗、留存率、流失预警。没有数据仓库,这些分析在原始日志上根本跑不动。
- 风控与反欺诈:金融行业的核心场景。数据仓库整合了用户基本信息、交易流水、设备指纹、黑名单等多源数据,风控模型可以实时或准实时地判断一笔交易是否可疑。
- 数据产品与推荐系统:比如电商的“猜你喜欢”、视频平台的“推荐给你”。这些推荐算法需要海量历史行为数据做训练,数据仓库就是那个“数据粮仓”。
- 监管报送与合规:银行、保险、证券行业,监管机构要求定期报送数据。数据仓库可以保证数据口径统一、历史可追溯,审计时能拿出完整的证据链。
1.5 本章知识体系总览
下面这张图,把本章的核心知识点串起来了。你可以把它当作一张“地图”,后面每学一章,都可以回来对照一下,看看自己处在哪个位置。
1.6 本章小结
这一章咱们把数据仓库的“根”刨清楚了:
- 数据仓库是面向分析的数据集合,跟数据库的定位完全不同。
- 四大特征——面向主题、集成、非易失、时变——是判断一个系统是不是数据仓库的试金石。
- 应用场景覆盖了从传统 BI 到现代数据产品的方方面面,几乎每个有数据需求的企业都离不开它。