缓慢变化维 常用的处理方法

什么是缓慢变化维

维度

在数仓中,表往往会被划分成两种类型,一种是 事实表,另一种是维度表,举个例子,比如说:

2024年2月14日,健鑫在12306上买了两张火车票,每张火车票400元,一共花了800元

在这个过程中,可以这样划分:

事实:买火车票、买两张、一张400、一共800;也就是买了多少东西、花了多少钱

维度:2024年2月14日、健鑫、12306、火车票;也就是在哪买的、谁买的,啥时候买的

缓慢变化维

我们会将分析的各种角度存储在维度表当中,但是维度数据是会发生变化的,而且时间跨度非常久

比如部门的变更,一个员工最初是在部门a工作,后面由于一些原因转到了部门b

这是缓慢变化维的一种可能

这种维度变化,业务系统往往不会保存历史数据,但是站在分析的角度上,我们要保留这种变化的痕迹

处理方法

重写

和业务数据保持一致,直接更新到最新的数据

这种方法可以用于以下两种情况:

  1. 必须正确的数据。比如说身份证号,这种数据需要更改只能证明之前数据错了

  2. 不需要考虑历史变化。比如用户更换头像,这种历史头像往往不具备分析价值

优点: 省事(直接update就行了)、节省内存空间(不需要保存历史数据)

缺点: 不保存历史数据

添加新行

如果只需要保存历史数据,可以使用更新时间戳的形式记录新值,也就是拉链表

在这里随便找了一个制作拉链表过程的图片

自然键即指有业务意义的唯一ID,例如数据库ID、表ID、用户ID等。代理键则可以简单理解为该表的自增ID值

在上面图片中ID就是自然键,开始和结束时间就是代理键

维度值更新之后可以根据代理键就可以获取最新或者历史的数据

增加属性

如果分析的场景同时包含旧值和新值,那么前两种方法就不能满足要求

比如部门的名称突然出现变化,但是想暂时保留旧名称用于同比/环比的分析

也就是,通过新名称可以进行分析,同时通过旧名称也可以进行分析,好像什么都没发生过

如果使用第一个方法,只有新值无法满足用旧值进行分析的场景

如果使用第二个方法,旧的事实保存旧的维度,新的事实保存新的维度,满足不了上面任何一个场景

这时可以新增一个字段来保存新值

idnamedept_2023dept_2024
1jx部门a部门aa

总结

本文写了缓慢变化维最常见的处理方法,但是不包含所有的方法,希望可以帮助到你

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/386311.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

TinUI v5预发布记录

TinUI v5预发布记录 前言新控件滚动选择框菜单按钮 新样式pre1pre2pre3 新功能导入字体文件 前言 TinUI是一个从2021年正式开始并一直维护到现在的小项目,中间经过了四代版本的更新。因为一些原因,2023年,TinUI-4后更新较少。 TinUI发展历程…

jmeter-问题二:JMeter进行文件上传时,常用的几种MIME类型

以下是一些常用的MIME类型及其对应的文件扩展名: 文本类型: text/plain: 通常用于纯文本文件,如 .txt 文件。 text/html: 用于HTML文档,即 .html 文件。 application/msword: Microsoft Word文档,即 .doc 和 .docx 文件。 图像…

英伟达市值超越谷歌!老黄隔空回应Altman的巨资筹款计划:没必要,真的没必要!

