(1)数仓模型如何分层
企业常用的数据模型分为三层:
操作数据层(ODS)
公共维度模型层(CDM)
数据应用层(ADS)
其中公共维度模型层包括:
明细数据层(DWD)
汇总数据层(DWS)
操作数据层(ODS) :把操作系统数据几乎无处理地存放在数据仓库系统中。
同步:结构化数据增量或全量同步数仓
结构化 :非结构化(日志)结构化处理并存储到数仓
累积历史、清洗:根据数据业务需求及稽核和审计要求保存历数据、清洗数据
公共维度模型层(CDM) :存放明细事实数据、维表数据及公共指标汇总数据
其中明细事实数据、维表数据一般根据ODS层数据加工生成;
公共指标汇总数据一般根据维表数据和明细事实数据加工生成。
CDM层又细分为:
DWD层:明细数据层
DWS层:汇总数据层
采用维度模型方法作为理论基础,更多地采用一些维度退化手法,将维度退化至事实表中,减少事实表和维表的关联,提高明细数据表的易用性;同时在汇总数据层,加强指标的维度退化,采取更多的宽表化手段构建公共指标数据层,提升公共指标的复用性,减少重复加工。
其主要功能如下:
组合相关和相似数据:采用明细宽表,复用关联计算,减少数据扫描
公共指标统一加工 :基于One Data体系构建命名规范、口径一致和算法统一的统计指标,为上层数据产品、应用和服务提供公共指标;建立逻辑汇总宽表。
建立一致性维度:建立一致的数据分析维表,降低数据计算口径算法不统一 的风险。
(2)企业数仓模型分层架构
(3)维度设计如何理解
维度是维度建模的基础和灵魂。在维度建模中,将度量称为“事实”将环境描述为“维度”,维度是用于分析事实所需要的多样环境。 例如,在分析交易过程时,可以通过买家、卖家、商品和时间等维度描述交易发生的环境。
维度所包含的表示维度的列,称为维度属性。维度属性是查询约束条件、分组和报表标签生成的基本来源,是数据易用性的关键。
例如,在查询请求中,获取某类目的商品、正常状态的商品等,是通过约束商品类目属性和商品状态属性来实现的;统计不同商品类目的每日成交金额,是通过商品维度的类目属性进行分组的;
我们在报表中看到的类目都是维度属性。所以维度的作用一般是查询约束、分类汇总以及排序等。
如何获取维度或维度属性
报表中获取
和业务人员的交谈中发现维度或维度属性
因为它们经常出现在查询或报表请求中的“按照”(group by)语句内。 例如,用户要“按照”月份和产品来查看销售情况,那么用来描述其业务的自然方法应该作为维度或维度属性包括在维度模型中。
维度的基本设计方法
维度的设计过程就是确定维度属性的过程,如何生成维度属性,以及所生成的维度属性的优劣,决定了维度使用的方便性,成为数据仓库易用性的关键。正如Kimball所说的,数据仓库的能力直接与维度属性的质量和深度成正比。
第一步:选择维度或新建维度。作为维度建模的核心,在企业级数据仓库中必须保证维度的唯一性, 只允许有个维度定义。
第二步:确定主维表。此处的主维表一般是ODS表,直接与业务系统同步。
第三步:确定相关维表。数据仓库是业务源系统的数据整合,不同业务系统或者同一业务系统中的表之间存在关联性。根据对业务的梳理,确定哪些表和主维表存在关联关系,并选择其中的某些表用于生成维度属性。以商品维度为例,根据对业务逻辑的梳理,可以得到商品与类目、卖家、店铺等维度存在关联关系。
第四步:确定维度属性。本步骤主要包括两个阶段,其中第一个阶段是从主维表中选择维度属性或生成新的维度属性;第二个阶段是从相关维表中选择维度属性或生成新的维度属性
确定维度属性的几点提示
尽可能多地给出包括一些富有意义的文字性描述
属性不应该是编码,而应该是真正的文字,一 般是编码和文字同时存在,比如商品维度中的商品ID和商品标题类目ID和类目名称等。ID一般用于不同表之间的关联,而名称一般用于报表标签。
区分数值型属性和事实
数值型字段是作为事实还是维度属性,可以参考字段的一般用途。如果通常用于查询约束条件或分组统计,则是作为维度属性;如果通常用于参与度量的计算,则是作为事实。比如商品价格,可以用于查询约束条件或统计价格区间的商品数量,此时是作为维度属性使用的;也可以用于统计某类目下商品的平均价格,此时是作为事实使用的。另外,如果数值型字段是离散值,则作为维度属性存在的可能性较大;如果数值型字段是连续值,则作为度量存在的可能性较大,但并不绝对,需要同时参考字段的具体用途。
尽量沉淀出通用的维度属性
有些维度属性获取需要进行比较复杂的逻辑处理,有些需要通过多表关联得到,或者通过单表的不同字段混合处理得到,或者通过对单表的某个字段进行解析得到。此时,需要将尽可能多的通用的维度属性进行沉淀
(4)维表是怎么生成的
维度的层次结构
规范化与反规范化
对于商品维度,采用雪花模式进行规范化处理,如果将维度的属性层次合并到单个维度中的操作称为反规范化。分析系统的主要目的是用于数据分析好统计,如何更方便用户进行统计分析决定了分析系统的优劣。采用雪花模式,用户在统计分析的过程中需要大量的关联操作,使用复杂度高,同时查询性能很差;而采用反规范化处理,则方便、易用性能好。
(5)维度整合的两种策略
第一种是垂直整合,即不同的来源表包含相同的数据集,只是存储的信息不同。
第二种是水平整合,即不同的来源表包含不同的数据集。
(6)维度拆分的最佳方案
水平拆分
维度通常可以按照类别或类型进行细分。比如淘系商品表,根据业务线或行业等可以对商品进行细分,如淘宝的商品、天猫的商品、1688的商品、飞猪旅行的商品、 淘宝海外的商品、天猫国际的商品等。不同分类的商品,其维度属性可能相同,也可能不同。比如航旅的商品和普通的淘系商品,都属于商品,都有商品价格、标题、类型、上架时间类目等维度属性,但是航旅的商品除了有这些公共属性外,还有酒店景点、门票、旅行等自已独特的维度属性。
主要有两种解决方案
方案一:是将维度的不同分类实例化为不同的维度,同时在主维度中保存公共属性
当维度属性随类型两个依据变化较大时,将所有可能的属性建立在一个表中是不切合实际的,也没有必要这样做,此时建议采用此方案。定义一个主维度用于存放公共属性;同时定义多个子维度,其中除了包含公共属性外,还包含各自的特殊属性。公共属性一般比较稳定,通过核心的商品维度,保证了核心维度的稳定性;通过扩展子维度的方式,保证了模型的扩展性。
方案二:是维护单一维度,包含所有可能的属性
通常来说推荐方案二。
垂直拆分
在进行维度设计时,依据维度设计的原则,尽可能丰富维度属性,同时进行反规范化处理。对于具体实现时可能存在的问题,一是在“水平拆分”中提到的,由于维度分类的不同而存在特殊的维度属性,可以通过水平拆分的方式解决此问题。二是某些维度属性的来源表产出时间较早,而某些维度属性的来源表产出时间较晚;或者某些维度属性的热度高、使用频繁,而某些维度属性的浓度低、较少使用;或者某些维度属性经常变化,而某些维度属性比较稳定。在“水平拆分”中提到的模型设计的三个原则同样适合解决此问题。出于扩展性、产出时间、易用性等方面的考虑,设计主从维度。主维表存放稳定、产出时间早、热度高的属性;从维表存放变化较快、产出时间晚、热度低的属性。