数据湖最核心的理念是“先存储,后定义”,即允许企业以原始格式存储海量数据,等到需要分析时再按需定义数据结构,这大幅提升了数据灵活性和业务响应速度。
数据湖和传统数据仓库的区别是什么?先存后用的逻辑
传统数据仓库要求你在写入数据之前就设计好模型(Schema-on-Write),数据必须经过清洗、转换、加载后才能存储,业务一旦变化,模型调整成本极高,常常导致数据“僵死”,数据湖则反过来,采用读取时定义模式(Schema-on-Read),原始数据以原生格式直接存入,不强制结构,你需要分析时,再用查询引擎现场定义字段、类型和关系。
两者核心差异一览:
| 维度 | 传统数据仓库 | 数据湖 |
|---|---|---|
| 数据处理时机 | 写入前强制转换(ETL) | 存储后根据需求处理(ELT) |
| 数据结构 | 预定义,修改困难 | 动态定义,按需适配 |
| 存储格式 | 行式或列式,压缩后仍结构化 | 支持JSON、Parquet、CSV、日志等任意格式 |
| 扩展性 | 横向扩展有限,成本线性增长 | 基于对象存储,近乎无限扩展 |
| 典型场景 | 报表、BI仪表盘、固定维度分析 | 数据探索、机器学习、实时流处理 |
关键结论:数据仓库擅长“已知问题”的重复查询,数据湖擅长“未知问题”的探索,如果你经常面对不确定的分析需求,或者需要存储原始日志、IoT传感器数据、社交媒体抓取内容,数据湖的“先存后定义”模式能让你避免反复返工,保留数据的全部可能性。
业内专家指出,超过70%的企业在传统数仓中积累了大量从未被使用的冗余数据,而数据湖的灵活存储策略有效降低了数据准备成本。
数据湖存储成本高吗?如何优化存储成本
很多企业担心数据湖因存储原始数据而产生巨额费用。成本高低取决于存储策略,而非数据湖本身

,以下是控制成本的关键动作:
- 分层存储:使用对象存储(如AWS S3、简米云OSS)的冷热分层功能,热数据放SSD加速层,冷数据放归档层,成本可降低60%以上。
- 压缩与格式优化:采用列式存储格式(如Parquet、ORC),配合Snappy或Zstd压缩,存储空间通常减少50%–80%。
- 生命周期管理:设置自动策略,将超过30天未访问的数据迁移到低频存储,超过90天移入冷归档,大部分云厂商支持按天自动执行。
- 数据清理:定期删除重复、无用或过期的原始数据块,利用数据湖的元数据目录(如AWS Glue、Hive Metastore)标记数据时效,避免“存储垃圾”。
实操建议:在搭建数据湖之初就规划好存储桶(Bucket)的组织规则,例如按“业务域/数据源/时间”分层,便于后续管理和降本,多数云服务商提供存储成本估算器,你可以在选型时模拟不同数据量和访问频率下的费用,做出更精准的预算。
数据湖架构设计要点:存储与计算分离
现代数据湖的主流架构将存储层和计算层完全解耦,这是实现“先存后定义”的技术基础,核心设计包括:
存储层
- 统一对象存储:作为单一事实源,存放所有原始数据,推荐使用支持S3协议的对象存储,兼容性最广。
- 数据编目:元数据服务(如Apache Hive Metastore、AWS Glue Data Catalog)追踪数据位置、格式、模式,让计算引擎能“看见”数据。
- 分区与分区键:按时间、地域等高频查询字段分区,避免全表扫描,查询效率提升数倍。
计算层
- 无状态计算引擎:Spark、Presto/Trino、Flink等按需启动,处理完即释放资源,避免计算资源浪费。
- 数据湖格式:Apache Iceberg、Delta Lake、Hudi等事务性格式支持ACID、时间旅行、增量读取,让数据湖具备类似数据库的可靠性。
管理层
- 权限控制:基于存储桶策略或计算引擎的RBAC,确保数据安全。
- 数据质量监控:引入Apache Griffin、Deequ等工具,对原始数据做实时或定期校验,不干净的数据也能先存,但标记为“待验证”。

