一、数仓建模
1、为什么要做数仓分层
分层是站在数仓全集的视角,对于一系列的计算过程抽象出通用的职责,规定每一层只做某些职责,每一层有自己独特的命名,并且不同层之间有明确的前后关系。
-
持久化可以用空间换时间,节省计算资源。通过分层的数据预处理,能够更快满足应用的取数效率;增加了复用性,进而带来一致性的提升和开发效率的提升。
-
分层处理数据,隔离变化,降低维护成本,从合作层面可以统一建设思路。基础层只做数据整合清洗,高级层关注业务规则,应用层面向数据应用,一个复杂工作拆分成多个层级关系清晰的简单任务,每一层的任务逻辑都相对简单且容易理解,当数据变动时,因为层与层分离,只需变动一小块。如果不分层,业务规则变动时,工作将十分麻烦,影响巨大,不宜处理。
-
良好的数据流向,血缘清洗,为之后面向仓库的管理优化提供便利。
每一层的作用:
数仓层次 |
说明 |
作用 |
---|---|---|
ods层 (源数据接入层) |
存储数据仓库的源接入数据,分为两类:
ods作为数据缓冲层,是源系统的备份,粒度与源系统保持一致,一般实时或者类实时加载数据。ods层一般提供操作型报表(不推荐),此类报表应该是只关注当前数据,不关注历史的。除开发使用,排查case使用,ods层不允许用户直接访问进行数据分析。 |
1)制定ods存储规则,(增量/全量/快照); |
dw基础明细层 |
存储数据仓库的最底层明细数据,不面向分析,该层数据与ods源数据粒度相同,是对ods做过过滤、清洗、转化后统一的规整的数据存储,将分库分表的数据或者多业务线的数据做行级别的数据集合。 |
1)清洗ods数据,如ods中存在的一些软删除数据; |
dw基础汇总层 |
该层存储对明细数据的维度汇总数据,这里的维度包括(日期维度,业务维度等),通过明细层聚合,基于明细层的一些指标基本在这一层定型(如pv,计费单位等),形成汇总层数据。 通常用维度建模构建星型模型、雪花模型、星座模型。 |
采用维度建模,事实表中需要包含主要分析维度的主键(包含较少的维度属性值),事实的是完全可加的事实,对于复合指标如比率,乘积,分子分母需要分开存储。 注:不同粒度的事实存储不同的事实表中。 |
dm主题层 |
主题层表加入业务逻辑,直观反应业务问题建模的多维聚合的宽表。 1) 采取反范式设计,为方便使用以宽表的形式提供 |