Kimball维度建模

2年前 (2022) 程序员胖胖胖虎阿
159 0 0

维度模型是数据仓库领域大师Ralph Kimball 所倡导,以分析决策的需求出发构建模型,构建的数据模型为分析需求服务,所以它重点解决用户如何更快速完成分析需求,同时还有较好的大规模复杂查询的响应性能。性能

维度建模是 数据仓库/商业智能 项目成功的关键,为何这么说,由于无论咱们的数据量从GB到TG仍是到PB,虽然数据量愈来愈大,可是数据展示要得到成功,就必须创建在简单性的基础之上,而维度建模就是时刻考虑如何可以提供简单性,以业务为驱动,以用户理解性和查询性能为目标。学习

维度建模:维度建模是专门应用于分析型数据库、数据仓库、数据市集建模的方法。数据市集能够理解为一种“小型的数据仓库”
维度建模指导咱们在数据仓库中如何建表大数据

维度建模分为两种表:事实表和维度表设计

  1. 事实表:必然存在的一些数据,像采集的日志文件,订单表,均可以做为事实表
    特征:是一堆主键的集合,每一个主键对应维度表中的一条记录,客观存在的,根据主题肯定出须要使用的数据
  2. 维度表:维度就是所分析的数据的一个量,维度表就是以合适的角度来建立的表,分析问题的一个角度:时间、地域、终端、用户等角度

维度建模的三种模式

1. 星形模式:以事实表为中心,全部的维度表直接连在事实表上,最简单最经常使用的一种

星形模式

 

2. 雪花模式:雪花模式的维度表能够拥有其余的维度表,这种表不易维护,通常不推荐使用

雪花模式

 

3.星座模型:基于多张事实表,并且共享维度信息,即事实表之间能够共享某些维度表

星座模型

 

维度建模怎么建

咱们知道事实表,维度表,星形模型,星座模型这些概念了,可是实际业务中,给了咱们一堆数据,咱们怎么拿这些数据进行数仓建设呢,数仓工具箱做者根据自身60多年的实际业务经验,给咱们总结了以下四步,请务必记住!

数仓工具箱中的维度建模四步走:

维度建模四步走

牢记以上四步,无论什么业务,就按照这个步骤来,顺序不要搞乱,由于这四步是环环相扣,步步相连。下面详细拆解下每一个步骤怎么作

一、选择业务过程
维度建模是紧贴业务的,因此必须以业务为根基进行建模,那么选择业务过程,顾名思义就是在整个业务流程中选取咱们须要建模的业务,根据运营提供的需求及往后的易扩展性等进行选择业务。好比商城,整个商城流程分为商家端,用户端,平台端,运营需求是总订单量,订单人数,及用户的购买状况等,咱们选择业务过程就选择用户端的数据,商家及平台端暂不考虑。业务选择很是重要,由于后面全部的步骤都是基于此业务数据展开的。

二、声明粒度
先举个例子:对于用户来讲,一个用户有一个身份证号,一个户籍地址,多个手机号,多张银行卡,那么与用户粒度相同的粒度属性有身份证粒度,户籍地址粒度,比用户粒度更细的粒度有手机号粒度,银行卡粒度,存在一对一的关系就是相同粒度。为何要提相同粒度呢,由于维度建模中要求咱们,在同一事实表中,必须具备相同的粒度,同一事实表中不要混用多种不一样的粒度,不一样的粒度数据创建不一样的事实表。而且从给定的业务过程获取数据时,强烈建议从关注原子粒度开始设计,也就是从最细粒度开始,由于原子粒度可以承受没法预期的用户查询。可是上卷汇总粒度对查询性能的提高很重要的,因此对于有明确需求的数据,咱们创建针对需求的上卷汇总粒度,对需求不明朗的数据咱们创建原子粒度。

三、确认维度
维度表是做为业务分析的入口和描述性标识,因此也被称为数据仓库的“灵魂”。在一堆的数据中怎么确认哪些是维度属性呢,若是该列是对具体值的描述,是一个文本或常量,某一约束和行标识的参与者,此时该属性每每是维度属性,数仓工具箱中告诉咱们紧紧掌握事实表的粒度,就能将全部可能存在的维度区分开,而且要确保维度表中不能出现重复数据,应使维度主键惟一

