当前位置: 首页 > news >正文

什么是数据仓库缓慢变化维?

缓慢变化的维度(SCD)是数据仓库和商业智能中的一个关键概念。它们指的是用于管理和跟踪尺寸数据随着时间的推移而变化的方法。这对于保持数据仓库中的历史准确性和确保数据完整性至关重要。

一、什么是SCD?

定义:缓慢变化的维度是数据仓库结构中那些在不规则的基础上而不是在固定的时间间隔上变化的部分。他们记录并保存过去对数据的更改,包括对客户住所或电话联系人的更改。SCD在保持最新记录以供当前和未来使用的分析、报告和决策方面发挥着重要作用。它们有助于监控维度属性的变化,并保证在业务实体发生变化时数据质量的可维护性。

缓慢变化维特点:

1、数据变化缓慢:缓慢变化维的数据不是频繁更新的,同时它受业务操作影响的频率较低

2、对数据一致性和准确性要求高

跨时间数据关联:由于数据会随时间变化,需要保证在不同时间点获取的数据在逻辑上是一致的;

数据溯源准确性当需要追溯数据的历史状态时,数据的准确性至关重要

3、与业务决策紧密相关支持长期策略分析,缓慢变化维的数据能够为企业的长期战略决策提供支持;

4、存储和管理复杂多种处理方式并存:有多种处理缓慢变化维的方式(type0、type1等)每种方式都有其适用场景和复杂性。

二、缓慢变化维的类型

1、type 0(保留原始值)

定义:这种类型是最简单的处理方式,当维度数据发生变化时,维度表中的数据保持不变,始终保留最初插入的值。例如,在一个产品维度表中,产品的初始类别被记录后,无论该产品在业务系统中的类别如何变化,在数据仓库的这个维度表中类别信息都不会更新。

应用场景:适用于那些历史数据具有权威性,不允许修改,且变化信息对分析不重要的维度。比如在记录法律法规条文的维度表中,条文编号和初始发布内容一旦确定就不能改变,即使条文在后续有修订,原始记录仍要保留用于追溯最初的法律状态。

优点:实现简单,数据仓库中的维度数据非常稳定,不会因为数据变化而产生混乱。同时,存储成本不会因为数据更新而增加。

缺点:数据可能与实际业务中的最新状态脱节,对于需要依据最新维度信息进行分析的场景不适用。

2、type 1(覆盖)

定义:如前面所提到的,当维度数据发生变化时,直接用新的值覆盖旧的值。例如,在客户维度表中,客户的联系电话发生变化,新的电话信息直接替换原来的记录。

应用场景:适用于那些不需要保留历史维度变化记录,只关注当前最新状态的场景。比如在一个电商促销活动的数据仓库中,活动产品的价格会频繁波动,每次价格变化直接更新价格字段,因为分析主要关注当前的促销价格,历史价格对促销效果分析没有太大帮助。

优点:处理方式简单直接,易于理解和实现。在维度数据更新后,查询最新状态的效率较高,因为不需要考虑历史版本。同时,由于不需要存储历史数据,存储成本相对较低。

缺点:丢失了维度数据的历史变化信息,无法追溯维度数据是如何演变的。这对于需要进行历史数据分析或者审计的场景是一个很大的局限。

3、Type 2(添加新行)

定义:当维度数据发生变化时,在维度表中插入一行新的数据来记录变化后的信息。并且会有相应的机制(如有效日期、版本号等)来区分不同版本的数据。例如,在员工维度表中,员工职位晋升后,插入新行记录新职位以及晋升日期,同时旧职位记录依然保留,通过有效日期字段可以判断每个职位记录的有效时间段。

应用场景:广泛应用于需要完整记录维度数据变化历史的场景。比如在金融数据仓库中,客户的信用评级、账户状态等信息的变化需要详细记录,以便后续进行风险评估、合规审计等操作时能够追溯客户状态在各个时期的变化情况。

优点:能够完整地保留维度数据的变化历史,为数据分析提供了丰富的素材,可以满足复杂的历史数据分析、数据溯源和审计需求。

缺点:随着时间的推移和数据的不断变化,维度表的规模会不断扩大,导致存储成本增加。同时,数据量的增大可能会影响查询性能,因为在查询时可能需要筛选多个版本的数据来获取特定时期的信息。

4、Type 3(添加新列)

