量表、全量表、快照表以及拉链表的应用场景及优缺点详解,拉链表的使用方法

增量表、全量表、快照表以及拉链表的应用场景及优缺点详解

增量表、全量表、快照表以及拉链表的应用场景及优缺点详解,拉链表的使用方法

在我们做数据分析时,要准确的获取数据,数据来源于数据库表,想要获取数据就要了解库表的存储策略,存储位置,存储形式等信息。

首先维度表、事实表的定义及区分

维度表
维度表:业务过程的业务实体 用来存储维度数据的表,即描述性数据,如:商品,客户,订单,地理位置等,维度表的每一行通常表示一个唯一的维度值。通常有一个主键来与事实表外建进行关联,事实表通过维度表进行关联,在数据仓库中为星型模型
事实表
事实表:业务内特定事件的数据(大量的行) ,存储度量数据的表,即事务性数据,例如订单数量、销售额、运输成本等,事实表的每一行通常表示一个事实事件,例如某一天的销售额、某个客户的订单数量等。事实表通常具有多个外键,用于关联维度表
事实表的常见分类包括: 全量表 、 增量表 、 流水表 、拉链表

全量表 、快照表、 增量表 、 流水表 、拉链表

表的命名规范:表中常见的i、s、a,分别代表增量表、快照表、全量表
1、全量表
全量表: 记录更新周期内的全量数据,无论数据是否有变化都需要记录;
全量表的典型特征
存储的是截至到目前最新状态的全部记录,有无变化,都要上报;
每次上报的数据都是所有的数据(变化的 + 没有变化的);
没有分区,所有数据存储在一个分区中。比如:今天是20号,那么全量表里面包含的数据是截至19号的所有数据,每次往全量表里面写数据都会覆盖之前的数据,所以全量表不能记录历史的数据情况,只有截止到当前最新的、全量的数据。
2 、增量表
增量表: 记录更新周期内的新增数据,即在原表中数据的基础上新增本周期内产生的新数据,没变化的数据不会被记录;
增量表的典型特征
增量表是相对于全量表而言的,增量表是每次把新增的数据追加到原表中;
记录每次增加的量,而不是总量(只报变化量,无变化不用报);
存在分区,增量表中每次新增的数据单独存储在一个分区中,历史分区中的数据记录不发生变化。例如:从19号到0号新增了哪些数据,改变了哪些数据,这些都会存储在增量表在20号的分区里面。
3 、快照表
快照表: 就是截至过去某个时间点的所有数据,主要对过去某个时间点的数据状态进行记录,即:快照表主要存储的是历史状态的表,每个快照的数据单独存储在一个分区中。比如:一些用户特征的表、标签表、订单状态表

快照表的适用场景
为解决全量表无法查询历史数据的情况,引入了快照表。快照表是有时间分区的,每个分区里的数据都是分区时间对应的前一天的所有全量数据,比如:当前数据表有3个分区,18号、19号、20号。其中,18号分区里面的数据就是从历史到17号的所有数据,以此类推。

快照表的典型特征:按照时间分区进行数据存储;

快照表的优缺点:
优点:可实现对历史数据的查询;
缺点:数据量大时,由于每个分区都存储了许多重复数据,非常浪费存储空间。

有些快照表某分区的数据是从历史到此分区前一天的所有数据,如:19号分区中的数据是从历史到18号的所有数据, 有些快照表某分区的数据是从历史到此分区的所有数据,如:19号分区中的数据是从历史到19号的所有数据。

增量表和快照表中【分区时间】分别代表什么?

快照表中时间分区 t t t 日,实际代表第 t + 1 t+1 t+1日,例如:快照表中的19号分区和20号分区实际时间分别对应20号和21号),它俩的数据相减就是实际时间21号到20号有变化的、增加的数据,也就相当于增量表里面20号分区的数据。
增量表中时间分区 t t t 日,实际代表第 t t t 日。
流量和存量的定义与区别:

