一、数仓分层
为什么要分层
清晰数据架构 血缘跟踪 减少重复开发 复杂问题简单化 屏蔽业务的影响(易迁移)
- 清晰数据结构:每一个数据分层都有它的作用域,这样我们在使用表的时候能更方便地定位和理解。
- 数据血缘追踪:简单来讲可以这样理解,我们最终给业务诚信的是一能直接使用的张业务表,但是它的来源有很多,如果有一张来源表出问题了,我们希望能够快速准确地定位到问题,并清楚它的危害范围。
- 减少重复开发:规范数据分层,开发一些通用的中间层数据,能够减少极大的重复计算。
- 把复杂问题简单化。讲一个复杂的任务分解成多个步骤来完成,每一层只处理单一的步骤,比较简单和容易理解。而且便于维护数据的准确性,当数据出现问题之后,可以不用修复所有的数据,只需要从有问题的步骤开始修复。
- 屏蔽业务的影响,不必改一次业务就需要重新接入数据
将数据仓库分为三层,自下而上为:数据引入层(ODS,Operation Data Store)、数据公共层(CDM, Common Data Model)和数据应用层(ADS,Application Data Service)
ODS (数据引入层,Operation Data Store)
存放从业务系统获取的最原始的数据
存储方式:全量(全量快照),增量,拉链,日志流水,缓慢渐变维
CDM(数据公共层,Common Data Model)
-
dim:公共维度层。
统一口径,采用宽表设计的原则
确定维度属性,主要包括两个阶段。第一个阶段是从主维表中选择维度属性或生成新的维度属性;第二个阶段是从相关维表中选择维度属性或生成新的维度属性。以商品维度为例,从主维表(商品信息表)和类目 、卖家、店铺等相关维表中选择维度属性或生成新的维度属性。 -
dwd:明细粒度事实层。以业务过程作为建模驱动
明细事实表的设计可以分为五个步骤:
● 选择业务过程,如淘宝电商业务过程有创建订单、买家付款、卖家发货、买家确认收货
● 声明粒度
● 确定维度,完成粒度声明以后,也就意味着确定了主键,对应的维度组合以及相关的维度字段就可以确定了
● 确定事实,即度量,分为可加性,半可加性,不可加性
● 冗余维度,即维度退化(维度属性可以存储到事实表中) -
dws:公共汇总粒度事实层。
以分析的主题对象作为建模驱动,基于上层的应用和产品的指标需求构建公共粒度的汇总指标事实表
ADS(数据应用层,Application Data Service)
存放数据产品个性化的统计指标数据
ps 数据仓库模型设计除横向的分层外,通常也需要根据业务情况进行纵向划分数据域。数据域是联系较为紧密的数据主题的集合
二、事实表分类
事实表分为事务事实表,周期快照事实表,累积快照事实表
事务事实表
分为单事务事实表,多事务事实表
多事务事实表在设计时有两种方法进行事实的处理
- 不同业务过程的事实使用不同的事实字段进行存放,如同时有下单时间,支付时间,完成时间
- 不同业务过程的事实使用同一个事实字段进行存放,但增加一个业务过程标签,如收藏还是取消收藏
周期快照事实表
快照事实表以预定的间隔采样状态度量
-
单维度的每天快照事实表,采样周期为每天,针对卖家、买家、商品、类目 、地 区等维度的快照事实表 ,比如淘宝卖家历史至今汇总事实表、淘宝商品自然月至今汇总事实
-
混合维度相对于单维度,只是在每天的采样周期上针对 个维度进行采样。比如淘宝买卖家历史至今快照事实 ,采样周期依然是每天,维度是卖家加买家,反映的是不同 家对于不同卖家的下单支付金额
累积快照事实表
特点:1数据不断更新,2多个业务过程日期,用于计算业务过程之间的时间间隔
三、 主题
主题:较高层次的抽象,每个主题对应一个宏观分析领域。同时一定程度上也是为了把数据仓库这么一个大的工程做横向拆分。主题一般在dws层划分。
主题在信息图包只占据标题位置,当主题定义好后,需要增加属性组
典型的主题包括顾客,订单,产品,财务。
公司管理层需要的主题:仓库,商品,供应商,客户
银行十大主题:当事人、产品、协议、事件、资产、财务、机构、地域、营销、渠道
美旅数仓划分为客服、流量、运营、订单、门店、产品、参与人、风控、结算和公用等十大主题
传统行业如银行、制造业、电信、零售等行业中,都有比较成熟的主题划分,如BDWM、FS-LDM、MLDM 等等。但从实际调研情况来看,主题划分太抽象会造成对业务理解和开发成本较高,不适用互联网行业。因此,结合各层的特性,我们提出了两类主题的划分:面向业务、面向分析。如销售分析域,组织分析域。
四、 总线矩阵
在Kimball的维度建模的数据仓库中,关于多维体系结构(MD)有三个关键性概念:总线架构(Bus Architecture),一致性维度(Conformed Dimension)和一致性事实(Conformed Fact)
总线矩阵:实际设计过程中,我们通常把总线架构列表成矩阵的形式,其中列为一致性维度,行为不同的业务处理过程,即事实,在交叉点上打上标记表示该业务处理过程与该维度相关。这个矩阵也称为总线矩阵(Bus Matrix)。
在同一个集市内,一致性维度的意思是两个维度如果有关系,要么就是完全一样的,要么就是一个维度在数学意义上是另一个维度的子集