建设过数仓的同学大概都能了解到,我们目前大部分情况下都是按照数仓进行的标准分层,也就是按照如下的几层分别建设的:
1、ODS层 2、DWD层 3、DWS层 4、DIM层 5、ADS层
基于上面几层的话,我们每一层是如何放数据的呢?
数仓分层
ODS层
ods层一般我们称为贴源层,也就是存储未经处理过的原始数据,这里的每一张表的数据和源系统都是保持一致的,所以我们经常把他称为数仓的数据准备区,这里保存的数据都是源系统的原始全量数据。
DWD层
这一层一般主要以业务过程为中心进行的建模驱动,也就是以每一个具体业务作为基础支撑点来提供细粒度的明细数据。一般这一层我们主要是直接把ods层的数据进行简单加工做宽表用,比如,ods层有一张用户表,同时也有一张用户的下单表。前端的业务需要一个接口展示用户和用户下单的明细信息,此时对于原始业务系统来说,我们会把这两张表直接进行join。但是在数仓里面我们在DWD层建设的时候,就是直接进行join,然后生成新的宽表,对外提供接口的时候就不会存在join的操作。此时既复用了之前的关联计算,同时也减少了数据扫描。采用MPP架构的存储引擎的话,可以让前端查询的更快。
DWS层
这一层主要是以分析的主题对象作为建模驱动。基于上层的应用和产品的指标需求,构建用于公共粒度的汇总指标事实表、此层面的数据产出主要是公共的一些统计指标。比如,我们现在是商城服务,那么此时我们对于订单的公共指标需求会有哪些呢?我们列举几个:
1、每日下单人数 2、每日下单支付人数 3、每日下单退款人数 4、每日物流发货数 5、每日物流揽收数 6、每周下单人数 7、每周下单支付人数 8、每周下单退款人数 9、每周物流发货数 10、每周物流揽收数 ....
所以从上面的需求我们可以看到DWS层主要是一些公共数据指标层,他也是一种宽表,但是他的产出主要是一些指标类的表,方便做一些具体业务层的指标需求。
DIM层
DIM层主要是基于维度建模的思想,建立整个企业的一致性维度。降低数据计算口径和算法不统一风险。这里的维度可能看起来比较模糊,咱们还是举个例就可以了:即DIM层一般存储是公共的枚举信息。
对于数据来源的各个系统,一般来说我们拿用户性别来说,从A系统采集的用户性别,他的枚举值是男/女/未知。从B系统采集的用户性别,他的枚举是1(男)/2(女)、3(未知)。此时的话用什么做标准呢?对于数仓来说我们希望这里所有的数据统一采用相同的维度。因此我们可能会在DIM层定用户的性别:1(男)/2(女)、3(未知)。那么除了ODS层,其他层的数据只要涉及到用户的性别,那么必须转换成:1(男)/2(女)、3(未知)。这就是DIM层的主要作用。他主要是统一所有数据的计算口径。保证相关的数据结果高度统一,不产生任何歧义。
所以综上所诉,dim层主要存储的就是枚举信息。
ADS层
ADS层就比较简单了,这是最终结果,也就是标准接口的直接访问层。他存储的信息主要是根据上层业务需求来决定的,同时是已经聚合好的数据。所以我们称为是应用服务层。他就像是数据库的单表,每一张表可以直接满足上层业务的某个需求,不需要再单独做任何的聚合操作,直接是上层业务的最终结果。
大家看了上面的数据分层,大致知道应该如何设计了吧?
还没有评论,来说两句吧...