数仓分层设计

2022-11-13 13:15:09 浏览数 (1)

目录

一、分层目的

二、分层架构概览

三、详细分层设计

1.ODS (opreational data store)

2.DWD(data warehouse detail) 

3.DIM(dimension) 

4.DWS(data warehouse service) 

5.ADS(Application Data Service)


一、分层目的

数仓分层的目的是:逐层解耦,减少重复计算,降低烟囱式开发

越到底层,越接近业务发生的记录,越到顶层,越接近业务目标。

二、分层架构概览

三、详细分层设计

1.ODS (opreational data store)

  • 存放未经过处理的原始数据至数据仓库系统,结构上与源系统保持一致,是数据仓库的数据准备区。
  • 作用
    • ①保持数据原貌不做任何修改,起到备份数据的作用
    • ②数据采用压缩,减少磁盘存储空间
    • ③创建分区表,防止后续的全表扫描

2.DWD(data warehouse detail) 

DWD层是以业务过程为驱动,基于每个具体的业务过程特点,构建最细粒度的明细层事实表。

可以结合企业的数据使用特点,将明细事实表的某些重要维度属性字段做适当冗余,即宽表化处理。同时,为了提高数据明细层的易用性,该层会采用一些维度退化手法,将维度退化至事实表中,减少事实表和维表的关联,在该层也会做一部分的数据聚合,将相同主题的数据汇集到一张表中,提高数据的可用性。

维度建模一般按照以下5个步骤: 确定数据域→选择业务过程→声明粒度→确认维度→确定事实

(1).确定数据域(Domain)

数据域划分就是对数据分类。而基于不同的目的,有不同的分类标准。

设计时注意点:

1.不重不漏,确保每个表都在一个域里,且只在一个域里(精确定位) 2.每个域下都可以根据需要再分子域,不限定层级(最自由方便) 3.如果分子域就不能放表,表只放在最底层的域中(树状目录管理时更方便) 4.最好保证每个域下的子域数量或表数量在20个左右(太多了不方便记忆管理,太少了没必要划分) 5.不好划分的可归类为【其它】(减少域层级数量有理由理解记忆) 6.数据团队分域可以作为分工的标准(数据不重复、分工明确、界限清晰) 7.数据团队分域后,可以决定域内表的中间命名(看到表名时可以理解更多信息)

示例:

交易域

(2).选择业务过程

业务过程是一个不可拆分的行为事件

示例:

下单、支付、发货、确认收货 

(3).声明粒度

声明粒度意味着精确定义事实表中的一行数据表示什么,应该尽可能选择最小粒度,以此来应各种各样的需求。

示例:

订单当中的每个商品项作为下单事实表中的一行,粒度为每次。

(4).确定维度

维度就是看事情的角度,5W1H(when、where、who、what、why、how)

示例:

时间维度、地区维度、用户维度、商品维度

(5).确定事实

事实即业务中的度量值

示例:

订单金额、下单次数

dwd层主要做的事

1.统一标准

 字段格式命名统一,统一时间格式,单位统一

2.数据清洗

清洗掉脏数据,去除空值、过滤核心字段无意义的数据

3.维度退化

对业务数据传过来的表进行维度退化和降维。(商品一级二级三级、省市县、年月日)

3.DIM(dimension) 

基于维度建模理念思想,建立整个企业的一致性维度。降低数据计算口径和算法不统一风险。

示例:

1.维度退化(雪花型退化成星型)

地区表和省份表退化为地区维度表,商品表、品类表、spu表、商品三级分类、商品二级分类、商品一级分类表退化为商品维度表,活动信息表和活动规则表退化为活动维度表。

2.缓慢变化维

直接覆盖原值、新增维度列(旧列、新列)、新增维度行拉链(2个时间戳 开始时间 结束时间) 

4.DWS(data warehouse service) 

DWS层会在DWD层的数据基础上,对数据做横向的连接,纵向轻度的聚合操作,生成一系列的中间表,提升公共指标的复用性,减少重复加工。 

示例:

用户订单汇总表

用户id,商品id,当日订单数,当日退单数

5.ADS(Application Data Service)

存放数据产品个性化的统计指标数据。根据CDM与ODS层加工生成。

示例:

用户运营表

用户id,浏览次数,登陆次数,购买次数,退款次数,确认收货次数

0 人点赞