凭借算力上的霸主地位,英伟达正稳步成为科技领域的下一个巨头,在不久的15个月前,英伟达的市值还不足3000亿美元。然而,截至昨日,英伟达股价飙升使其市值达到了1.83万亿美元,超越了Alphabet(谷歌…

传输层DoS

传输层是国际标准化组织提出的开放系统互联参考模型(OSI)中的第四 层。该层协议为网络端点主机上的进程之间提供了可靠、有效的报文传送服务。 平时我们所谈论的拒绝服务攻击大多是基于TCP的,因为现实中拒绝服务的对象 往往都是提供HTTP服务的…

Java类加载

Java类加载机制是Java虚拟机(JVM)的一个核心组成部分,它负责将Java类从不同的数据源(如本地文件系统、网络等)加载到JVM中,并为之生成对应的java.lang.Class对象。理解Java类加载机制对于深入理解Java运行时…

Python中多种生成随机密码超实用实例

前言 密码是信息安全的基石,它用于保护我们的账户、数据和隐私。为了确保密码足够强大,需要生成随机密码。在本文中,将讨论多种Python方法,用于生成随机密码的实用示例和技巧。 目录 ​编辑 前言 密码生成的要求 使用secrets…

创新S3存储桶检索:Langchain社区S3加载器搭载OpenAI API

在瞬息万变的数据存储和处理领域,将高效的云存储解决方案与先进的 AI 功能相结合,为处理大量数据提供了一种变革性的方法。本文演示了使用 MinIO、Langchain 和 OpenAI 的 GPT-3.5 模型的实际实现,重点总结了存储在 MinIO 存储桶中的文档。 …

C++ 音视频原理

本篇文章我们来描述一下音视频原理 音视频录制原理: 下面是对这张思维导图的介绍 摄像头部分: 麦克风采集声音 摄像头采集画面 摄像头采集回来的数据可以用RGB也可以用YUV来表示 图像帧帧率 一秒能处理多少张图像 图像处理 :调亮度 图像帧队列 :意思是将数据取…

【51单片机】LCD1602(江科大)

1.LCD1602介绍 LCD1602(Liquid Crystal Display)液晶显示屏是一种字符型液晶显示模块,可以显示ASCII码的标准字符和其它的一些内置特殊字符,还可以有8个自定义字符 显示容量:162个字符,每个字符为5*7点阵 2.引脚及应用电路 3.内部结构框图 屏幕: 字模库:类似于数码管的数…

【JVM篇】什么是jvm

文章目录 🍔什么是Java虚拟机🛸Java虚拟机有什么用🌹Java虚拟机的功能🎈Java虚拟机的组成 🍔什么是Java虚拟机 JVM指的是Java虚拟机,本质上是一个运行在计算机上的程序,可以运行 Java字节码文件…

微信小程序开发学习笔记《17》uni-app框架-tabBar

微信小程序开发学习笔记《17》uni-app框架-tabBar 博主正在学习微信小程序开发,希望记录自己学习过程同时与广大网友共同学习讨论。建议仔细阅读uni-app对应官方文档 一、创建tabBar分支 运行如下的命令,基于master分支在本地创建tabBar子分支&#x…

Spring Boot3自定义异常及全局异常捕获

⛰️个人主页: 蒾酒 🔥系列专栏:《spring boot实战》 🌊山高路远,行路漫漫,终有归途。 目录 前置条件 目的 主要步骤 定义自定义异常类 创建全局异常处理器 手动抛出自定义异常 前置条件 已经初始化好一个…

17 ABCD数码管显示与动态扫描原理

1. 驱动八位数码管循环点亮 1.1 数码管结构图 数码管有两种结构,共阴极和共阳极,ACX720板上的是共阳极数码管,低电平点亮。 1.2 三位数码管等效电路图 为了节约I/O接口,各个数码管的各段发光管被连在一起,通过sel端…

【Spring框架】Spring事务同步

目录 一、什么是Spring事务同步 二、 事务同步管理器 2.1 TransactionSynchronizationManager事务同步管理器 2.1.1 资源同步 2.1.2 事务同步 2.1.3 总结 三、事务同步管理器保障事务的原理 四、spring事务为何使用TransactionSynchronizationManager spring源码实现 …

详解CC++内存管理(new和delete)

文章目录 写在前面1. C&C内存分布2. C语言中动态内存管理方式:malloc/calloc/realloc/free3. C内存管理方式(语法)3.1 new/delete操作内置类型3.2 new和delete操作自定义类型 4. new和delete的实现原理4.1 operator new与operator delete…

企业架构师的人格特质

L - Learning 持续学习的能力A - Abstracting 概念抽象的能力C1 - Connecting 联结事物的能力C2 - Compromising 平衡折衷的能力D - Decisioning 果断决策的能力 参考文章的链接

再利用系统盘时,如何删除恢复分区(Recovery Partition)

系统盘有一个Recovery Partition,记录了重要的系统信息,不能删除。 Windows 10的 Disk Managment 不提供用户删除这个Partition的选项。 近日我插入一块原系统盘,Format后作为DataDisk,此时需要删除这块硬盘上的RecoveryPartition…

Redis中内存淘汰算法实现

Redis中内存淘汰算法实现 Redis的maxmemory支持的内存淘汰机制使得其成为一种有效的缓存方案,成为memcached的有效替代方案。 当内存达到maxmemory后,Redis会按照maxmemory-policy启动淘汰策略。 Redis 3.0中已有淘汰机制: noevictionall…

配置 JDK 环境变量(最简单)

前言 在通过控制台使用 javac 命令编译 ,java 命令运行 Java 程序时,会出现识别不了这两个命令的情况,如下所示: 这是没有配置环境变量导致的 在控制台输入的命令,操作系统会去一些特定的目录中去找,看看是…

HCIA-HarmonyOS设备开发认证V2.0-轻量系统内核内存管理-动态内存

目录 一、动态内存运行机制二、动态内存开发流程三、动态内存使用说明四、动态内存核心算法五、动态内存接口六、代码分析(待续...)坚持就有收获 一、动态内存运行机制 动态内存管理,即在内存资源充足的情况下,根据用户需求&…