@[toc]
数仓分层
常见的数仓分为 5
层,其中包括 ODS、DIM、DWD、DWS 和 ADS,每个层次都有不同的功能和特点。
1.ODS 层
ODS 是原始数据存储层,用于接收来自各个业务系统的原始数据。数据在这一层次上通常是原始的、细粒度的,未经过任何进一步的加工和处理。
2.DIM 层
DIM 是维度数据存储层,用于存储业务维度信息,如产品、客户的详情信息等。维度数据在这一层次上被单独存储,以方便共享和重复使用,同时也提高了数据的一致性和可维护性。
3.DWD 层
DWD 是数据仓库明细层,用于存储经过清洗、整合和转换后的数据。一般是基于 ODS 和 DIM 层的数据做轻度汇总。DWD 层的结构和粒度一般与 ODS 层保持一致,但是 DWD 汇总了 DIM 层的维度数据,比如在 ODS 层只能看到客户端的 ID 字段,但是在 DWD 不但能看到客户端 ID 字段,还能看到客户端的名称字段。
4.DWS 层
DWS 是数据仓库汇总层,用于存储经过聚合和汇总的数据,以支持复杂的分析和报表需求。数据在这一层次上通常是按照不同的业务需求进行聚合和汇总的,以提高查询性能和减少数据量。
5.ADS 层
ADS 是应用数据服务层,用于存储面向特定应用和业务场景的数据,相关业务指标的计算结果,为前端可视化提供数据,制作 BI 报表,供领导者决策。
什么是维度建模?
维度建模是一种在数据仓库和商业智能领域常用的设计方法。它主要用于组织和表示数据,让用户可以方便地进行查询、分析和报告。
维度建模的核心思想是将数据组织成维度和事实两类。维度是描述业务过程中各种特征的属性,如时间、地点、产品、客户等(例如:产品详情表),而事实则是与这些维度相关联的数值型数据,如销售额、数量、利润等(例如:产品销售表)。
在维度建模中,通常采用 星型模型 或 雪花模型,下面将从这两个方面展开说说。
星型模型
星型模型是一种常见的维度建模方法,用于设计数据仓库中的数据结构。在星型模型中,数据被组织成一个中心的事实表与多个维度表相连的结构,形成了一个类似星星的形状,因此得名。
图片来源 —— 2、数据仓库-维度模型
优点
- 简单直观:易于理解和使用,使得用户可以快速上手。
性能高效:查询速度较快,因为事实表和维度表之间的连接通常是简单的关系型数据库关联操作。
灵活性强:支持多种查询和分析需求,用户可以根据需要对事实和维度进行灵活组合。
- 易于扩展:添加新的维度或事实通常不需要对现有结构进行大规模的修改。
缺点
冗余数据:某些维度属性可能在多个维度表中存在,导致数据冗余,增加了存储空间和维护成本。
复杂查询性能下降:对于包含大量复杂关联和计算的查询,性能可能会受到影响。但这个问题可以在加入 DWS 层进行解决,预先进行轻度汇总。
案例
假设一个零售企业想要设计一个数据仓库来分析销售情况,使用星型模型来组织数据,其中:
事实表包含销售量、销售额等度量值。
维度表包括时间维度(年、月、日)、产品维度(产品ID、产品名称、产品类别等)和地理维度(地区、城市、国家等)。
这样设计,企业可以轻松地进行各种查询,比如每月产品销售额、不同地区的销售量对比等,从而深入了解销售业绩并做出相应的决策。
雪花模型
雪花模型是在星型模型的基础上进行了规范化处理的一种扩展。在雪花模型中,维度表被进一步细分和规范化,以降低冗余和提高数据一致性,从而形成了类似雪花的结构。
图片来源 —— 2、数据仓库-维度模型
优点
- 规范化程度高:雪花模型对维度表进行规范化处理,减少了数据冗余,提高了数据的一致性和准确性。
节省存储空间:通过规范化处理,可以减少存储冗余,节省存储空间。
更好的数据一致性:规范化可以确保数据的一致性,因为维度信息只需存储一次,减少了数据更新时的错误可能性。
支持复杂的数据结构:适用于需要处理具有复杂结构和多对多关系的数据情况。
缺点
查询性能稍低:由于维度表的规范化处理,可能需要进行更多的表关联操作,导致查询性能略有下降。
设计和维护复杂度高:雪花模型相对于星型模型来说,设计和维护起来更加复杂,因为需要管理更多的表和关联关系。
案例
假设一个零售企业想要设计一个数据仓库来分析销售情况,使用雪花模型来组织数据,其中:
事实表包含销售量、销售额等度量值。
维度表包括时间维度(年、月、日)、产品维度(产品ID、产品名称、产品类别等)和地理维度(地区、城市、国家等)。
在雪花模型中,除了上述的维度表之外,可能还会将某些维度进一步规范化,例如将产品维度中的产品类别单独拆分成一个独立的表,从而形成更复杂的结构,规范化程度更高,但相应的查询性能也会降低。
模型选择
在选择星型模型和雪花模型时,需要考虑业务需求、数据复杂性、系统架构等因素。
如果业务数据具有相对简单的结构,例如清晰的维度和度量,并且维度之间的关系较为简单,对查询性能要求高,则使用星型模型更好。
如果业务数据结构复杂,例如某些维度具有多个层级或者存在多对多关系,雪花模型可以更好地反映这种复杂性,它能够对维度进行更细粒度的管理和控制,使得数据更加准确和一致,但查询性能较低。