数据仓库建设核心:我们为什么坚持分层与建模
·
在数据仓库中,通常分为ODS -> DWD -> DWS -> (DWM) -> ADS这几层;接下来介绍每层的定义:
第一层:ODS(Operational Data Store)操作数据层
数据特点:
-
基本保持数据原貌,结构与业务系统基本一致。
-
通常仅做简单的清洗(如删除明显异常数据)和字段标准化(如字符集统一)。
-
支持增量或全量同步
第二层:DWD(Data Warehouse Detail)数据仓库明细层
-
数据处理:
-
数据清洗: 处理空值、无效值、异常值,解析复杂字段(如JSON)。
-
数据整合: 关联维表,退化维度(将常用维度属性冗余到事实表),将多个ODS表按主题整合成宽表。
-
模型建设: 这是维度建模的核心地带。构建事实表(交易、日志等业务过程)和维度表(用户、商品、时间等描述信息)。
-
统一格式化: 对枚举值进行统一(如将“男”、“M”统一为“1”)
-
第三层:DWS(Data Warehouse Summary)数据仓库汇总层
-
数据处理:
-
以主题域为引导(如用户、商品、渠道),对DWD的明细数据进行轻度或重度汇总。
-
生成以某个维度为中心的宽表,如用户一日宽表(包含当日登录次数、下单金额、浏览时长等)、商品周汇总表。
-
目的是提升查询性能,避免在ADS层进行大量的
GROUP BY操作。
-
(可选)第四层:DWM(Data Warehouse Middle)数据仓库中间层
-
数据处理:
-
基于DWD层进行非常轻度的汇总,例如按天-用户-产品计算订单数。
-
目的是为了复用。多个DWS表可以基于同一张DWM表进行加工,避免直接从海量的DWD明细数据中聚合。
-
最终层:ADS(Application Data Service)应用数据层
-
核心职责: 面向应用,满足个性化需求
-
形象比喻: 数据的“品牌直营店”或“定制展厅”。
-
数据来源: DWS/DWM层,极少数情况下会跨层引用DWD。
-
数据处理:
-
完全为前端具体应用服务,如报表、BI分析、数据接口、推荐系统等。
-
结构非常灵活,可能是一张宽表,也可能是一个复杂查询的结果集。
-
这里可能会为了业务易用性,牺牲部分范式规范
-
分层的目的:
- 高内聚和低耦合:主要从数据业务特性和访问特性两个角度来考虑:将业务相近或者相关的数据、粒度相同数据设计为一个逻辑或者物理模型;将高概率同时访问的数据放一起,将低概率同时访问的数据分开存储。
- 核心模型与扩展模型分离:建立核心模型与扩展模型体系,核心模型包括的字段支持常用核心的业务,扩展模型包括的字段支持个性化或是少量应用的需要,必要时让核心模型与扩展模型做关联,不能让扩展字段过度侵入核心模型,破坏了核心模型的架构简洁性与可维护性。
- 公共处理逻辑下沉及单一:越是底层公用的处理逻辑更应该在数据调度依赖的底层进行封装与实现,不要让公共的处理逻辑暴露给应用层实现,不要让公共逻辑在多处同时存在。
- 成本与性能平衡:适当的数据冗余换取查询和刷新性能,不宜过度冗余与数据复制。
- 数据可回滚:处理逻辑不变,在不同时间多次运行数据结果确定不变。
- 一致性:相同的字段在不同表字段名相同。
- 命名清晰可理解:表命名规范需清晰、一致,表名需易于下游理解和使用。
更多推荐
所有评论(0)