上一篇我们介绍了 ETL。数据从业务系统进入数据平台之后,需要经过清洗、转换、关联和聚合,才能真正变成可以分析的数据。
但处理完之后还有一个问题:
这些数据到底放在哪里?
如果只是把数据继续放回 MySQL,似乎也可以查询,但随着数据量越来越大,分析场景越来越复杂,传统业务数据库就很难承担这个任务。
于是,数据平台中出现了两个非常重要的概念:数据仓库和数据湖。
一、为什么不能直接用 MySQL 做数据分析?
先看一个比较简单的场景。
一家电商公司使用 MySQL 保存订单:
bash
users
orders
products
payments
平时业务系统查询的是:
ini
SELECT *
FROM orders
WHERE user_id = 10001;
这种查询数据量通常不大,而且主要是服务于具体业务。
但是数据分析可能会执行这样的 SQL:
scss
SELECT
city,
DATE(created_at),
SUM(amount),
COUNT(*)
FROM orders
GROUP BY city, DATE(created_at);
甚至还需要关联几十张表,统计几年甚至几十亿条数据。
这类分析查询可能会消耗大量 CPU、内存和磁盘 I/O。
如果直接在生产 MySQL 上运行,可能影响正常的订单、支付和用户请求。
所以数据平台通常会把业务数据同步到专门用于分析的存储系统。
这就是数据仓库出现的重要原因之一。
二、数据仓库到底是什么?
数据仓库,英文叫 Data Warehouse,简称 DW。
可以简单理解为:
专门为数据分析和统计而建设的数据存储系统。
业务数据库关注的是:
用户注册
下单
支付
发货
退款
数据仓库关注的是:
今天卖了多少钱?
哪个城市销售额最高?
用户复购率是多少?
过去一年销售趋势怎么样?
两者的目标并不一样。
可以简单理解成:
markdown
业务数据库
↓
负责业务运行
数据仓库
↓
负责数据分析
所以数据仓库并不是简单地把 MySQL 换成另一个数据库,而是针对分析场景重新组织数据。
三、数据仓库里的数据是什么样的?
假设业务系统中有订单表:
orders
order_id
user_id
product_id
amount
created_at
数据仓库可能会围绕分析需求重新设计数据模型。
例如:
事实表
fact_order
订单金额
订单数量
商品数量
用户 ID
商品 ID
时间 ID
再配合:
维度表
dim_user
dim_product
dim_date
这样就可以从不同维度分析订单。
比如:
按时间统计
按城市统计
按用户统计
按商品统计
按渠道统计
这也是数据仓库和业务数据库一个很大的区别。
业务数据库通常围绕业务功能设计,而数据仓库通常围绕分析需求设计。
四、什么是数据湖?
数据仓库解决了结构化数据的分析问题,但数据平台继续发展之后,又遇到了新的问题。
现实中的数据并不只有 MySQL 表。
还有:
javascript
日志
JSON
CSV
图片
音频
视频
IoT 数据
第三方 API
半结构化数据
这些数据如果全部提前整理成数据仓库需要的结构,会非常麻烦。
于是就出现了数据湖(Data Lake) 。
数据湖可以简单理解为:
一个能够保存大量原始数据、结构化数据、半结构化数据甚至非结构化数据的数据存储平台。
它更强调:
先把数据保存下来,再根据后续需求进行处理和分析。
例如:
javascript
MySQL 数据
日志
JSON
CSV
IoT
API
↓
数据湖
↓
后续处理
这和传统数据仓库"先整理、再存储"的思路存在一定区别。
五、数据仓库和数据湖有什么区别?
可以先用一个简单的方式理解:
| 对比 | 数据仓库 | 数据湖 |
|---|---|---|
| 数据 | 主要是结构化数据 | 结构化、半结构化、非结构化 |
| 数据状态 | 通常经过处理 | 可以保存原始数据 |
| 结构 | 相对固定 | 更灵活 |
| 主要用途 | BI、报表、分析 | 大规模数据存储与处理 |
| 数据处理 | 通常先处理再存 | 可以先存后处理 |
比如公司每天产生 1TB 日志。
如果全部先转换成固定的数据表,再保存下来,开发成本可能比较高。
数据湖可以先把原始日志保存下来:
原始日志
↓
数据湖
↓
需要分析的时候再处理
这样就可以保留更多原始数据。
六、数据湖是不是比数据仓库更先进?
不能简单这么理解。
它们解决的问题不同。
数据仓库更强调:
数据经过整理之后,为分析提供稳定的数据结构。
数据湖更强调:
大量数据先保存下来,同时保留原始数据和灵活处理能力。
所以实际企业里经常不是二选一。
可能是:
业务系统
↓
数据采集
↓
数据湖
↓
数据处理
↓
数据仓库
↓
BI
数据湖保存原始数据,数据仓库保存经过加工、适合分析的数据。
两者可以同时存在。
七、什么是 Data Lakehouse?
学习数据平台的时候,还会经常看到一个新的概念:
Data Lakehouse,数据湖仓。
它试图把数据湖和数据仓库的一些能力结合起来。
简单理解就是:
diff
数据湖
+
数据仓库
=
Lakehouse
它希望既能够像数据湖一样保存大量原始数据,又能够提供类似数据仓库的数据管理、事务和分析能力。
现在很多现代数据平台都会围绕 Lakehouse 架构建设。
其中经常会看到:
Apache Iceberg
Apache Hudi
Delta Lake
这些技术主要解决数据湖中的表格式、事务、更新、版本管理等问题。
对于刚开始学习数据平台的人来说,不需要马上深入这些技术。
先理解:
数据仓库解决分析问题,数据湖解决大规模、多类型数据存储问题,Lakehouse 尝试把两者结合起来。
八、数据到底应该怎么存?
假设现在有一个电商平台。
每天产生:
订单数据
用户数据
商品数据
访问日志
支付数据
推荐数据
可以设计成:
markdown
┌── 数据仓库 ──→ BI
│
业务系统 → 数据采集 → 数据湖
│
└── 数据处理 → 实时分析
原始数据进入数据湖保存。
经过 ETL / ELT 处理之后,可以把适合分析的数据写入数据仓库。
最后 BI 工具从数据仓库中读取数据,生成报表和数据看板。
这样一来,整个数据链路就越来越清晰了。
九、常见的数据仓库和数据湖技术
了解概念之后,再来看技术就比较容易了。
数据仓库领域经常会看到:
Hive
ClickHouse
Snowflake
BigQuery
Redshift
数据湖相关技术则可能看到:
S3
HDFS
Iceberg
Hudi
Delta Lake
数据处理过程中还可能结合:
Spark
Flink
Trino
数据平台最终可能是这些技术组合起来的,而不是只使用某一个产品。
例如:
MySQL
↓
Kafka
↓
Flink
↓
Iceberg
↓
Trino
↓
BI
也可能是另一套技术组合。
所以学习数据平台时,不应该一开始就陷入"到底应该学哪个框架"。
更重要的是先理解每个组件在整个数据链路中的位置。
十、从整个数据平台重新看数据仓库和数据湖
现在把前面几篇文章放到一起:
业务系统
↓
数据采集
↓
全量 / 增量 / CDC
↓
Kafka
↓
ETL / ELT
↓
数据湖 / 数据仓库
↓
数据分析 / BI
第一篇我们认识了数据平台。
第二篇解决了数据怎么进入平台。
第三篇解决了数据进入之后怎么处理。
这一篇解决了:
处理好的数据应该放在哪里。
到这里,数据平台的基本骨架已经出来了。
接下来还需要把这些组件真正串起来,看看一条数据从业务系统产生,到最终进入 BI 报表,中间到底经历了什么。
这也是下一篇要解决的问题。
总结
数据仓库和数据湖都是数据平台的重要组成部分。
数据仓库主要面向结构化数据分析,强调经过整理的数据和稳定的分析模型;数据湖则更加关注大规模、多类型以及原始数据的存储。
实际企业中,两者往往会结合使用,再配合 Kafka、Flink、Spark、Iceberg、ClickHouse 等技术,形成完整的数据平台架构。
真正学习数据平台,不是把这些技术一个个背下来,而是要理解:
数据为什么从这里流向那里,以及每一个组件到底解决了什么问题。