学习笔记之数据仓库的各种表
预热:
我们先从几个物理概念入手理解什么是流量,存量,增量
(1)存量:系统在某一时点时的所保有的数量;
(2)流量:是指在某一段时间内流入/流出系统的数量
(3)增量:是指在某一段时间内系统中保有数量的变化
(4)增量 = 流入量--流出量
(5)本期期末存量 = 上期期末存量+本期内增量
全量表:每天的所有的最新状态的数据
全量表没有分区,表中的数据时前一天的所有数据,比如说今天是24号,那么全量表里面拥有的数据是23号的所有数据,每次往全量表里面写数据都会覆盖之前的数据,所以全量表不能记录历史的数据情况,只有截止到当前最新的、全量的数据。
(1)全量表,有无变化,都要报
(2)每次上报的数据都是所有的数据(变化的+没有变化的)
快照表
那么要能查到历史数据情况又该怎么办呢?这个时候快照表就派上用途了,快照表是有时间分区的,每个分区里面的数据都是分区时间对应的前一天的所有全量数据,比如说当前数据表有3个分区,24号,25号,26号。其中,24号分区里面的数据就是从历史到23号的所有数据,25号分区里面的数据就是从历史到24号的所有的数据,以此类推。
但是这样也有一个问题,就是数据量大的时候,其实每个分区都存储了许多重复的数据,非常的浪费存储空间。
于是乎,拉链表就出来了。
在介绍拉链表之前,我们先介绍一下增量表。
增量表:新增数据,增量数据是上次导出之后的新数据
增量表,就是记录每天新增数据的表,比如说,从24号到25号新增了哪些数据改变了哪些数据,这些都会存储在增量表的25号分区里面。上面说的快照表的25号分区和24号分区(都是t+1),实际时间分别对应26号和25号),它俩的数据相减就是实际时间25号到26号有变化的、增加的数据,也就相当于增量表里面25号分区的数据。
(1)记录每次增加的量,而不是总量
(2)流量是指在一定时间内的增量
(3)流量一般设计成增量表(日报-常用、月报);
(4)流量和存量的区别:流量是增量;存量是总量;
(5)增量表,只报变化量,无变化不用报
拉链表
拉链表,它是一种维护历史状态,以及最新状态数据的一种表。拉链表也是分区表,有些不变的数据或者是已经达到状态终点的数据就会把它放在分区里面,分区字段一般为开始时间:start_date和结束时间:end_date。一般在该条有效的数据,它的end_date是大于等于改天的日期的。获取某一天全量的数据,可以通过表中的start_date和end_date来做筛选,选出固定某一天的数据。例如我想截止到20190813的全量数据,其中where过滤条件就是where start_date<='20190813' and end_date>='20190813'
(1)记录一个事物从开始,一直到当前状态的所有变化的信息;
(2)拉链表每次上报的都是历史记录的最终状态,是记录在当前时刻的历史总量;
(3)当前记录存的是当前时间之前的所有历史记录的最后变化量(总量);
(4)存量是在某一时刻的总量;
(5)存量一般设计成拉链表(月报-常用、日报)
(6)流量和存量的区别:流量是增量;存量是总量;
(7)封链时间可以是2999,3000,9999等等比较大的年份;拉链表到期数据要报0;
(8)拉链表和增量表的共同点:表的结构基本一样。
在有些情况下,为了保持历史的一些状态,需要用拉链表来做,这样做的目的可以在保留所有状态的情况下可以节省空间。
拉链表适用于以下几种情况吧 数据量有点大,表中某些字段有变化,但是呢变化的频率也不是很高,业务需求呢又需要统计这种变化状态,每天全量表一份,有点不太现实,不仅浪费了存储空间,有时可能业务统计也有点麻烦,这时,拉链表的作用就体现出来了,既节省空间,又满足了需求。