数据湖 vs 数据仓库:该不该上湖?怎么搭?
本内容发表于:2026-06-03 11:17:32
浏览量
1003

数据湖 vs 数据仓库:该不该上湖?怎么搭?

微信图片_2026-06-03_111232_280.png

去年一个客户问我:“我们想把所有数据都存到S3,用Presto查,把数仓退了。数据湖不是更便宜吗?”

我问他:“你们现在数仓里有多少张表?”

“几百张。”

“有多少人用?”

“几十个分析师。”

“现在的查询响应时间呢?”

“大部分秒级,慢的几十秒。”

“换了Presto直接查S3,你觉得会更快还是更慢?”

他沉默了一会儿。

这是数据湖最常见的误解:以为数据湖是数仓的廉价替代品。其实不是替代,是补充。

今天聊聊数据湖与数据仓库。不是那种“数据湖很重要”的入门课,而是帮你理清楚:数仓和湖什么关系?该不该上湖?怎么搭才不变成数据沼泽?

01 数仓 vs 数据湖:两个物种

数据仓库:存储加工后的、结构化、已清洗的数据。存进去之前就知道怎么用。查询快,但贵。适合BI报表、固定分析。

数据湖:存储原始格式、结构化/半结构化/非结构化数据。存进去时不知道以后怎么用。存储便宜,但查询慢。适合数据探索、机器学习、日志分析。

简单说:数仓是精品超市,货架上都是处理好的商品,但租金贵。数据湖是批发仓库,什么原材料都有,便宜,但你要自己加工。

那家客户想用数据湖替代数仓,就是想把精品超市退了,直接去批发仓库买菜做饭。可行,但分析师得自己洗菜切菜,效率会降。

02 数据湖的三大坑

数据湖不是把数据丢进S3就完事。没治理,湖变沼泽。

坑一:没治理,查不动

一堆JSON、CSV、Parquet文件,没有元数据、没有分区、没有压缩。Presto查起来全表扫描,慢到怀疑人生。

解法:元数据管理。用Glue、Data Catalog、Hive Metastore管理表结构、分区、格式。

坑二:格式不统一

有的部门存Parquet,有的存CSV,有的存Avro。查询时得写不同的解析逻辑。

解法:统一存储格式。推荐Parquet(列存、压缩好)或ORC(带索引)。上游写入时转换。

坑三:ACID事务支持弱

Hive传统表不支持upsert、删除。数据湖里更新一条记录,要重写整个分区。

解法:用表格式。Iceberg、Delta Lake、Hudi支持ACID、时间旅行、Schema演进。

03 湖仓一体:两全其美

数据湖的存储成本低,数仓的查询性能好。湖仓一体兼得。

什么是湖仓一体:用数据湖存储,用数仓查询引擎查湖,或者用湖的查询引擎查数仓。

两种实现路径

  • 数仓查湖:Redshift Spectrum、BigLake、雪花外部表。数仓不存数据,只存元数据,查询时扫描湖上的文件。查询性能比直接查湖好,比纯数仓差一点。适合冷数据、不常查的数据。

  • 湖上建仓:在湖上用表格式(Iceberg、Delta)组织数据,用Presto、Trino、Spark查询。性能和数仓接近,但存储成本低。适合热数据、对延迟不敏感的分析。

那家客户最后选了湖仓一体:热数据存数仓,冷数据归档到S3,用Spectrum查。数仓存储从10TB降到2TB,成本降了60%。分析师只用数仓查热数据,需要查历史数据时,自动走Spectrum。

04 怎么选:要不要上湖?

该上湖的场景

  • 有大量非结构化数据(日志、图片、视频)

  • 数据量巨大(PB级),数仓存不起

  • 数据探索性质强,还不知道怎么建模

  • 机器学习训练需要原始数据

不该上湖的场景

  • 只有结构化数据,数仓完全够用

  • 分析师只会SQL,不想学新工具

  • 对查询性能要求高(秒级)

  • 团队没有数据工程能力

那家客户有日志分析需求,每天几TB,数仓存不起,适合上湖。但他们的核心BI报表,还是留在数仓。

05 搭湖的技术选型

存储格式:首选Parquet。列存、压缩率高、支持嵌套结构。ORC也行,生态稍窄。

表格式

  • Iceberg:时间旅行、Schema演进、隐式分区。适合需要历史回溯的场景。

  • Delta Lake:ACID、流批一体、Z-Order优化。适合Spark生态。

  • Hudi:增量处理、Upsert、记录级别的变更。适合CDC场景。

查询引擎

  • Athena/Presto:SQL on湖,适合BI分析师

  • Spark:ETL、复杂计算,适合数据工程师

  • Trino:高性能分布式SQL,适合大规模查询

元数据管理:Glue、Data Catalog、Hive Metastore

06 一个真实案例:日志平台从数仓迁到湖

一个客户,日志数据每天5TB,存在数仓里,存储成本每月2万美元。查询主要是“过去7天错误日志统计”,性能要求不高(分钟级)。

改造方案:

  • 日志写入S3,按日期分区,格式Parquet

  • 元数据放Glue

  • 用Athena查询

成本:S3存储每月3000美元,Athena按扫描量付费。总成本降到每月5000美元以内。查询性能:扫描一天的数据,10秒内返回。分析师接受。

数据负责人说:“以前日志存数仓,贵;现在存湖,便宜,查得也不慢。”

写在最后

数据湖和数据仓库不是二选一,是搭档。

那家客户的CTO后来总结:“数仓负责快,湖负责大。两者配合,才是现代数据平台的完整拼图。”

你的数据,适合进仓还是进湖?还是两个都要?