关于数据仓库:数仓大数据时代维度建模过时了吗

33次阅读

共计 3427 个字符,预计需要花费 9 分钟才能阅读完成。

20 世纪 80 年代末期,数据仓库技术衰亡。自 Ralph Kimball 于 1996 年首次出版 The Data Warehouse Toolkit(Wiley)一书以来,数据仓库和商业智能 (Data Warehousing and Business Intelligence, DW/BI) 行业渐趋成熟。Kimball 提出了数据仓库的建模技术 –维度建模(dimensional modelling), 该办法是在实际察看的根底上开发的。尽管它不基于任何实践,然而在实践中却十分胜利。维度建模被视为设计数据仓库和数据集市的次要办法,对数据建模和数据库设计学科有着重要的影响。时至今日,维度建模仍然是构建数仓首选的数据建模办法,然而随着技术的倒退,获取超强的存储与计算能力的老本会变得很便宜。这在无形之中对传统的维度建模办法产生了肯定的影响。本文将探讨以下内容:

  • 维度建模的概念
  • 维度建模的优缺点
  • 为什么星型模型仍然有用
  • 数据建模产生了哪些变动

规定是用来被突破的

First learn the rules, then break them

维度建模的概念

事实表

事实表作为数据仓库维度建模的外围,紧紧围绕着业务过程来设计,通过获取形容业务过程的度量来表白业务过程,蕴含了援用的维度和与业务过程无关的度量。

事实表中一条记录所表白的业务细节水平被称为 粒度。通常粒度能够通过两种形式来表述:一种是维度属性组合所示意的细节水平;一种是所示意的具体业务含意。

作为度量业务过程的事实,个别为整型或浮点型的十进制数值,有可加性、半可加性和不可加性三种类型。可加性事实是指能够依照与事实表关联的任意维度进行汇总。半可加性事实只能依照特定维度汇总,不能对所有维度汇总,比方库存能够依照地点和商品进行汇总,而按工夫维度把一年中每个月的库存累加起来则毫无意义。还有一种度量齐全不具备可加性,比方比率型事实。对于不可加性事实可分解为可加的组件来实现汇集。

事实表通常只有很少的列和很多行,是一种 “ 瘦高 ” 型的表。事实表定义为以下三种类型之一:

  • 事务事实表: 记录无关特定事件的事实(例如,销售事件,保留在原子的粒度,也称为原子事实表)
  • 周期快照事实表记录给定工夫点的事实(例如,月末的帐户详细信息)
  • 累积快照事实表记录了给定工夫点的汇总事实(例如,某产品的当月迄今总销售额)

维表

维度是维度建模的根底和灵魂。在维度建模中,将度量称为 事实 ,将环境形容为 维度,维度是用于剖析事实所须要的多样环境。例如,在剖析交易过程时,能够通过买家、卖家、商品和工夫等维度形容交易产生的环境。维度所蕴含的示意维度的列,称为维度属性。维度属性是查问约束条件、分组和报表标签生成的根本起源,是数据易用性的要害。

维度通常是限定事实的描述性信息。例如,产品维度中的每个记录代表一个特定的产品。与事实表相比,维表通常具备绝对较少的记录,然而每个记录可能具备大量的属性来形容事实数据。维度能够定义各种各样的特色,一些常见的维表:

  • 工夫维度表:以最低工夫粒度级别形容工夫
  • 天文维度表:形容了地位数据,例如国家 / 地区 / 城市
  • 产品维度表:表形容了产品的详细信息
  • 员工维度表:形容了员工,例如销售人员

星型模型

大多数的数据仓库都采纳星型模型。星型模型是由事实表和多个维表组成。事实表中寄存大量对于企业的事实数据,元祖个数通常很大,而且非规范化水平很高。例如,多个期间的数据可能会呈现在同一个表中。维表中通常寄存描述性数据,维表是围绕事实表建设的,通常来说具备较少的行。如下图所示:

星型模型存取数据速度快,次要是针对各个维做了大量预处理,如依照维度进行事后的统计、分组合排序等。与规范化的关系型数据库设计相比,星型模型是非规范化的,通过数据冗余晋升多维数据的查问速度,减少了存储空间的代价。当业务问题发生变化、原来的维度不能满足需要时,须要减少新的维度。因为事实表的主键由所有维表的主键组成,这种维的变动带来的数据变动将是非常复杂和耗时的。一个星型模型的示例:

雪花模型

雪花模型是对星型模型的扩大,它将星型模型的维表进一步层次化,原来的各个维表可能被扩大为小的事实表,造成一些部分的档次区域。在雪花模型中可能定义多重父类维来形容某些非凡的维表,如在工夫维上减少月维表和年维表,通过查看与工夫无关的父类维,可能定义非凡的工夫统计信息,如月统计和年统计等。