流量: 是指在一定时间内的增量,流量一般设计成增量表(日报-常用、月报);
存量: 是指在一定时间内的总量,存量一般设计成总量表;
流量和存量的区别: 流量是增量,存量是总量;
4 、流水表
流水表: 对于表的每一个修改都会记录,可以用于反映实际记录的变更。
流水表的典型特征
流水表是存储了所有修改记录的表。
流水表是每天的交易形成的历史;
流水表用于统计业务相关情况;
流水表与拉链表也有些类似,不同的是拉链表可以根据拉链粒度存储数据,也就是只存储特定维度的数据变化记录;而流水表存储的是每一个修改记录( 拉链表与流水表的区别)。
5、 拉链表

拉链表: 是一种维护历史状态,以及最新状态数据的一种表,记录数据从开始一直到当前状态所有变化的信息。 有效节省存储空间,引入了拉链表。
拉链表的典型特征
记录一个事物从开始,一直到当前状态的所有变化的信息;
拉链表每次上报的都是历史记录的最终状态,是记录在当前时刻的历史总量;
拉链表通常是对账户信息的历史变动进行处理保留的结果;
拉链表用于统计账户及客户的情况;
拉链表和增量表的共同点:表结构基本一样。
与快照表类似,但拉链表存储的是在快照表的基础上去除了重复状态的数据,也就是说一些不变的信息在快照表中每个分区都会存储一份,可能造成存储浪费,而使用拉链表在更新频率和比例不是很大的情况下会十分节省存储。( 拉链表与快照表的区别)。
拉链表的封链时间可以是2999,3000,9999等等比较大的年份;

拉链表的适用场景

当数据量较大,表中某些字段有变化,但变化频率不是很高,而业务需求又需要统计这种变化状态,如果每天存储一份全量数据,不仅浪费存储空间,且不便于业务统计;这时,拉链表的作用就体现出来了,既节省空间,又满足需求。

在数据仓库的数据模型设计过程中,经常会遇到这样的需求:
数据量比较大;表中的部分字段会被update,例如:用户的地址、产品的描述信息、订单的状态等等;
业务需要:(1)查看某一个时间点或者时间段的历史快照信息,比如:查看某一个订单在历史某一个时间点的状态;(2)统计订单信息的变化频次,比如:查看某一个用户在过去某一段时间内,更新过几次等等;
信息变化的比例和频率不是很大,比如:总共有1000万会员,每天新增和发生变化的有10万左右;此时,如果对张表每天都保留一份全量,那么每次全量中会保存很多不变的信息,这对存储是极大的浪费;拉链表,既能满足反应数据的历史状态,又能最大程度地节省存储空间。

拉链表的优缺点:
优点:(1)保留了数据的历史信息;(2)节省存储空间;
缺点:同步和回滚逻辑复杂;
**修复拉链表的方式:**开始日期大于修数起始日期的删除,把结束日期大于等于修数日期的更新成21001231;例如删除stt_data>=20240219,更新end_data>=20240218 的数据为21001231
拉链表的使用方法

准备好两个表:全量表和增量表(备注:(1)全量表记录数据的历史状态;(2)增量表记录数据的增量信息);
更新流程:关联全量表和增量表,修改全量表的增量表中出现的数据行的失效时间,即:合并增量表和修改后的全量表;
具体:新增数据和修改数据
new_data:被清洗过的新来源数据 ;U_Old :update变动前的目标数据 ;U_New :update变动后的目标数据 ;A_New : add新增的目标数据 ;
new_data加工,加工来源贴源层表数据,起始日期跑批日期,终止日期最大有效日期;
**U_Old加工:**来源于目标表(历史),目标表跟new_data主键关联,限制其他字段(发生变化的字段)不等值关联,限制目标表的终止日期为最大有效日期(即有效数据),终止日期取得是跑批日期的前一天。
**U_New 加工 :**全来源于new_data,限制主键在u_old里边的数据
**A_New 加工 :**全来源于new_data,限制主键不在目标表(限制有效数据,即终止日期为最大有日期)里边的数据,新增数据
然后删除历史表旧记录 :删除目标表(有效数据),与u_old主键关联
插入历史表陈旧记录和更新记录,完成拉链,依次往目标表插入u_old,u_new,a_new的数据

  • 26
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值