一、事务性事实表
- 事务型事实表是每天导入新增。
- 事实表在导入时建模策略:
①挑选感兴趣的事实业务
②确认粒度
③挑选维度
④选择度量- 事务型事实表 中的事实记录只会新增,不会修改! 从Mysql同步的数据,都是增量同步! 导入到ODS层!
导入DWD层,只需要从ODS层,取出当天导入的新增的数据即可!
二、周期型快照事实表
- 由于周期型快照事实表的数据是会发生变化,所以导增量不合适。
- 每天做一次快照,导入的数据是全量,区别于事务型事实表是每天导入新增。
- 周期型快照事实表劣势:存储的数据量会比较大。
- 解决方案:周期型快照事实表存储的数据比较讲究时效性,时间太久了的意义不大,可以删除以前的数据。
- 周期型快照事实表 用来记录一个事实在某个周期结束时的快照状态!
- ODS层:全量同步
好处:方便
坏处:同步时间长,存在数据冗余占用(缩短数据存储的周期)!- 如果数据量大: ODS应该同步新增和变化的数据!
2020-08-08 同步,同步的是2020-08-08新加入购物车的记录和对购物车的数据进行修改的记录!
dwd: 截至到2020-08-08,所有用户购物车状态的全量快照!
需要先取出 2020-08-07之前,DWD层所有购物车的状态!
和
ODS层 2020-08-08新增和变化的数据 进行合并,取时间最新的!
三、累积型快照事实表
- 累积型快照事实表通常也会使用分区表,但是分区字段会使用 事实生命周期中,最早的时间!
事实发生的时间,作为分区字段!- 总结精简版:
①查出老数据(dwd层)中哪些分区的数据,在今天发生了变化
②根据变化的分区日期,查询老数据 old
③查询当天新的数据 new
④old full join new 新老交替
⑤将合并后的结果写入分区!
四、用户维度表(拉链表)
- 用户表中的数据每日既有可能新增,也有可能修改,但修改频率并不高,属于缓慢变化维度,此处采用拉链表存储用户维度数据。
- 拉链表,记录每条信息的生命周期,一旦一条记录的生命周期结束,就重新开始一条新的记录,并把当前日期放入生效开始日期。
如果当前信息至今有效,在生效结束日期中填入一个极大值(如9999-99-99 )。- 拉链表适合于:数据会发生变化,但是大部分是不变的。(即:缓慢变化维)
比如:用户信息会发生变化,但是每天变化的比例不高。如果数据量有一定规模,按照每日全量的方式保存效率很低。 比如:1亿用户*365天,每天一份用户信息。(做每日全量效率低)