数据仓库设计思想二(分层和原则)

一、数据仓库分层

阿里巴巴的数据团队把表数据模型分为三层 :操作数据层( ODS )、公共维度模型层( CDM)和应用数据层( DWS ), 其中公共维度模型层包括明细数据层( DWD )和汇总数据层( ADS )。现在自己接触到的公司基本都把自己数据仓库模仿阿里。构建四层数据结构 (ODS、DWD、DWS、ADS)或者增加一层简单清洗过滤层(主要是简单过滤清洗ODS层数据)。

1、各层作用
操作数据层( ODS ):把操作系统数据几乎无处理地存放在数据仓库系统中。
同步:结构化数据增量或全量同步到数据仓库中
结构化:非结构化(日志)结构化处理并存储到数据仓库中
累积历史、清洗:根据数据业务需求及稽核和审计要求保存历史数据、清洗数据。

公共维度模型层( CDM ):存放明细事实数据、维表数据及公共指标汇总数据 其中明细事实数据、维表数 一般根据 ODS 层数据加工生成 :公共指标汇总数据 般根据维表数据和明细事实数据加工生成。 CDM 层又细分为 DWD 层和 DWS 层,分别是明细数据层和汇总数据层,采用维度模型方法作为理论基础 更多地采用 些维度退化手法。
1、数据明细层:DWD:该层一般保持和ODS层一样的数据粒度,并提供一定的数据质量保证。同时为了提供数据明细层的易用性。该层会采用一些维度退化手法,经维度退化到事实表中,减少事实表和维度表的关联。(注意:很多公司会在建模过程中在dwd和dws中间加上一层dwm(数据中间层),该层会在层的基础上,对数据做轻度聚合操作,生成一系类的中间表。提升公共层指标的复用性,减少重复性加工。直观来讲,就是对通用的核心维度进行聚合操作,算出相应的统计指标。)
2、数据服务层:DWS:这一层又被称为数据集市或宽表。按照业务的划分,如流量、订单、用户等,胜出字段较多的宽表,用于提供后续的业务查询、OLAP分析,数据分发等。 (一般来说,该层的数据表会相对比较少,一张表会涵盖比较多的业务内容,由于字段较多。因此一般也会称该层的表为宽表)
**注意:**在实际计算中,如果直接从DWD或者ODS计算出宽表的统计指标,会存在计算量太大并且维度太少的问题,因此一般的做法是,在DWM层先计算出多个小的中间表,然后再拼接成一张DWS的宽表。由于宽和窄的界限不易界定,也可以去掉DWM这一层,只留DWS层,将所有的数据在放在DWS亦可。
应用数据层( ADS ):存放数据产品个性化的统计指标数据,根据CDM层和ODS层数据加工形成。(一般都要求比较快的响应速度,因此一般是放在 Mysql、PG、Redis中)
个性化指标加工:不共用性、复杂性(指数型、比值型、排名型指标)
基于应用的数据组装:大宽表集市、横表转纵表、趋势指标串。
在这里插入图片描述
下面列举了案例电商的数据仓库的模型架构图

在这里插入图片描述
下面我们可以举个例子方便理解:用日志log例子
1、由于业务场景的不同,用户的访问日志被分成了好几张表上报到了我们的ODS层。
2、为了方便大家的使用,我们在DWD层做了一张用户访问行为天表,在这里,我们将PC网页、H5、小程序和原生APP访问日志汇聚到一张表里面,统一字段名,提升数据质量,这样就有了一张可供大家方便使用的明细表了。
3、在DWM 层中,我们会从DWD层中选取业务关注核心维度来做聚合操作,比如只是保留人、商品、设备和页面区域维度,类似的我们这样做了很多个DWM的中间表。
4、然后在DWS层中,我们将一个人在整个网站中的行为数据放到一张表中,这就是我们的宽表了。有了这张表,就可以快速满足大部分的通用型业务需求了。
5、最后在ads(app)层应用层,根据需求从DWS层的一张或者多张表取出数据拼接成一张应用表即可.(不建议从其他层取数据但也会存在从 ods和cdm中同时取的情况)
在这里插入图片描述
注意:这个例子有时并不是合理业务的解决方案,最终还要依托于业务实际情况。

二、数据仓库应该遵守的原则

1、高内聚和低耦合
一个逻辑或者物理模型由哪些记录和字段组成,应该遵循最基本的软件设计方法论的高内聚和低耦合原则。主要从数据业务特性和访问特性两个角度来考虑,将业务相近或者相关、粒度相同的数据设计为 一个逻辑或者物理模型;将高概率同时访问的数据放在一起;将低概率同时访问的数据分开存储。

2、核心模型与扩展模型分离
建立核心模型与扩展模型体系,核心模型包括的宇段支持常用的核心业务,扩展模型包括的字段支持个性化或少量的应用的需求,不能让扩展模型的宇段过度侵人核心模型,以免破坏核心模型的架构简洁性与可维护性。

3、公共处理逻辑下沉及单一
越是底层公用的处理逻辑越应该在数据调度依赖的底层进行封装与实现。不要让公用的处理逻辑暴露给应用层实现,不要让公共逻辑多处同时存在。

4、成本与性能的平衡
适当的数据冗余可换取查询和刷新性能,不宜过度冗余与数据复制。

5、数据可回滚
处理逻辑不变,在不同时间多次运行数据结果确定不变。

6、一致性
具有相同含义的字段在不同表中命名必须相同,必须使用规范定义的名称

7、命名清洗、可理解
表命名需清晰、一致,表名需易于消费者理解和使用。

注意:数据仓库遵守规范借鉴阿里数仓建设规范,如有版权问题请联系删除