首页 > 其他分享 >什么是数据仓库缓慢变化维?

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

时间:2024-11-12 16:50:45浏览次数:3  
标签:记录 数据 数据仓库 表中 维度 缓慢 变化

缓慢变化的维度(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功能

标签:记录,数据,数据仓库,表中,维度,缓慢,变化
From: https://blog.csdn.net/oOBubbleX/article/details/143708178

相关文章

  • 使用ob_tools包收集分析oceanbase数据库oracle租户缓慢sql语句
    概述1、手册目的:本手册旨在提供一种系统化的方法论,以便发现和分析慢SQL语句。通过使用ob_tools包,收集和分析在交付期间,应用程序在不同场景下进行压测时所产生的慢SQL语句,从而实现性能调优和优化建议。2、文档内容:本手册包含以下几个主要部分:1.ob_tools包内存储过程和函数介......
  • Dw修改网站首页 上传后没变化,如何解决Dreamweaver修改网站首页后上传没变化的问题
    如果在使用Dreamweaver修改网站首页后上传没有变化,可以通过以下步骤进行排查和解决:检查文件路径:确保你修改的文件路径正确。在Dreamweaver中,打开文件管理器,确认文件路径与服务器上的路径一致。备份现有文件:在开始修改之前,确保备份当前的首页文件,可以在本地硬盘或云端存......
  • Python的GUI应用,用于实时监控屏幕区域的图片变化
         如何使用Python监控屏幕变化并截图 1、导入所需模块首先,我们需要导入一些Python模块,包括PIL(PythonImagingLibrary)、numpy、os和time。这些模块将帮助我们截取屏幕图像,并进行文件和时间相关的操作。fromPILimportImageGrab#导入ImageGrab模块,用......
  • localeStorage 当前标签页变化监听不到,只能监听不同标签页变化,自己写方法监听
     1.在utils中新建一个文件watchLocalStorage.tsexportdefaultfunctiondispatchEventStroage(){ constsignSetItem=localStorage.setItem localStorage.setItem=function(key,val){ letsetEvent=newEvent('setItemEvent') setEvent.key=key set......
  • 【数据仓库】
    1、概述数据仓库,英文名称为DataWarehouse,可简写为DW或DWH。数据仓库是企业中用于集中存储和管理来自多个源的经过处理和组织的数据的系统。它为复杂的查询和分析提供了一个优化的环境,使得用户能够执行高级数据分析,以支持商业决策。数据在进入仓库之前经过清洗、转换和集......
  • docker对nginx.conf进行修改后页面无变化或页面报错
    可能是因为没有重启nginx容器可以执行dockerrestartnginx重启nginx试试引入了其他的配置文件本人安装的是docker默认的nginx,自带了一个default.conf的配置文件,并且在nginx.conf中还引入了这个文件,后面我还对nginx.conf添加了一个server并且端口号都是80,在打印dockerl......
  • 监听系统属性SystemProperties值变化
    基于Android-S一、实现逻辑相关文件:frameworks/native/libs/binder/Binder.cpp/system/core/libutils/misc.cpp/android/frameworks/base/core/java/android/os/SystemProperties.java/android/frameworks/base/core/jni/android_os_SystemProperties.cpp/android/frameworks/b......
  • 通过在 DIM 接入一个外部电容,使得启动时 DIM 端电压缓慢上升,这样 LED 的电流也缓慢上
    AP5165是一款连续电感电流导通模式的降压恒流源,用于驱动一颗或多颗串联LED输入电压范围从6V到30V,输出电流可调,最大可达1.2A。根据不同的输入电压和外部器件,AP5165可以驱动高达数十瓦的LED。AP5165内置功率开关,采用高端电流采样设置LED平均电流,通过DIM引脚可以接受模拟......
  • 三重时空变化模式的视频协调
    三重时空变化模式的视频协调5.4.1三重时空变化模式的视频协调概述视频协调是一项重要而具有挑战性的任务,旨在通过自动调整前景的外观以与背景协调,从而获得视觉上逼真的合成视频。受手动协调的短期和长期逐步调整过程的启发,提出了一个视频三重变换器框架,用于模拟视频中的三......
  • 织梦DedeCMS生成静态文件速度缓慢的解决方案
    问题:DedeCMS网站数据量大时,生成静态页面速度非常慢。解决方法:修改 inc_fun_SpGetArcList.php 文件:打开 include/inc/inc_fun_SpGetArcList.php 文件。找到以下代码:for($i=0;$i<$ridnum;$i++){if($tpsql=="")$tpsql.="And((".TypeGetSunID($reids[$i],$......