定义:当维度数据发生变化时,在维度表中添加新的列来记录变化后的信息。例如,在产品维度表中,有一个 “原始价格” 列,当产品价格发生变化时,添加 “新价格” 列来记录新价格,还可以添加 “价格变化日期” 列来记录变化时间。

应用场景:适用于需要记录一定次数的维度变化,并且主要关注当前和最近一次变化情况的场景。比如在一个企业资源规划(ERP)系统的数据仓库中,对于原材料成本的记录,可能只需要记录当前成本和最近一次成本变化情况,以便快速比较成本波动。

优点:在一定程度上可以保留维度数据的变化历史,同时对于查询当前和最近一次变化比较方便。相比 Type 2,不会使行数据过多增加,对存储成本和查询性能的影响相对较小。

缺点:如果维度数据变化频繁,会导致维度表的列数不断增加,使表结构变得复杂。而且这种方式不能很好地处理多次以上的变化情况,当需要记录更多变化历史时会受到限制。

5、Type 4(历史表和当前表分离)

定义:这种类型是将维度表分为历史表和当前表。当前表存储维度数据的最新状态,历史表用于存储维度数据变化的历史记录。当维度数据发生变化时,更新当前表中的数据,同时将旧数据以及变化相关的信息(如变化时间、变化原因等)插入到历史表中。

举例:

以供应商维度为例,在当前供应商表中存储供应商的最新联系信息、产品供应范围等信息。当供应商的某些信息发生变化,如联系方式改变,将新的联系方式更新到当前供应商表,同时把旧的联系方式、变化时间等信息插入到供应商历史表中。

应用场景:适用于对当前数据和历史数据的查询频率都较高,且希望对两者进行明确区分以方便管理和查询的场景。例如,在大型零售企业的数据仓库中,对于供应商维度,采购部门经常需要查询当前供应商的最新信息来进行采购决策,而审计部门则更关注供应商信息的历史变化情况,通过这种方式可以更好地满足双方的需求。

优点

1、清晰地分离了当前数据和历史数据,使得对两种数据的管理和查询都更加高效。对于只关心当前维度状态的操作(如实时业务处理)可以直接在当前表中进行,而历史数据分析则在历史表中进行,互不干扰。

2、可以灵活地设计历史表的结构,以更好地存储和查询历史数据变化的细节,比如添加更多的元数据(如变化原因、操作人等)来丰富历史记录。

缺点

1、需要维护两个表,增加了数据仓库架构的复杂性和维护成本。包括数据的插入、更新操作需要同时涉及两个表,容易出现数据不一致的情况。

2、在进行一些跨越当前和历史数据的复杂查询时,可能需要关联两个表,这会增加查询的复杂性和时间成本。

了解更多数据仓库与数据集成关干货内容请关注>>>FineDataLink官网

免费试用、获取更多信息,点击了解更多>>>体验FDL功能


http://www.mrgr.cn/news/71259.html

相关文章:

  • PostgreSQL 数据加密和数据解密
  • 【前端面试系列】JavaScript闭包
  • python opencv3
  • 关于在VS中使用Qt不同版本报错的问题
  • 【Python】爬虫通过验证码
  • Redis中的过期删除与内存淘汰
  • 链动3+1:创新商业模式引领社交电商新潮流
  • 【全栈开发平台】全面解析 StackBlitz 最新力作 Bolt.new:AI 驱动的全栈开发平台
  • 用 Python 写了一个天天酷跑(附源码)
  • 将webserver部署到公网(使用阿里云服务器)
  • 摄像机实时接入分析平台LiteAIServer视频智能分析软件裸土检测算法实施及应用
  • API架构解说
  • 线程状态转换?创建线程的几种方式?线程如何停止?
  • 分享一些Kafka集群优化的最佳实践?
  • 社交媒体的隐私新标准:Facebook的数据保护策略
  • MySQL:left join后用on与where的区别
  • epoch,batch_size等参数的理解
  • Qt 正则表达式提取文件中的 USB 设备 ID
  • 如何一步步获得文心一言API密钥
  • 350. 两个数组的交集 II
  • 【网络】HTTP 协议
  • AI绘画如何变现,掌握这几个方法实现经济自由!
  • Day 62 || prim算法、kruskal算法
  • Select,poll,epoll和IO多路复用和NIO
  • 手写JDK动态代理实现AOP
  • 深入浅出 ChatGPT 底层原理:Transformer