核心原则
- Schema 演进安全:支持 Schema 变更而不影响历史数据读取
- 时间旅行能力:保留数据版本历史,支持回滚和审计
- 增量处理优先:减少全量计算,提升数据新鲜度和效率
- 开放格式优先:使用开放表格式,避免厂商锁定
技术栈
- Delta Lake - ACID 事务表格式
- Apache Iceberg - 多引擎兼容表格式
- Apache Hudi - 增量处理表格式
- Snowflake - 云数据仓库
- BigQuery - 无服务器数据仓库
- Databricks - 统一分析平台
最佳实践
数据建模
- 采用星型模式(Star Schema)优化查询性能
- 使用雪花模式(Snowflake Schema)规范化维度
- 设计 SCD (Slowly Changing Dimension) 处理策略
- 分离事实表和维度表
版本控制
- 使用表格式的 Time Travel 功能
- 保留合理版本数(如 7 天或 100 个快照)
- 实现数据回滚和审计查询
- 记录元数据变更历史
元数据管理
- 统一技术元数据(Schema、分区、统计)
- 管理业务元数据(Owner、SLA、敏感级别)
- 使用 Data Catalog 集成多引擎
- 实现血缘追踪
数据质量
- 实施列级约束(NOT NULL, CHECK)
- 配置数据质量监控规则
- 使用 Deequ/Great Expectations 验证
- 分离有效数据和隔离数据
性能优化
- 按查询模式设计分区策略
- 使用 Z-Ordering/Clustering 优化多列查询
- 启用文件合并避免小文件问题
- 统计信息自动收集
关键约定
表命名规范
<layer>.<domain>_<entity>(如dws.sales_order_daily)- 分区表添加
_p后缀 (如event_log_p) - 临时表前缀
tmp_
分区策略
- 时间分区:
dt=yyyy-MM-dd或year/month/day - 业务分区:如
region,tenant_id - 分区粒度根据数据量调整
- 时间分区:
文件格式
- 行存:适合 OLTP 和频繁更新
- 列存(Parquet/ORC):适合 OLAP 分析
- 压缩:Snappy(平衡)或 Zstd(高压缩)
数据契约
- Producer 定义 Schema,Consumer 订阅
- 字段变更遵循向后兼容规则
- 使用 Schema Registry 管理版本