最近在复习一些数据仓库和维度建模的知识,之前博客也写过,那就一起整理一下,对往期内容感兴趣的同学可以参考:
- 链接: 数据仓库入门.
- 链接: 大数据之维度建模中的重要概念.
废话不多说,让我们开始今日份的学习吧。
目录
- 1.数据技术的发展历史
- 2. 数据库and数据仓库
- 3. 数据仓库基本概念
- 3.1 数据仓库的发展历史
- 3.2 数据仓库的基本概念
- 3.3 数据仓库的定义
- 3.4 数据仓库的应用
- 4. 维度模型基本概念
- 5. 事实表的设计
- 5. 维度表的设计
- 6. 元数据管理
- 7. 参考
1.数据技术的发展历史
数据技术是指通过使用计算机和相关技术来处理和管理数据的一种技术。数据技术的发展历程可以追溯到计算机的发明和普及。以下是数据技术的主要发展历程:
- 数据存储和管理
20世纪60年代,关系型数据库(RDBMS)出现,这是一种将数据存储在表格中的方式,它以结构化的方式组织数据,允许用户使用SQL语言来查询和管理数据。关系型数据库是一种可靠的数据存储方式,适用于需要进行复杂数据查询和多表关联查询的应用程序。它的出现使得数据管理更加规范化和高效化,对企业级数据管理具有重要意义。 - 数据挖掘
20世纪80年代,数据挖掘开始兴起。数据挖掘是一种通过应用统计学、机器学习和模式识别技术来发现数据中隐藏模式的过程。数据挖掘可以帮助企业从海量数据中提取有用信息,做出更准确的预测和决策,对企业发展和竞争具有重要意义。数据挖掘技术主要用于市场营销、金融、医疗、社交网络等领域。 - 数据仓库
20世纪90年代,数据仓库开始流行。数据仓库是一种专门设计用于存储和管理企业数据的数据库系统。数据仓库使用ETL(抽取、转换和加载)工具将数据从多个来源汇总到一个统一的位置,以便企业能够更好地进行数据分析。数据仓库的出现使得企业可以更加高效地利用数据,以提高业务决策的精确性和效率。 - 大数据
21世纪初,随着互联网和传感器技术的发展,数据的数量和种类不断增加。因此,大数据技术开始兴起。大数据技术包括分布式计算、Hadoop和Spark等技术,它们可以处理大规模数据集。大数据技术的出现使得企业可以更好地利用数据,以便进行更准确的预测和决策。大数据技术主要用于金融、物流、医疗、社交网络等领域。 - 人工智能和机器学习
21世纪初,人工智能和机器学习开始成为热门话题。这些技术可以帮助人们从大量数据中发现模式和规律,以便做出更准确的预测和决策。人工智能和机器学习技术广泛应用于语音识别、图像识别、自然语言处理等领域。通过使用这些技术,企业可以更好地理解和利用数据,以便更好地服务于客户、提高生产效率、改善运营效率等。 - 数据可视化
数据可视化是将数据通过图表、图形、地图等形式展现出来的过程。数据可视化技术可以帮助用户更好地理解数据,发现数据中的规律和趋势,从而更好地做出决策。数据可视化技术主要用于企业数据分析、市场营销、金融等领域。
总的来说,随着计算机和网络技术的发展,数据技术的应用领域不断扩展,数据处理和管理的方式也不断发展。数据技术的发展历程可以总结为:数据存储和管理、数据挖掘、数据仓库、大数据、人工智能和机器学习、数据可视化。每个阶段都具有重要的意义和应用价值,对企业和社会的发展都有着深远的影响。
2. 数据库and数据仓库
数据库(Database)和数据仓库(Data Warehouse)是两个常见的数据管理系统。他们的定义和用途有所不同。下面是它们的定义和对比:
表头 | 数据库 | 数据仓库 |
---|---|---|
定义 | 一个用于存储和管理数据的软件系统,可以对数据进行增删改查等操作。 | 一个用于集成、存储和管理来自多个数据源的大量结构化和非结构化数据的系统 |
数据类型 | 通常包含当前、实时和更新频率较高的数据。 | 主要包含历史、归档数据和大量的决策支持数据。 |
数据结构 | 数据库的数据结构通常是由多个表组成的关系型结构,使用 SQL 等查询语言进行操作。 | 数据仓库中的数据结构通常采用星型或雪花型的维度模型,支持在线分析处理(OLAP)操作。 |
存储方式 | 数据库的数据结构通常是由多个表组成的关系型结构,使用 SQL 等查询语言进行操作。 | 数据仓库中的数据结构通常采用星型或雪花型的维度模型,支持在线分析处理(OLAP)操作。 |
用途 | 数据库通常用于支持业务应用程序、Web 应用程序和移动应用程序等的后端数据存储和管理。 | 数据仓库通常用于支持企业级决策支持系统(DSS)和商业智能(BI)等应用程序,帮助企业做出战略性和战术性决策。 |
数据库和数据仓库都是非常重要的数据管理系统,各自有不同的用途和优势。如果你需要存储和管理实时和更新频率较高的数据,可以选择数据库;如果你需要集成和管理来自多个数据源的大量历史数据,并支持高效的分析和查询,可以选择数据仓库。
3. 数据仓库基本概念
数据仓库是指在企业或组织中用于集成和存储数据的一种信息系统,它通过对海量数据的整合、清洗、转换和提炼,使得决策者可以基于准确、一致、维度化的数据进行深入分析和挖掘,从而更好地了解业务、优化决策、提升业绩。下面我将从数据仓库的发展历史、基本概念、定义和应用方面对其进行详细介绍。
3.1 数据仓库的发展历史
数据仓库的发展经历了以下几个阶段:
(1) 数据库阶段:20世纪70年代至80年代初期,数据管理主要依靠关系型数据库技术,企业常常使用的是OLTP(Online Transaction Processing,联机事务处理)系统。这种系统主要是用来支持企业日常的业务操作,是以任务为导向的。
(2) 决策支持系统阶段:80年代末至90年代,企业开始意识到数据的重要性,决策支持系统(DSS)应运而生。DSS基于数据挖掘、数据分析等技术,主要用于帮助决策者进行决策分析。这个时期,数据的规模越来越大,管理数据变得越来越困难。
(3) 数据仓库阶段:90年代至今,随着数据规模的不断扩大,企业面临的问题越来越多,数据仓库应运而生。数据仓库可以通过对不同来源的数据进行整合和清洗,提供决策者更为准确、一致的数据,并帮助他们进行决策分析。
3.2 数据仓库的基本概念
(1) 维度:维度是描述一个事实所发生的上下文信息,例如时间、地点、产品等。
(2) 事实:事实是指描述业务活动或事件的数据,例如销售额、订单数量、库存量等。
(3) 星型模型:星型模型是一种数据仓库的建模方式,以一个中心事实表为核心,围绕其建立与之关联的维度表,形成星型结构。
(4) 雪花模型:雪花模型是星型模型的一种变体,相比星型模型,雪花模型更加规范化,采用多个维度表来表示复杂的层次结构。
(5) ETL:ETL是抽取、转换、加载(Extract, Transform, Load)的缩写,指的是数据仓库中的数据处理流程。
3.3 数据仓库的定义
数据仓库是一个以主题为导向、集成、非易失性、时间一致的数据集合,用于支持企业决策者进行分析、报表和数据挖掘等活动。它通过对企业各个业务领域的数据进行整合和清洗,将其转化为可理解、易分析的数据,从而为决策者提供决策所需的信息和分析基础。
数据仓库是一个面向主题的、集成的、稳定的、历史数据的集合,它包括多个来源系统的数据,这些数据被集成到一个统一的模型中,通过数据清洗、转换和整合,使得数据可以被分析、查询和报告。数据仓库的主要目的是为了支持决策,因此它的设计和建设需要遵循一定的原则和方法。
3.4 数据仓库的应用
(1) 企业决策支持:数据仓库的主要应用是支持企业决策者进行数据分析、报表和数据挖掘等活动,帮助他们做出更准确、更快速、更明智的决策。
(2) 业务智能:数据仓库可以帮助企业实现业务智能,通过对数据进行深入的分析,发现业务中的规律和趋势,从而提供更好的服务和产品,提高企业的竞争力。
(3) 数据分析:数据仓库提供了可靠的数据基础,可以帮助企业进行数据分析,从而为企业的决策和规划提供重要的支持。
(4) 统一数据存储:数据仓库可以统一不同数据来源的数据存储,从而降低企业的管理成本和复杂度。
(5) 数据质量管理:数据仓库可以通过数据清洗和校验等方式,提高企业的数据质量,从而提高企业的决策效果和业务水平。
4. 维度模型基本概念
维度模型是一种数据建模技术,最初由Ralph Kimball在20世纪80年代提出。它是一种基于维度和度量的数据建模方法,旨在支持数据仓库和商业智能应用程序。维度模型的核心概念包括维度、度量、事实表、维度表和层次结构。
维度:维度是描述业务实体的属性。比如客户、产品、地点和时间等。维度通常是层次结构的,比如时间维度可以从年到月再到日等多个级别。在维度模型中,维度用于对度量进行分组、筛选、排序等操作,是对度量数据进行解释和分析的主要手段。
度量:度量是可以被计算或度量的业务指标,比如销售额、成本、利润等。度量通常是数字型的,并且与事实表中的粒度相对应。在维度模型中,度量是最重要的部分,因为它们是数据分析和决策的基础。
事实表:事实表是维度模型中最重要的表,它包含度量和外键,用于链接各个维度。事实表的每一行都对应一个特定的业务过程,例如销售订单或库存变化等。在维度模型中,事实表是中心和核心,因为它们是所有维度的交叉点,也是最终结果的来源。
维度表:维度表是描述维度的详细信息的表,包括维度的属性和关系。维度表通常包含外键,用于链接事实表。在维度模型中,维度表是提供维度分层结构的基础。
层次结构:维度可以包含多个层次结构,每个层次结构都由多个级别组成。例如,时间维度可以包含年份、月份、日期等多个级别。层次结构提供了维度数据的不同视角和维度分层结构的支持。
星型模型、雪花模型和星座模型是维度模型中常见的三种类型,它们都有各自的优点和适用场景。
- 星型模型
星型模型是维度模型中最简单、最常见的一种。它由一个事实表和多个维度表组成,事实表与维度表通过外键关联。这种模型的特点是结构简单,易于理解和维护,查询性能也较高。通常适用于数据量不太大,数据结构简单的场景,如企业管理、日常统计等。 - 雪花模型
雪花模型是在星型模型基础上发展而来,它通过规范化维度表来减少冗余数据,从而提高数据的一致性和可维护性。具体来说,雪花模型中的维度表包含多个维度表,这些维度表通过外键关联形成层级结构。这种模型的特点是数据结构更规范,可以避免冗余数据,但是查询复杂度也更高。通常适用于数据量较大、数据结构复杂的场景,如金融、医疗等。 - 星座模型
星座模型是一种将多个星型模型集成在一起的方法,它允许不同的星型模型之间共享维度表,从而减少冗余数据和数据复杂度。这种模型的特点是可以支持多维度、多层次的查询分析,能够适应复杂的业务需求。通常适用于数据量大、复杂度高、查询要求多维度和多层次的场景,如大型企业、电商等。
5. 事实表的设计
在维度模型中,事实表是最重要的组成部分之一。它存储了业务事件的度量值,如销售金额、销售数量、利润等。在事实表的设计过程中,需要考虑以下几个方面:
- 选择度量值
事实表的度量值应该选择那些最能反映业务事件的重要性的值,这些值应该具有可度量性和可比性。在选择度量值时,需要根据业务需求和数据可用性进行评估。 - 建立主键
每个事实表都应该有一个唯一的主键,它用于将事实表与其他表进行关联。在设计主键时,通常需要考虑将一个或多个维度键和日期键组合在一起作为主键。 - 建立外键
事实表需要与一个或多个维度表进行关联,这可以通过建立外键实现。外键是一个指向维度表的键,它与事实表中的主键进行关联。外键的建立可以使用数据库的关系约束实现。 - 选择粒度
粒度是指事实表中数据记录的层次。在选择粒度时,需要考虑业务需求和数据可用性。一般来说,粒度应该越细越好,这样可以获得更详细的数据分析结果。 - 设计聚合
事实表中的数据通常需要聚合才能提供更有用的分析结果。在设计聚合时,需要考虑到查询的复杂度和性能。聚合可以在ETL阶段中预先计算,也可以在查询时进行计算。
综上所述,事实表的设计需要考虑业务需求、数据可用性、性能和复杂度等方面。设计好的事实表可以提供有用的分析结果,帮助企业做出更好的决策。
在维度建模中,事实表通常可以分为三种类型:
- 事务性事实表
事务性事实表存储了每个业务事件的每个事实的明细数据,例如每个订单的每个产品的销售数量和销售金额等。它通常是一个细粒度的表,记录了具体的操作信息,是数据仓库中最基础的表之一。事务性事实表通常会被用于执行详细级别的数据分析和报告。 - 周期性快照事实表
周期性快照事实表记录了某一时刻(通常是每天)的快照数据,通常包括一组度量值,例如某个产品的库存数量、销售数量、成本等。周期性快照事实表记录了数据仓库中的历史信息,可以帮助企业进行历史趋势分析和预测。相对于事务性事实表,周期性快照事实表通常包含更少的行,但是每行包含更多的列。 - 累积快照事实表
累积快照事实表记录了一个业务过程中的多个状态的数据,通常包含多个时间戳和一组度量值。例如,一个银行账户的状态可以包括账户的开户日期、最近的账单日期、账户余额等信息。累积快照事实表通常包含多个日期列,可以记录不同状态下的度量值。与周期性快照事实表相比,累积快照事实表可以更好地反映业务过程中的变化和状态的演化。
三者的优劣势:
类型 | 特点 | 优点 | 缺点 |
---|---|---|---|
事务型 | 存储每个业务事件的每个事实的明细数据,记录每次操作的数据变化 | 可以支持详细级别的数据分析和报告 – 可以提供最准确的数据 – 可以帮助企业监测业务进展 – 可以支持数据透视和关联分析 | – 数据量较大,需要更多的存储空间和处理时间 – 难以支持历史分析和趋势分析 |
周期型 | 记录某一时刻的快照数据,通常包括一组度量值 | – 可以支持历史分析和趋势分析 – 可以帮助企业预测未来趋势 – 数据量相对较小,可以减少存储空间和处理时间 | – 数据缺失或错误时可能无法找到问题 – 可能需要复杂的 ETL(抽取、转换、加载)过程来生成快照数据 |
累积型 | 记录业务过程中的多个状态的数据,可以更好地反映业务过程中的变化和状态的演化 | – 可以记录业务过程中每个阶段的度量值和时间戳 – 可以更好地反映业务状态的演化和变化 – 可以支持历史分析和趋势分析 | – 可能需要复杂的 ETL 过程来生成累积快照数据 – 需要更多的存储空间和处理时间 – 难以处理频繁的业务状态变化 |
5. 维度表的设计
在维度建模中,维度表用于描述业务事实的上下文信息,通常包含了业务过程中重要的维度属性信息,例如时间、地点、产品、客户等。维度表的设计需要考虑以下几个方面:
- 确定维度表的主键:维度表的主键用于唯一标识每个维度实例,通常使用一个单一的自然键或复合键来定义。例如,在时间维度表中,可以使用日期作为主键,或者使用多个字段(例如年、月、日)组合成一个复合键。
- 定义维度属性:维度表应该包含与业务过程相关的所有维度属性,这些属性通常用于分组、过滤和排序。例如,在产品维度表中,可以包含产品名称、描述、价格、制造商等属性。
- 确定维度层次结构:维度表可以根据维度属性之间的关系组织成层次结构,例如,在时间维度表中,可以使用年份、季度、月份、日期等层次结构。维度层次结构可以方便用户进行汇总和细分分析。
- 处理缺失和未知的数据:维度表中的属性值可能存在缺失或未知的情况,需要采取适当的方式来处理这些情况,例如使用默认值、空值或未知值等。同时,需要定义一些未知值的标识符,以便在数据分析中进行识别和处理。
- 考虑维度表的性能:维度表的性能对数据分析的效率和响应时间有重要影响。因此,需要考虑如何优化维度表的设计,例如通过索引和聚集等方式提高查询性能,或者通过分区和划分等方式提高数据加载和查询效率。
在维度表的设计中,需要充分理解业务需求和数据特征,通过合理的设计和优化,可以支持更高效和精准的数据分析和报告。
维度变化的处理方式:
在维度建模中,维度表中的维度属性可能随着时间或业务需求的变化而发生变化。为了保证数据分析的准确性和一致性,需要采取适当的方式来处理维度变化。通常有以下几种方式:
- 慢变化维度(Slowly Changing Dimension,SCD):对于维度属性变化较慢的情况,可以采用慢变化维度的方式来处理。这种方式将维度属性分为多个版本,每个版本对应一个时间段。在新版本出现之前,旧版本的数据会被保留下来,并在查询时根据时间范围选择合适的版本。SCD通常分为三种类型:
- SCD Type 1:重写(Overwrite)历史数据,直接用新值覆盖旧值,不保留历史信息。
- SCD Type 2:添加新行(Add new row),在维度表中新增一行,保留历史信息。
- SCD Type 3:增加新属性(Add new attribute),在维度表中增加新的属性列,但仍保留原有的属性值。
- 快变化维度(Rapidly Changing Dimension,RCD):对于维度属性变化频繁的情况,SCD的方式可能会导致维度表的数据量急剧增加,影响查询性能。此时可以采用快变化维度的方式,只保留当前最新的属性值,而历史值则存储在事实表中。
- 无限制变化维度(Unlimited Changes Dimension,UCD):对于一些维度属性的变化没有固定的规律和模式,无法采用SCD或RCD的方式来处理。此时可以采用最简单的方式,即每次变化都新增一行记录,保留历史信息,但会增加维度表的数据量。
各种方式的比较:
在维度建模中,维度表中的维度属性可能随着时间或业务需求的变化而发生变化。为了保证数据分析的准确性和一致性,需要采取适当的方式来处理维度变化。通常有以下几种方式:
慢变化维度(Slowly Changing Dimension,SCD):对于维度属性变化较慢的情况,可以采用慢变化维度的方式来处理。这种方式将维度属性分为多个版本,每个版本对应一个时间段。在新版本出现之前,旧版本的数据会被保留下来,并在查询时根据时间范围选择合适的版本。SCD通常分为三种类型:
SCD Type 1:重写(Overwrite)历史数据,直接用新值覆盖旧值,不保留历史信息。
SCD Type 2:添加新行(Add new row),在维度表中新增一行,保留历史信息。
SCD Type 3:增加新属性(Add new attribute),在维度表中增加新的属性列,但仍保留原有的属性值。
快变化维度(Rapidly Changing Dimension,RCD):对于维度属性变化频繁的情况,SCD的方式可能会导致维度表的数据量急剧增加,影响查询性能。此时可以采用快变化维度的方式,只保留当前最新的属性值,而历史值则存储在事实表中。
无限制变化维度(Unlimited Changes Dimension,UCD):对于一些维度属性的变化没有固定的规律和模式,无法采用SCD或RCD的方式来处理。此时可以采用最简单的方式,即每次变化都新增一行记录,保留历史信息,但会增加维度表的数据量。
不同的维度变化方式适用于不同的业务场景和数据特征,需要根据具体情况进行选择和设计。在处理维度变化时,需要考虑数据一致性、查询性能和维护成本等方面的因素,并采取适当的优化措施来提高维度表的效率和准确性。
项目 | Value | Value |
---|---|---|
SCD Type 1 | 简单易实现,查询性能较好 | 不保留历史信息,无法回溯历史数据 |
SCD Type 2 | 保留历史信息,可回溯历史数据 | 数据冗余,维护成本高 |
SCD Type 3 | 不增加数据量,保留部分历史信息 | 无法回溯完整历史数据,查询性能较差 |
RCD | 数据量不增加,查询性能较好 | 无法保留历史信息,无法回溯历史数据 |
UCD | 保留完整历史信息,可回溯历史数据 | 数据量增加快,查询性能较差 |
需要根据具体的业务需求和数据特征来选择适合的方式来处理维度变化。在实际应用中,通常会采用多种方式的组合来处理不同的维度属性。例如,对于一个维度表,可以采用SCD Type 1来处理部分固定不变的属性,采用SCD Type 2来处理较为稳定但会发生变化的属性,采用UCD来处理变化频繁的属性,以此来达到优化查询性能、保证数据一致性和降低维护成本的目的。
6. 元数据管理
元数据是指描述数据的数据,包括数据仓库中使用的各种数据对象、数据结构、数据规则、数据流程、数据质量等信息。在数据仓库中,元数据管理非常重要,可以帮助用户更好地理解和使用数据仓库中的数据,提高数据的质量和可信度,同时也可以提高数据仓库的开发和维护效率。
根据不同的分类标准,元数据可以分为不同的类型。下面是常见的元数据分类:
- 技术元数据:指描述数据仓库的技术信息,如数据仓库架构、数据仓库中使用的软件和硬件、数据仓库的部署方式等。技术元数据主要用于数据仓库的设计和管理,可以帮助开发人员更好地理解和管理数据仓库的技术细节。
- 业务元数据:指描述数据仓库中存储的业务信息,如业务规则、业务过程、业务流程等。业务元数据主要用于业务人员和管理人员使用,可以帮助他们更好地理解和使用数据仓库中的数据,从而支持业务决策和管理。
- 数据元数据:指描述数据本身的信息,如数据结构、数据类型、数据格式等。数据元数据主要用于数据的管理和维护,可以帮助开发人员更好地管理数据的定义、使用和维护。
- 运营元数据:指描述数据仓库中的运营信息,如数据仓库的使用情况、数据查询情况、数据质量情况等。运营元数据主要用于数据仓库的运营和管理,可以帮助管理人员更好地了解数据仓库的使用情况和数据质量情况,从而支持数据仓库的运营和维护。
不同类型的元数据可以使用不同的管理方式进行管理。例如,技术元数据可以使用文本文件、数据库、元数据仓库等方式进行管理;业务元数据可以使用业务规则管理工具、业务流程管理工具等方式进行管理;数据元数据可以使用数据字典、数据模型工具等方式进行管理;运营元数据可以使用运营监控工具、数据质量工具等方式进行管理。需要根据不同的元数据类型和具体的业务需求来选择适合的管理方式。
7. 参考
- chatgpt 参与度80%