首页/数据/数据工程与 ETL 速查/数据仓库与数据湖的关系

数据仓库与数据湖的关系

数据仓库面向结构化、强治理、口径稳定的分析;数据湖面向前置存储多形态原始数据、schema 后置;湖仓一体在对象存储上叠加表格式(Iceberg/Hudi/Delta)与 SQL 引擎,兼顾两者。

数仓、数据湖与湖仓一体

数据仓库面向结构化数据,写入时校验 schema,治理强、口径稳定,适合支撑固定报表与指标体系;数据湖用对象存储承载结构化与非结构化原始数据,schema 后置(读取时解析),成本低但治理责任交给上层。湖仓一体在对象存储之上叠加 Iceberg、Hudi、Delta 这类表格式,为文件加上事务、快照与 schema 演进能力,再用 Spark、Trino、Flink 等引擎查询,兼顾低存储成本与数仓级可靠性。

基本信息

数仓结构化为主,写入时校验 schema,MPP 或数仓引擎
数据湖原始多形态数据,读取时解析,对象存储加计算引擎
湖仓一体对象存储加表格式(Iceberg/Hudi/Delta),多引擎共享
表格式关键能力ACID 事务、时间旅行、schema 演进、分区裁剪
选型依据数据形态、治理要求、并发查询类型与成本预算

典型使用场景

  • 指标体系与固定报表:走数仓分层,保证口径统一与可追溯
  • 埋点日志、IoT 原始数据归档与探索:先入湖,用后再加工建模
  • 机器学习特征原始数据与训练样本,需要大范围扫描与格式自由
  • 多引擎共享同一份数据:批、流、交互式分析同时读取同一张湖表
  • 历史回溯:利用表格式的时间旅行读取某次写入前的数据快照

三者对比

维度数据仓库数据湖湖仓一体
数据类型结构化为主结构化、半结构化、非结构化结构化加开放格式文件
schema写入时校验读取时解析表格式提供演进与校验
治理强,口径统一弱,依赖上层治理元数据与权限统一管理
典型引擎MPP 与数仓引擎Spark 加对象存储Spark、Trino、Flink 加表格式
存储成本相对较高低低

湖表定义与时间旅行

湖表定义与时间旅行
-- Spark SQL 建 Iceberg 表:分区与表属性一并声明
CREATE TABLE lake.orders (order_id BIGINT, amount DECIMAL(18,2), dt STRING)
USING iceberg
PARTITIONED BY (dt);

-- 时间旅行:读取某个快照或时间点之前的版本
SELECT * FROM lake.orders VERSION AS OF 20261011093000;
SELECT COUNT(1) FROM lake.orders TIMESTAMP AS OF '2026-10-11 09:30:00';
选型看数据形态与治理要求:口径要求强一致的场景仍建议按数仓范式组织,湖负责承载原始数据与探索性分析,湖仓一体只是让两者共享同一份存储。
把数据湖当数仓用却缺少口径治理,报表数字就不可信;湖仓一体并没有自动带来治理能力,元数据、权限与质量规则仍需单独建设。
湖里保留海量原始数据必须有生命周期策略(冷热分层、压缩小文件、定期清理无引用快照),否则存储与元数据规模会持续膨胀,查询也会被小文件拖慢。

易错点

  • 把数据湖当数仓用却不做口径治理,报表数据不可信,业务方最终回到手工账
  • 湖里保留全部原始数据且无生命周期策略,小文件与快照堆积导致成本与查询耗时双涨
  • 湖表沿用对象存储目录直接写入(不走表格式提交),并发写破坏文件清单,读出一半数据
  • 只关注引擎而忽略元数据与权限统一,同一份数据在不同引擎里看到不一致的权限边界

数据来源与参考

  • Apache Iceberg 与 Delta Lake 官方文档
  • 行业湖仓建设实践
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