您好,云祁。感谢您的分享。以下是我对您提供的段落结构进行重构后的版本:

大家好,我是云祁。今天我来和大家聊聊数仓常见的一些建模方法和具体的实例演示,一起来看看吧。

一、为什么需要数据建模?

在开始今天的话题之前,我们不妨思考下,到底为什么需要进行数据建模?随着从IT时代到DT时代的跨越,数据开始出现爆发式的增长,这当中产生的价值也是不言而喻。如何将这些数据进行有序、有结构地分类组织存储,是我们所有数据从业者都要面临的一个挑战。如果把数据看作图书馆里的书,我们希望看到它们在书架上分门别类地放置,而不是乱糟糟的堆砌在一起。大数据的数仓建模正是通过建模的方法,更好的组织、存储数据,以便在性能、成本、效率和数据质量之间找到最佳平衡点。一般我们会从以下面四点考虑:

- 性能:能够快速查询所需的数据,减少数据I/O的吞吐。

- 成本:减少不必要的数据冗余,实现计算结果的复用,降低大数据系统中的存储成本和计算成本。

- 效率:改善使用数据的体验,提高使用效率。

- 质量:改善数据统计口径的不一致性,减少数据计算错误的可能性,提供高质量的、一致的数据访问平台。

因此,毋庸置疑,大数据系统、数据平台都需要数据模型方法来帮助更好地组织和存储数据,而数据建模的工作也正是围绕上述四个指标取得最佳平衡而努力。

二、从OLTP和OLAP系统的区别看模型方法论的选择

OLTP系统通常面向的主要数据操作是随机读写,主要采用3NF实体关系模型存储数据,在事务处理中解决数据的冗余和一致性问题。而OLAP系统面向的主要数据操作是批量读写,事务处理中的一致性不是OLAP所关注的。其主要关注数据的整合以及在一次性复杂大数据查询和处理方面的性能。因此它需要采用不同的建模方法,例如维度建模。如果大家想进一步了解OLAP系统,可以学习这篇文章:关于OLAP数仓——这大概是史上最全面的总结!

三、典型的数据仓库建模方法论

数据仓库本质上是从数据库衍生出来的。因此数据仓库的建模也是不断发展演化而来的。从最早的借鉴关系型数据库理论范式建模到逐渐提出维度建模等等,越往后建模要求越高且越需满足3NF、4NF等规则。但是对于数据仓库来说目前主流还是维度建模并夹杂着范式建模。常用的数仓建模方法可分为:E-R模型、维度模型、Data Vault模型、Anchor模型。其中E-R模型是最基础且最常用的一种建模方法之一。其他三种则是近年来较为流行或新兴的建模方法。

数据仓库的建模方法有很多,其中最常用的是E-R实体关系模型。这种建模方法可以将事物抽象为“实体”、“属性”、“关系”来表示数据关联和事物描述。

另外,维度模型也是数据仓库领域中最流行的数仓建模经典之一。维度建模以分析决策的需求出发构建模型,构建的数据模型为分析需求服务,因此它重点解决用户如何更快速完成分析需求,同时还有较好的大规模复杂查询的响应性能。其中典型的代表就是使用星型模型,以及在一些特殊场景下使用的雪花模型。

业务过程可以是单个业务事件,如交易支付、退款等;也可以是某个事件的状态,如当前账户余额;还有就是一系列相关业务事件组成的业务流程,具体需要分析的是某些事件发生情况、当前状态或事件流转效率。

选择粒度:在事件分析中,我们需要预判所有分析所需细分的程度,从而决定选择的粒度。粒度是维度的一个组合。

识别维表:选择好粒度后,需要基于此粒度来设计维表,包括维度属性,用于分析时进行分组和筛选。

选择事实:确定分析需要衡量的指标。

在 Ralph Kimball 提出数据仓库维度建模后,我们将数据仓库中的表划分为事实表和维度表两种类型。之前已有详细介绍维度建模技术实践——深入事实表和维度表设计,感兴趣的同学可参考。

以常见的电商场景为例:在一次购买事件中,涉及主体包括客户、商品、商家,产生的可度量值会包括商品数量、金额、件数等。事实表根据粒度的角色划分不同,可分为事务事实表、周期快照事实表、累积快照事实表等。

事务事实表:用于承载事务数据,任何类型的事件都可以被理解为一种事务,如商家在交易过程中的常见订单、买家付款,物流过程中的揽货、发货、签收,退款中的申请退款。

周期快照事实表:快照事实表以预定间隔采样状态度量,如自然年至今或历史至今的下单金额、支付金额、支付买家数、支付商品件数等状态度量。

累计快照事实表:数据不断更新,选取多业务过程日期。用来记录具有时间跨度的业务处理过程的整个过程信息,每个生命周期一行,通常这类事实表比较少见。

继续讨论上述电商场景下的维表设计关注点:缓慢变化维度(如会员表的手机号、地址、生日等属性)、退化维度(如订货单表的订单编号、物流表的物流编号等)、雪花维度(满足第三范式的维度关系结构)、非规范化扁平维度(如商品维表中的产品、品牌、类目、品类等)、多层次维度(如地区维度的省、市、区县,商品的类目层级)以及角色维度(如日期维度在物流中扮演发货日期、送货日期、收获日期等不同角色)。

接下来讨论维度建模按照数据的组织类型,可划分为星型模型、雪花模型和星座模型。星型模型主要是维表和事实表,以事实表为中心,所有维度直接关联在事实表上,呈星型分布。

数据仓库模型有多种,其中常见的有维度模型、范式模型、实体关系模型和混合模型。

- 维度模型:是一种基于事实表的模型,通过对维度表进行分析来生成维度,然后再通过维度对事实表进行分析。这种模型的优点是易于理解和使用,但是缺点是在处理大量数据时效率较低。

- 范式模型:是一种基于星型模型的扩展,可以支持更高层次的抽象。它将事实表分解为多个层次,每个层次都有自己的维度和汇总维度。这种模型的优点是可以支持更高层次的抽象,但是缺点是需要更多的维护工作。

- 实体关系模型:是一种基于E-R图的模型,它将数据组织成实体和它们之间的关系。这种模型的优点是可以支持复杂查询,但是缺点是需要更多的维护工作。

- 混合模型:是将以上三种模型结合起来的一种模型。它可以根据实际情况选择不同的建模方式。

在这篇文章中,作者介绍了四种基本的建模方法:实体关系模型(ER模型)、文档导向模型(CDM模型)、维度模型和多维数据模型。

1. 实体关系模型(ER模型):类似于 Data Vault 的 Satellite,但是更加规范化,将其全部 k-v 结构化,一个表只有一个 Anchors 的属性描述。

2. 文档导向模型(CDM模型):将数据看作是文档,以文档的特性为基础进行建模。

3. 维度模型:关注快速、灵活的解决分析需求,同时能够提供大规模数据的快速响应性能。针对性强,主要应用于数据仓库构建和OLAP引擎低层数据模型。

4. 多维数据模型:结合了ER模型和维度模型的优点,既可以表示实体之间的关系,又可以表示实体的属性。

此外,文章还介绍了四种关系类型:实体之间的关系、实体之间的局部关系、实体属性之间的联系以及实体与概念之间的关系。

总之,以上为四种基本的建模方法,目前主流建模方法为:E-R模型、维度模型。不同的建模方法适用于不同的场景和需求。在实际应用中,需要根据实际情况选择合适的建模方法。