1. 数据仓库概述:从数据源到应用层,我们到底在搭什么?

大家好,我是老张。做数据这行十几年了,每次带新人,第一个问题总是:「数据仓库到底是个啥?」

这个问题看似简单,但真要讲透,得从几个维度拆开看。今天咱们就聊聊数据仓库的本质,以及它和OLTP、数据湖、数据中台这些概念到底什么关系。

1.1 什么是数据仓库?

数据仓库,说白了就是一个面向分析的数据存储系统。它不是用来处理日常交易的,而是用来支撑决策分析的。

我记得刚入行那会儿,有个老前辈跟我说:「数据仓库就是企业的记忆体。」当时不太理解,后来做久了才明白——交易系统管的是「当下发生了什么」,数据仓库管的是「过去发生了什么,未来可能发生什么」。

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

—— Bill Inmon, 数据仓库之父

你想想看,一个电商平台每天产生几千万条订单数据。交易系统(OLTP)要保证每笔订单能快速写入、实时查询。但如果你要分析「过去三个月哪个品类的复购率最高」,直接在交易库上跑查询?那交易系统就崩了。

这就是数据仓库存在的意义——把分散在各个业务系统的数据,清洗、整合、存储,然后提供给分析人员和决策者使用。

1.2 OLTP 与 OLAP 的区别

这两个概念是数据仓库的基石。我见过不少刚入行的同学,搞混了OLTP和OLAP,结果设计出来的模型四不像。

咱们直接看对比:

维度 OLTP(联机事务处理) OLAP(联机分析处理)
典型系统 订单系统、ERP、CRM 数据仓库、BI报表
用户 一线操作人员 分析师、管理者
操作类型 增删改查(CRUD) 查询、聚合、分析
数据粒度 单条记录 批量、汇总数据
响应时间 毫秒级 秒级到分钟级
数据量 GB级别 TB到PB级别
设计范式 三范式(3NF) 星型/雪花型

为什么会这样?因为两者的目标完全不同。

OLTP追求的是并发和一致性。你下单时,系统必须保证库存扣减和订单生成是原子操作,不能出现超卖。

OLAP追求的是查询和分析效率。你跑一个季度销售报表,可能需要扫描几亿行数据,这时候索引、分区、列式存储才是关键。

我的经验:曾经有个项目,业务方非要在交易库上直接跑分析查询。结果每次跑报表,前台订单就卡死。后来我们做了读写分离,把分析查询全部迁移到数据仓库,问题才解决。记住——别让OLTP干OLAP的活。

1.3 数据仓库的核心特征

这四个特征,是判断一个系统是不是真正数据仓库的试金石。

1. 面向主题

数据仓库不是按「部门」或「系统」来组织数据的,而是按业务主题。比如「客户」、「产品」、「订单」、「销售」这些核心概念。

我习惯的做法是:先梳理业务域,再定义主题域。每个主题域对应一个或多个事实表和维度表。

2. 集成

这是最考验功力的地方。数据来自不同系统——订单系统的「客户ID」可能是数字,CRM系统的「客户编号」可能是字符串。到了数据仓库,必须统一编码、统一单位、统一含义。

我曾经处理过一个案例:A系统的「性别」存的是「男/女」,B系统存的是「M/F」,C系统存的是「1/0」。不集成直接拉过来用?分析结果全是错的。

3. 非易失

数据仓库里的数据,一旦写入就不会被修改或删除。它只做两件事:加载和查询。

你想想看,如果今天跑出来的报表和明天跑出来的不一样,谁敢用?非易失性保证了数据的历史可追溯性。

4. 时变

数据仓库记录的是历史快照。交易系统里,客户的地址改了,旧地址就覆盖了。但在数据仓库里,我们会保留每个时间点的地址版本。

这就是为什么数据仓库能回答「去年这个时候的客户画像是什么样的」这类问题。

注意:很多初学者把「非易失」理解为「数据永远不变」。不对。非易失是指数据一旦进入仓库,不会被业务操作修改,但数据本身会随着时间不断追加新的快照。这是两个概念。

1.4 数据仓库 vs 数据湖 vs 数据中台

这三个概念经常被放在一起讨论,但它们的定位完全不同。我画了一张图,帮你理清关系:

数据仓库 · 数据湖 · 数据中台 关系图 数据源层 业务数据库 日志文件 埋点数据 外部API 数据湖(原始数据存储) 结构化 / 半结构化 / 非结构化 · 保留原始格式 ETL / ELT 数据仓库(清洗整合后) 面向主题 · 集成 · 非易失 · 时变 数据中台(服务化封装) 统一数据服务 · 复用数据能力 · 支撑业务 数据湖是原材料仓库,数据仓库是加工后的成品库,数据中台是成品上架后的零售店

这张图我用了很多次,每次都能帮团队对齐认知。咱们逐层拆解:

  • 数据湖:存储原始数据,什么格式都收。不加工、不建模。适合数据科学家做探索性分析。
  • 数据仓库:对数据湖中的原始数据进行清洗、转换、建模。输出的是高质量、可信任的分析数据。
  • 数据中台:在数据仓库之上,把数据能力封装成标准服务。比如统一用户画像API、实时指标查询接口。

一句话总结:

  • 数据湖解决的是「存得下」的问题
  • 数据仓库解决的是「用得对」的问题
  • 数据中台解决的是「用得爽」的问题

我见过不少团队,一上来就喊「我们要建数据中台」。结果连数据仓库都没搭好,数据质量一塌糊涂。中台建在沙子上,风一吹就倒了。

我的建议:如果你的企业还在数据治理的初级阶段,先老老实实把数据仓库建好。数据中台是水到渠成的事,不是空中楼阁。

1.5 本章小结

这一章我们聊了数据仓库的本质,以及它和OLTP、数据湖、数据中台的区别。核心就几点:

  • 数据仓库是面向分析的,不是面向交易的
  • 四个核心特征:面向主题、集成、非易失、时变
  • 数据湖存原始数据,数据仓库做加工,数据中台做服务