千亿级数仓缓慢变化维

2024-03-04 01:50
文章标签 变化 缓慢 级数 千亿

本文主要是介绍千亿级数仓缓慢变化维,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 4 缓慢变化维
    • 4.1 什么是缓慢变化维(SCD)
    • 4.2 SCD问题的几种解决方案
    • 数仓项目-拉链表技术介绍
    • 商品历史快照案例
      • 方案一:快照每一天的数据到数仓
      • 方案一:MySQL到Hive数仓代码实现
      • 方案二:使用拉链表保存历史快照
      • 方案二:拉链表存储历史快照代码实现
      • 查询拉链表

4 缓慢变化维

4.1 什么是缓慢变化维(SCD)

1、缓慢变化维简介

  • 缓慢变化维,简称SCD(Slowly Changing Dimensions)
  • 一些维度表的数据不是静态的,而是会随着时间而缓慢地变化(这里的缓慢是相对事实表而言,事实表数据变化的速度比维度表快)
  • 这种随着时间发生变化的维度称之为缓慢变化维
  • 把处理维度表数据历史变化的问题,称为缓慢变化维问题,简称SCD问题

2、举例说明
例如:用根据用户维度,统计不同出生年份的消费金额占比。(80后、90后、00后)。
而期间,用户可能去修改用户数据,例如:将出生日期改成了 1992年。此时,用户维度表就发生了变化。当然这个变化相对事实表的变换要慢。但这个用户维度表的变化,就是缓慢变化维。
在这里插入图片描述

4.2 SCD问题的几种解决方案

以下为解决缓慢变化维问题的几种办法:

  • 保留原始值
  • 改写属性值
  • 增加维度新行
  • 增加维度新列
  • 添加历史表

SCD解决方案 - 保留原始值
某一个属性值绝不会变化。事实表始终按照该原始值进行分组。例如:

  • 出生日期的数据,始终按照用户第一次填写的数据为准

SCD解决方案 - 改写属性值

  • 对其相应需要重写维度行中的旧值,以当前值替换。因此其始终反映最近的情况
  • 当一个维度值的数据源发生变化,并且不需要在维度表中保留变化历史时,通常用新数据来覆盖旧数据。这样的处理使属性所反映的中是最新的赋值。
    • 用户维度表
      在这里插入图片描述
  • 这种方法有个前提,用户不关心这个数据的变化
  • 这样处理,易于实现,但是没有保留历史数据,无法分析历史变化信息

SCD解决方案 - 增加维度新行

  • 数据仓库系统的目标之一是正确地表示历史。典型代表就是拉链表。
    保留历史的数据,并插入新的数据。
    用户维度表
    在这里插入图片描述

SCD解决方案 - 增加维度新列

  • 用不同的字段来保存不同的值,就是在表中增加一个字段,这个字段用来保存变化后的当前值,而原来的值则被称为变化前的值。总的来说,这种方法通过添加字段来保存变化后的痕迹。
    用户维度表
    在这里插入图片描述

SCD解决方案 - 使用历史表

  • 另外建一个表来保存历史记录,这种方式就是将历史数据与当前数据完全分开来,在维度中只保存当前最新的数据。
    在这里插入图片描述
    这种方式的优点是可以同时分析当前及前一次变化的属性值,缺点是只保留了最后一次变化信息。

数仓项目-拉链表技术介绍

数据仓库的数据模型设计过程中,经常会遇到这样的需求:
1.表中的部分字段会被update,例如:

  • 用户的地址,产品的描述信息,品牌信息等等;

2.需要查看某一个时间点或者时间段的历史快照信息,例如:

  • 查看某一个产品在历史某一时间点的状态
  • 查看某一个用户在过去某一段时间内,更新过几次等等

3.变化的比例和频率不是很大,例如:

  • 总共有1000万的会员,每天新增和发生变化的有10万左右

商品历史快照案例

需求:
在这里插入图片描述
商品的状态,会随着时间推移而变化,我们需要将商品的所有变化的历史信息都保存下来。如何实现呢?

方案一:快照每一天的数据到数仓

该方案为:

  • 每一天都保存一份全量,将所有数据同步到数仓中
  • 很多记录都是重复保存,没有任何变化

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

方案一:MySQL到Hive数仓代码实现

MySQL&Hive初始化

  • 1、在MySQL demo库中 创建表
-- 创建数据库
create database if not exists demo;
​
-- 创建商品表
create table if not exists `demo`.`t_product`(
goods_id varchar(50), -- 商品编号goods_status varchar(50), -- 商品状态createtime varchar(50), -- 商品创建时间modifytime varchar(50) -- 商品修改时间
);
  • 2、在Hive中 demo库创建表
