数据仓库应用中,宽表模型以结构简单,模型容易理解,数据访问效率等优势,被业界广泛采用。所谓宽表就是,基于某个实体分析对象而建立的一个逻辑数据体系,由实体的维度、描述信息、以及基于这个实体一系列度量组成。它是一个逻辑的概念,在物理实现中不可能就针对一个实体对象建立一个大宽表。因为这样,对于,刷新效率,容错能力,扩展能力都是一个很大的挑战,如何设计和组织宽表的体系结构呢?
其实,我们回到软件设计的基本思想-高内聚,低耦合。我们要从在业务、ETL刷新、指标属性、数据来源等角度,让高度内聚的属性、描述、度量放在一个表中。基本可以从两个维度矩阵进行切割:
第一:按实体属性可能涉及的业务范围进行划分
第二:按业务指标的历史周期属性进行划分,在历史周期上我们可以分为以下几类:
- 当前用户的基本属性和维度,数据相对静态,修改较少。统计的集合包括所有实体对象。
- 用户在统计日发生的行为度量指标。这类数据可以根据行为的增量数据就是,统计集合仅仅是当前统计日发生过行为的实体对象。
- 用户在最近一个周期内的度量指标累计,它由统计日发生的行为度量指标在历史上聚合而成。可以根据业务需要可以就是自然月,自然周。或是最近周、最近月移动聚合数据。它统计的集合是最近一段时间内发生过行为的实体对象。
- 根据用户历史行为而衍生出的度量维度以及用户当前存量类指标(比如余额,总的产品数,当前总的帐户数)比如第一行为的时间,最后一次行为的时间,统计的集合包括所有发生过一次行为的实体对象。