架构示例流程:原始数据通过Kafka/NiFi流入对象存储 → 无服务器计算(如AWS Lambda)自动触发元数据更新 → 分析师从Trino或Athena查询时,Schema自动推断 → 结果写入临时表或直接导出,整个过程无需预先定义表结构,数据从落地到可查询仅需数秒。
数据湖适合什么场景?三个典型业务方向
“数据湖适合什么场景”是处于选型阶段的团队最常问的问题,以下三种情况最能发挥“先存后定义”的价值:
- 实时日志与运维分析:服务器日志、应用Metrics、网络流量等数据量巨大且格式多变,先全部存入数据湖,再按需提取异常事件、计算失败率,避免了传统ETL的滞后性。
- 机器学习特征工程:模型训练需要大量原始特征,特征类型和数量在迭代中频繁变化,数据湖允许你保留所有原始特征,在训练前动态拼接,支持快速实验。
- 物联网与传感器数据:设备上报的数据格式各异,且常常包含噪声,先存储后清洗,结合流处理框架实时过滤,能同时满足实时预警和历史回溯。
行业共识认为,数据湖在数据资产化初期的作用尤为明显,企业往往不清楚未来哪些数据有用,先存下来,等业务场景明确后再“按需取值”,这比传统数仓的“先规划后建设”模式更适应快速变化的市场需求。
数据湖实施四步走:从存储到查询
以下是可验证的实操步骤,基于业界主流组件(以AWS云环境为例,其余云平台逻辑类似):
-
搭建存储底座
- 创建S3存储桶,设置生命周期规则(如30天转低频,90天转归档)。
- 配置AWS Glue Data Catalog,定义数据库和表的分区策略(例如按日期分区)。
- 示例命令(AWS CLI):
aws s3api create-bucket --bucket my-datalake-raw --region us-east-1 aws s3api put-bucket-lifecycle-configuration --bucket my-datalake-raw --lifecycle-configuration file://lifecycle.json

-
数据摄取
- 使用Kinesis Data Firehose或Amazon Kinesis Agent实时接入日志。
- 批量数据通过AWS DataSync或直接复制到S3。
- 数据格式保留原始(JSON、CSV、Parquet),不强制转换。
-
元数据注册
- 在Glue Data Catalog中创建表,指向S3位置,Schema字段留空或使用爬虫(Crawler)自动推断。
- 示例:
CREATE EXTERNAL TABLE raw_logs (col1 string, col2 string) PARTITIONED BY (dt string) STORED AS PARQUET LOCATION 's3://my-datalake-raw/logs/'
-
按需查询与分析
- 使用Amazon Athena(无服务器Presto)直接对表执行SQL,无需管理集群。
- 复杂分析用Amazon EMR跑Spark作业,读取数据时动态解析Schema。
- 查询结果可写入新表或导出,整个流程不修改原始数据。
关键验证点:在数据摄入后,立即通过Athena执行SELECT FROM raw_logs LIMIT 10,即使字段未定义,也可以成功返回数据,这就是“先存后定义”在操作层面的直接体现。
Q&A:数据湖先存储后定义结构常见疑问解答
Q1:数据湖与数据仓库能否共存,还是必须二选一?
可以共存,很多企业采用“湖仓一体”架构,数据湖存储原始数据,数据仓库从中抽取结构化数据供BI使用,数据湖保留原始细节,数仓提供高性能查询。
Q2:数据湖是否直接支持更新和删除操作?
传统对象存储不支持原地更新,但通过Iceberg、Delta Lake等数据湖格式,可以实现ACID事务、更新和删除,并保留历史版本,这些格式在查询时视为表,写入时自动处理增量文件。
Q3:数据湖的“先存后定义”会带来数据质量问题吗?
原始数据中的脏数据确实会被保留,但可以通过元数据标记、数据质量规则和治理工具(如Apache Atlas、Great Expectations)在后期清洗,数据湖不保证数据质量,但提供了治理的灵活性。