雪花模式通过更多的连贯引入了更多的复杂性。随着存储变得越来越便宜,大多数状况,个别不采纳 雪花模型 办法。

雪花模型的有点是最大限度地缩小数据存储量,以及把较小的维表联结在一起来改善查问性能。然而它减少了用户必须解决的表的数量,减少了某些查问的复杂性。如下所示:

维度建模的优缺点

长处

  • 每次须要从数据库中获取一些信息时,能够不必编写简短的查问
  • 针对读取进行了优化,能够写更少的 JOIN,更快地返回后果

毛病

  • 对数据进行非规范化意味着一次性插入或更新会导致数据异样。在实践中,星型模型是通过批处理实来补救这一问题
  • 剖析灵活性无限。星型模型通常是为特定目标而设计的。在剖析需要方面,它不像规范化数据模型那样灵便

为什么星型模型仍然有用

多种数据源

公司从各种数据源中收集越来越多的数据,因而须要对后果数据集进行整顿以进行剖析,从而缩小异构数据源带来的剖析复杂性。

规范

由 Ralph Kimball 编写的 Data Warehouse Toolkit 定义了业界宽泛了解的概念。新员工能够疾速把握数据仓库的构造,而无需相熟具体的业务零碎数据。数据工程师和分析师通常对事实、维度、粒度这些概念比拟理解,从而能够促成合作。

可扩展性

新增加的事实表能够重用现有的维度。通过向事实表增加更多外键,实现向事实表增加新维度。另外,对于集成新的数据集,无需对模型进行重大调整。

数据建模产生了哪些变动

大数据时代,突飞猛进的技术倒退促使存储和计算产生了翻天覆地的变动(存储和计算比以往任何时候都便宜),因而数据模型也相应地产生了一些变动。

迟缓变动维(SCD)

对于随工夫而变动的维度,比方:用户能够更改其家庭住址,产品能够更改名称。所以须要一种策略保留历史某个工夫点对应的维度信息。

Kimball 书中介绍了许多 类型 的 SCD 策略,大多数应用 UPDATE 就地增加或批改信息。在保留历史记录的维度中,当记录中的任何属性产生更改时,都须要复制整行数据, 当属性常常更改时,同样会应用更多存储空间。值得注意的是,这些技术很简单,因为它们是在严格的存储束缚下设计的。

其实,能够应用维度快照来解决 SCD 的问题,尽管须要更多的存储空间,但创立和查问更简略。

维度快照

维度应比事实 小得多。电子商务的交易,订单可能数以百万 / 千万计,然而客户(维度)的数量会少得多。

每天咱们都会在版本快照中从新写入整个维度表

/data_warehouse/dim_users/ds = 2020-01-01
/data_warehouse/dim_users/ds = 2020-01-02 
...

因为每天有一个快照数据,因而不论产生多少变动都没有影响。这种形式非常简单粗犷,但与简单的不同类型的迟缓变动维策略相比,不失为一种可选的计划。

应用此种形式,能够通过 JOIN 特定日期的维度快照来获取历史某个工夫点的维度信息。另外,这种形式不会对查问速度产生影响,因为通过分区日期能够间接定位抉择的日期,而不是加载所有的数据。

系统地对维度进行快照(为每个 ETL 打算周期存储维度的残缺正本,通常在不同的表分区中),作为解决迟缓变动的维度(SCD)的通用办法,是一种简略的通用办法,不须要太多的工程工作,并且与经典办法相比,在编写 ETL 和查问时很容易把握。简单的 SCD 建模技术并不直观,并且会升高可拜访性。

分区

为了防止上游数据处理谬误导致事实表装载谬误,须要从数据源零碎中提取日期作为分区字段,这样能够实现数据装载的幂等性。此外,倡议按 事件日期 进行分区,因为查问通常会将其用作过滤器(WHERE 子句)。

代理键与冗余维度

在维表中保护代理键是非常复杂的,除此之外,还会使事实表的可读性变差。在事实表中应用天然键和维度冗余的形式越来越广泛,这样能够缩小 JOIN 带来的性能开销。值得注意的是,反对编码和压缩的序列化格局 (如 Parquet、ORC) 解决了非规范化相干的大多数性能损失。

总结

本文次要介绍了维度建模的基本概念,包含维表、事实表、星型模型和雪花模型。其次对星型模型的优缺点进行了论述。最初指出了维度建模正在产生的一些变动。

公众号『大数据技术与数仓』,回复『材料』支付大数据资料包

正文完
 0