最近公司在重建数仓,主要参考了阿里巴巴的数仓建设理论;主要有一下几个方面:
数据分层
在阿里巴巴的数据体系中,建议将数据仓库分为三层,自下而上分别为:ods(数据引入层 operation data store)、cdm(数据公共层 common data model)、ads(数据应用层 application data server)。
-
ods层:存放未经过处理的原始数据至数据仓库系统,结构上与源系统保持一致,是数据仓库的数据准备区。
-
cdm层:主要完成数据加工与整合,建立一致性的维度,构建可复用的面向分析和统计的明细事实表,以及汇总公共粒度的指标。
- dwd层:明细粒度事实层。 以业务过程作为建模驱动,基于每个具体的业务过程特点,构建最细粒度的明细层事实表。可以结合企业的数据使用特点,将明细事实表的某些重要维度属性字段做适当冗余,即宽表化处理。明细粒度事实层的表通常也被称为逻辑事实表。
- dws层:公共汇总粒度事实层。以分析的主题对象作为建模驱动,基于上层的应用和产品的指标需求,构建公共粒度的汇总指标事实表,以宽表化手段物理化模型。构建命名规范、口径一致的统计指标,为上层提供公共指标,建立汇总宽表、明细事实表。
- dim层:公共维度层,基于维度建模理念思想,建立整个企业的一致性维度。降低数据计算口径和算法不统一风险。公共维度层的表通常也被称为逻辑维度表,维度和维度逻辑表通常一一对应。
-
ads:数据应用层。存放数据产品个性化的统计指标数据。
思考:我这里一直有一个疑问就是,什么是维度建模、什么又是主题建模?他们之间有什么样的关系?
先观察下面图的结构:
维度建模(dim层)
首先是维度建模,它是发生在dim层的,也就是公共维度层。在维度建模中,将度量称为“事实”(就是原子指标,某一业务事件行为下的度量,是业务过程中不可在拆分的指标,具有明确业务含义的名称;如:支付金额、电视的一次广告请求),将环境描述为“维度”。维度:是用于分析事实所需要的多样环境。列如:在分析交易过程时,可以通过买家、卖家、商品和时间等维度描述交易发生的环境。
维度所包含的表示维度的列,称为维度属性。列如:商品维度下有商品id、商品名称、商品所属类目等维度属性。
所以维度建模是要从业务过程提取出描述它的环境,并找到它的属性(维度属性),建立公用的一致性的维度。在进行维度设计时,依据维度设计的原则,尽可能丰富维度属性。
设计维表的主要步骤:
- 完成维度的初步定义,并保证维度的一致性。
- 确定主维表(中心事实表,采用星型模型)。此处的主维表通常是数据引入层(ODS)表,直接与业务系统同步。例如,s_auction是与前台商品中心系统同步的商品表,此表即是主维表。
- 确定相关维表。数据仓库是业务源系统的数据整合,不同业务系统或者同一业务系统中的表之间存在关联性。根据对业务的梳理,确定哪些表和主维表存在关联关系,并选择其中的某些表用于生成维度属性。以商品维度为例,可以得到商品与类目、卖家、店铺等维度存在关联关系。以计划单维度为例,与地区、素材等存在光联。
- 确定维度属性,主要包括两个阶段。第一个阶段是从主维表中选择维度属性或生成新的维度属性;第二个阶段是从相关维表中选择维度属性或生成新的维度属性。以商品维度为例,从主维表(s_auction)和类目 、卖家、店铺等相关维表中选择维度属性或生成新的维度属性。计划单也是一样。
- 尽可能生成丰富的维度属性。
- 尽可能多地给出富有意义的文字性描述。
- 区分数值型属性和事实。
- 尽量沉淀出通用的维度属性。
在我们电视广告业务的表中,像这样的维表并不多(只有计划单维表-整合了素材、订单、计划单等信息的宽表,应为这种表比较少,所以直接放在了dwd层,形成一个计划单的宽表),本来还可以抽离出像地域信息、设备信息这样的维度表,但是ods层的数据已经携带了这些信息。相当于已经做成了一张宽表,所以维表比较少。
主题建模
然后是主题建模,面向分析主题建模,主题(Subject)是在较高层次上将企业信息系统中的数据进行综合、归类和分析利用的一个抽象概念,每一个主题基本对应一个宏观的分析领域。
如何划分主题: 在业务调研之后,可以进行主题域的划分。划分主题域,需要分析各个业务模块中有哪些业务活动。通常我们按照以下方法划分主题域,可以按照用户企业的部门划分,也可以按照业务过程或者业务板块中的功能模块划分。
- 按照系统划分:业务系统有几种,就划分几种。
- 按照业务过程划分:比如业务系统中有商品、交易、物流等
- 按照部分划分:比如公司内的生产、供应链、研发、销售等
推荐:通过业务系统来进行一级主题域划分,这样边界就会很明显,数据仓库开发过程中不会因为模型主题的归属“扯皮”,然后根据各个系统中的业务过程划分二级主题域。
例如:广告业务系统作为一级主题域,设备、库存、曝光作为二级主题域。