数据湖不同于传统数据仓库,它以原始格式存储海量结构化、半结构化和非结构化数据。测试数据湖需要覆盖 Schema 演化、ACID 事务、时间旅行、分区策略等独特能力,同时确保数据在批量与实时写入场景下的一致性。
| 维度 | 传统数仓 | 数据湖 |
|---|---|---|
| Schema | Write Schema(先定义后写入) | Schema on Read + Schema 演化 |
| 数据格式 | 结构化表 | Parquet/ORC/Avro + JSON/CSV/图片 |
| 更新方式 | INSERT/UPDATE/DELETE | Upsert/Merge + 时间旅行回滚 |
| 一致性 | 事务保证 | ACID 事务(依赖表格式) |
| 规模 | TB 级 | PB 级 |
| 特性 | Delta Lake | Apache Iceberg | Apache Hudi |
|---|---|---|---|
| ACID 事务 | ✅ 乐观并发控制 | ✅ Snapshot Isolation | ✅ 多版本并发控制 |
| 时间旅行 | ✅ 版本号/时间戳 | ✅ Snapshot ID/时间戳 | ✅ 提交时间 |
| Schema 演化 | ✅ 自动合并 | ✅ 完整的 DDL 支持 | ✅ Schema 版本控制 |
| 分区演进 | ⚠️ 需重写 | ✅ 隐藏分区+演进 | ✅ 支持分区变更 |
| 生态集成 | Spark 深度集成 | 多引擎(Spark/Flink/Trino) | Spark/Flink/Hive |
| 测试重点 | Z-Order 优化验证 | 分区演进后查询正确性 | 索引(Bloom/HFile)有效性 |
delta-rs、pyiceberg 等本地库编写纯 Python 测试