-- 创建表
create database if not exists `demo`;
​
-- 创建ods层表
create table if not exists `demo`.`ods_product`(goods_id string,        -- 商品编号goods_status string,    -- 商品状态createtime string,      -- 商品创建时间modifytime string       -- 商品修改时间
)
partitioned by (dt string)
row format delimited fields terminated by ',' stored as TEXTFILE;
​
-- 创建dw层表
create table if not exists 

这篇关于千亿级数仓缓慢变化维的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/771648

相关文章

你的华为手机升级了吗? 鸿蒙NEXT多连推5.0.123版本变化颇多

《你的华为手机升级了吗?鸿蒙NEXT多连推5.0.123版本变化颇多》现在的手机系统更新可不仅仅是修修补补那么简单了,华为手机的鸿蒙系统最近可是动作频频,给用户们带来了不少惊喜... 为了让用户的使用体验变得很好,华为手机不仅发布了一系列给力的新机,还在操作系统方面进行了疯狂的发力。尤其是近期,不仅鸿蒙O

如何评价Ubuntu 24.04 LTS? Ubuntu 24.04 LTS新功能亮点和重要变化

《如何评价Ubuntu24.04LTS?Ubuntu24.04LTS新功能亮点和重要变化》Ubuntu24.04LTS即将发布,带来一系列提升用户体验的显著功能,本文深入探讨了该版本的亮... Ubuntu 24.04 LTS,代号 Noble NumBAT,正式发布下载!如果你在使用 Ubuntu 23.

vue如何监听对象或者数组某个属性的变化详解

《vue如何监听对象或者数组某个属性的变化详解》这篇文章主要给大家介绍了关于vue如何监听对象或者数组某个属性的变化,在Vue.js中可以通过watch监听属性变化并动态修改其他属性的值,watch通... 目录前言用watch监听深度监听使用计算属性watch和计算属性的区别在vue 3中使用watchE

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者

c++的静态变化!

静态成员   对于非静态成员,一个类的每个对象都自己存有一个副本,每个对象根据自己拥有的非静态的数据成员来区别于其他对象。而静态成员则解决了同一个类的多个对象之间数据和函数的共享问题。   静态数据成员   静态数据成员的作用是:实现同一类的不同对象之间的数据共享。   #include<IOSTREAM>   using namespace std;   class Po

2409atl,atl3.0到7.0的变化

原文 本文不介绍新的ATL7服务器类和属性.这不是一个完整的列表,只是我目前找到的. 串 串转换宏有一些限制.它从栈中分配内存,可能会在大串时溢出栈.函数退出时,释放该串,而不是在函数内引入的域内释放. 它使用过时OLE2ANSI定义.如果你查看MSDN上对_alloca(来转换)的注意,它说它在SEH或C++EH中使用时有限制. 如,看一下ATL3的串转换宏: USES_CONVER

包拯断案 | 数据库从库GTID在变化 为何没有数据写入@还故障一个真相

提问:作为DBA运维的你是否遇到过这些烦恼 1、数据库从库复制链路如何正确配置表过滤信息? 2、数据库从库的GTID在变化,实际却没有数据写入,究竟是什么原因? 心中有章,遇事不慌 作为DBA的你,遇到问题无从下手,除了在问题面前徘徊,还能如何选择?如果你一次或多次遇到该问题还是 无法解决,又很懊恼,该如何排忧呢?关注公众号,关注《包拯断案》专栏,让小编为你排忧解难~ #包拯秘籍#

2020年SEO行业发展变化和趋势分析!

一、搜索引擎算法发展轨迹 第一阶段:人工目录(1997年-2001年“雅虎早期搜索模式”); 第二阶段:文本分析(2001年-2004年“以关键词和背景颜色一样,堆积大量关键词,就会有非常好的排名; 第三阶段:链接分析(2004年-2009年“以反向链接为核心算法的阶段”),这时行业内有句话是内容为王,外链为皇; 第四阶段:智能分析(2009年-现在“以满足用户人性化需求的用户浏览行为分析

保姆级教学:OC监听网络状态变化 Reachability监听网络变化 ios网络变化

本文主要讲解了,在oc开发中,怎么去使用代码进行网络监听,十分的通俗易懂。 首先,在xcode工程中导入SystemConfiguration框架。 然后导入Reachability.h文件。 Reachability文件 点击下载,也可以按照如下内容创建对应的文件。 Reachability.m //文件名Reachability.m/*Copyright (C) 2016 App

快手HBase在千亿级用户特征数据分析中的应用与实践

声明:本文的原文是来自Hbase技术社区的一个PPT分享,个人做了整理和提炼。大家注意哈,这种会议PPT类的东西能学习到的更多的是技术方案和他人在实践过程中的经验。希望对大家有帮助。 背景 快手每天产生数百亿用户特征数据,分析师需要在跨30-90天的数千亿特征数据中,任意选择多维度组合(如:城市=北京&性别=男),秒级分析用户行为。针对这一需求, 快手基于HBase自主研发了支持bitmap转