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

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

什么是缓慢变化维

维度

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

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.lryc.cn/news/299666.html

相关文章:

  • free pascal:fpwebview 组件通过JSBridge调用本机TTS
  • C语言静态库深入剖析
  • A股上市以来涨幅排行榜
  • 鸿蒙开发系列教程(十八)--页面内动画(1)
  • Web基础01-HTML+CSS
  • Linux命令行全景指南:从入门到实践,掌握命令行的力量
  • 蓝桥杯嵌入式第11届真题(完成) STM32G431
  • ChatGPT高效提问—prompt实践(教师助手)
  • AI绘画作品的展示和变现-2
  • Linux---网络套接字
  • 前端vue 数字 字符串 丢失精度问题
  • 智能汽车行业产业研究报告:4D成像毫米波雷达—自动驾驶最佳辅助
  • docker 3.1 镜像
  • 如何在极低成本硬件上落地人工智能算法 —— 分布式AI
  • 机器学习:ROC曲线笔记
  • 【lesson54】线程互斥
  • Android14音频进阶:MediaPlayerService如何启动AudioTrack 上篇(五十五)
  • K8sGPT 的使用
  • 《CSS 简易速速上手小册》第4章:视觉美学(2024 最新版)
  • 设计模式浅析
  • Linux环境中的git
  • 单测的思路
  • Linux内核与驱动面试经典“小”问题集锦(6)
  • 【zabbix】(四)-钉钉告警企业微信配置
  • python-自动化篇-办公-一键将word中的表格提取到excel文件中
  • C#,数值计算,矩阵的行列式(Determinant)、伴随矩阵(Adjoint)与逆矩阵(Inverse)的算法与源代码
  • 人工智能|推荐系统——基于tensorflow的个性化电影推荐系统实战(有前端)
  • Hive SQL编译成MapReduce任务的过程
  • 【C++】快速上手map、multimap、set、multiset
  • 【分享】图解ADS+JLINK调试ARM