目录
一、分层目的
二、分层架构概览
三、详细分层设计
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,浏览次数,登陆次数,购买次数,退款次数,确认收货次数