记录此篇文章的目的是深化自己学习的理解,对自己工作过程中用到的知识复盘,也方便自己后续查阅与复习。
1、数仓建模的目的
数仓的建模或者分层,都是为了更好的管理、维护和使用数据,站在数仓建设的角度来看,分层分域的划分都是为了更好的管理数据。
在数据查询方面,提高数据查询效率,降低数据I/O,帮助用户更快更精确的找到自己想要查询的数据。
在数据存储方面,减少不必要的数据冗余,实现数据的高效复用,降低数据的计算和存储成本。
在数据质量方面,制定统一的数据标准,数据清洗规则,统一业务口径,提高数据质量,提供高质量、口径一致、编码一致的数据仓库。
在数据使用方面,改善用户数据使用体验,提高数据使用效率。
2、范式建模(关系型数据库)
范式建模是我们构建数据模型常用的一个方法,该方法主要有Inmon架构所提倡的,主要用于关系型数据库的数据存储,目前,我们在关系型数据库中范式建模的使用比较广泛。
符合3NF建模的数据库,基本可以避免数据冗余过大,插入异常,修改异常,删除异常的问题。
(1)第一范式,属性不可再分,就是一列里不能再分为多个小列,INF是所有关系型数据库中的基本要求,例如SQL Server、Oracle、MySQL数据库中,不符合1NF是无法创建成功的。
(2)第二范式,要求每张表都有一个主键,其他所有的字段都完全依赖于主键,也就是说要求实体的属性完全依赖主关键字。
(3)第三范式,所有的字段只能直接依赖主键,不得依赖于其他字段。
优点:1)节约存储;2)规范化的好处就是通过减少数据冗余提高更新数据的效率,同时保证数据的完整性;3)结构清晰,易于理解。
缺点:1)构建比较复杂;2)查询复杂(需要很多关联);3)不适合在大数据下构建(1查询复杂,2存储很便宜)
由于建模方法限定在关系型数据库上,在某些时候反而限制了整个数据仓库的灵活性,特别是考虑数据仓库的数据向数据集市层汇总时,需要进行一定的变通才能满足相应的需求。
3、维度建模
维度建模是kimball架构所倡导的,维度建模以分析决策的需求出发去构建模型,构建的数据模型为分析需求所服务,因此它重点解决用户如何快速的完成分析需求,同时还有较好的大规模复杂查询的响应性能。
维度建模源自于数据集市,主要面向分析场景Kimball 推崇数据集市的集合为数据仓库,同时也提出了对数据集市的维度建模,将数据仓库中的表划分为事实表与维度表两种类型。
维度建模是面向用户需求的、容易理解的、访问效率较高的建模方法。
维度建模通常围绕着星型模式的方式构建。所谓星型模式,就是以一个实体表为中心,围绕着多个维度表。雪花模型是当有一个或多个维表没有直接连接到事实表上,而是通过其他维表连接到事实表上时,其图解就像多个雪花连接在一起,故称雪花模型。雪花模型是对星型模型的扩展。
为什么要进行维度建模
(1)适配大数据的处理方式,维度建模的非强范式,可以更好的利用大数据处理框架的数据处理能力,避免范式操作的过多关联操作,可以实现高度的并行化。
数据仓库大多数时候是比较适合使用星型模型构建底层数据的Hive基础表,通过大量的冗余提供数据查询效率,星型模型对OLAP分析引擎比较友好。
雪花模型在关系型数据库中,例如MySQL、Oracle中非常的常见,电商数据库表中运用的较多。
(2)自下而上的建设现状
业务已经建设完毕,表已经存在,随着数据的逐渐增多,多数据有分析或其他的需求。
(3)简单的模型使用方便
维度建模非常的直观,紧紧围绕着业务建模,可以直观的反应出业务中的问题,不需要通过特别抽象的处理。
4、分层和建模的关系
(1)明细层的范式建模
明细层一般采用传统的范式建模,这一层的数据模型主要是为了将业务流程描述清楚,将源数据中隐含的、有歧义的数据描述清楚,如活跃用户、VIP用户等。该层次的数据模型追求的目标是灵活地表达业务过程,要保证数据一致性、唯一性、正确性,以尽量少的代价与源数据保持数据同步,同时该层次的数据模型不建议开给不懂技术的业务人员直接使用,因此,采用关系型的三范式模型是最佳的选择。
(2)集市层的维度建模
集市层是按照业务主题、分主题构建出来的、面向特定部门或人员的数据集合,该层次的数据模型会开放给业务人员使用,进行数据挖掘及业务分析。这个层次所构建出来的数据模型,一般按照业务过程进行组织,每个事实表代表一个独立的业务过程,事实表之间不存在直接的依赖关系,这样业务人员可以很容易地将分析需求对应到事实表上,利用工具或手工写出简单的SQL,将统计数据提取出来进行分析。
5、模型的实现
模型的实现主要是指在维度建模中,维度表和事实表的关联设计,我们对维度表的设计,最终决定了维度表与事实表关联之后的形态。我们可以根据事实表与维度表关联的形态,将模型分为星型模型和雪花模型。
星型模型和雪花模型的区别主要是对于维度表的拆分,雪花模型,维度表的设计更加规范,符合3NF,星型模型则会有一定的数据冗余来保证表的易用性。
星型模型一般是由一个事实表和多个非正规的维度表构成,维度表之间没有关联,一般是直接关联到事实表上的,维度表极大时,存储空间是个问题时,考虑使用雪花模型,简而言之,一般的建模场景下直接使用星型模型
应用场景
维度建模是为数据分析而生的,针对分析场景进行数仓模型构建,重点关注快速、灵活的建模解决分析需求,同时还能快速响应大数据的查询需求。
优点:方便使用,灵活性强。可扩展,维度模型允许数据冗余,可灵活的进行模型扩展。
缺点:数据冗余,数据更新不太灵活(数据更新时可能会刷大量的表)
为什么要范式建模和维度建模结合使用呢
数据库的底层使用范式建模可以保证数据来源的准确性和数据的唯一性,数据集市层使用维度建模可以更灵活的满足数据分析需求,虽然会造成一定的数据冗余,但是只要底层数据准确,数据质量是没有问题的,算是以最小的代价来满足和响应大数据需求。
不同的建模方式由各自的优缺点和各自局限性,在构建数仓的时候可以参考上述方法论,在不同的阶段使用不同的建模方法,根据实际情况而定。