四、确认事实
事实表是用来度量的,基本上都以数量值表示,事实表中的每行对应一个度量,每行中的数据是一个特定级别的细节数据,称为粒度。维度建模的核心原则之一是同一事实表中的全部度量必须具备相同的粒度。这样能确保不会出现重复计算度量的问题。有时候每每不能肯定该列数据是事实属性仍是维度属性。记住最实用的事实就是数值类型和可加类事实。因此能够经过分析该列是不是一种包含多个值并做为计算的参与者的度量,这种状况下该列每每是事实。

事实表种类

事实表分为如下6类:

  1. 事务事实表
  2. 周期快照事实表
  3. 累积快照事实表
  4. 无事实的事实表
  5. 汇集事实表
  6. 合并事实表

简单解释下每种表的概念:

  • 事务事实表

表中的一行对应空间或时间上某点的度量事件。就是一行数据中必须有度量字段,什么是度量,就是指标,好比说销售金额,销售数量等这些可加的或者半可加就是度量值。另外一点就是事务事实表都包含一个与维度表关联的外键。而且度量值必须和事务粒度保持一致。

  • 周期快照事实表

顾名思义,周期事实表就是每行都带有时间值字段,表明周期,一般时间值都是标准周期,如某一天,某周,某月等。粒度是周期,而不是个体的事务,也就是说一个周期快照事实表中数据能够是多个事实,可是它们都属于某个周期内。

  • 累计快照事实表

周期快照事实表是单个周期内数据,而累计快照事实表是由多个周期数据组成,每行汇总了过程开始到结束之间的度量。每行数据至关于管道或工做流,有事件的起点,过程,终点,而且每一个关键步骤都包含日期字段。如订单数据,累计快照事实表的一行就是一个订单,当订单产生时插入一行,当订单发生变化时,这行就被修改。

  • 无事实的事实表

咱们以上讨论的事实表度量都是数字化的,固然实际应用中绝大多数都是数字化的度量,可是也可能会有少许的没有数字化的值可是还颇有价值的字段,无事实的事实表就是为这种数据准备的,利用这种事实表能够分析发生了什么。

  • 汇集事实表

汇集,就是对原子粒度的数据进行简单的聚合操做,目的就是为了提升查询性能。如咱们需求是查询全国全部门店的总销售额,咱们原子粒度的事实表中每行是每一个分店每一个商品的销售额,汇集事实表就能够先聚合每一个分店的总销售额,这样汇总全部门店的销售额时计算的数据量就会小不少。

  • 合并事实表

这种事实表遵循一个原则,就是相同粒度,数据能够来自多个过程,可是只要它们属于相同粒度,就能够合并为一个事实表,这类事实表特别适合常常须要共同分析的多过程度量。

维度表技术

  1. 维度表结构

维度表谨记一条原则,包含单一主键列,但有时因业务复杂,也可能出现联合主键,请尽可能避免,若是没法避免,也要确保必须是单一的,这很重要,若是维表主键不是单一,和事实表关联时会出现数据发散,致使最后结果可能出现错误。

维度表一般比较宽,包含大量的低粒度的文本属性。

  1. 跨表钻取

跨表钻取意思是当每一个查询的行头都包含相同的一致性属性时,使不一样的查询可以针对两个或更多的事实表进行查询

钻取能够改变维的层次,变换分析的粒度。它包括上钻/下钻:

上钻(roll-up):上卷是沿着维的层次向上汇集汇总数据。例如,对产品销售数据,沿着时间维上卷,能够求出全部产品在全部地区每个月(或季度或年或所有)的销售额。

下钻(drill-down):下钻是上钻的逆操做,它是沿着维的层次向下,查看更详细的数据。

  1. 退化维度

退化维度就是将维度退回到事实表中。由于有时维度除了主键没有其余内容,虽然也是合法维度键,可是通常都会退回到事实表中,减小关联次数,提升查询性能

  1. 多层次维度

多数维度包含不止一个天然层次,如日期维度能够从天的层次到周到月到年的层次。因此在有些状况下,在同一维度中存在不一样的层次。

  1. 维度表空值属性

当给定维度行没有被所有填充时,或者当存在属性没有被应用到全部维度行时,将产生空值维度属性。上述两种状况,推荐采用描述性字符串代替空值,如使用 unknown 或 not applicable 替换空值。

  1. 日历日期维度

在日期维度表中,主键的设置不要使用顺序生成的id来表示,可使用更有意义的数据表示,好比将年月日合并起来表示,即YYYYMMDD,或者更加详细的精度。

版权声明:程序员胖胖胖虎阿 发表于 2022年11月24日 下午10:24。
转载请注明:Kimball维度建模 | 胖虎的工具箱-编程导航

相关文章

暂无评论

暂无评论...