[Hive学习]缓慢渐变维与拉链表

一、缓慢渐变维介绍

        在数仓建模中数据一般分为维度跟指标,维度就是基本不变、固定的数据,比如年、月、日、住址、手机号、区域、门店等。维度可以根据变化剧烈程度主要分为无变化维度和变化维度,但大多数维度数据会随时间的迁移是缓慢变化的,也称为缓慢渐变维(SCD)。

        缓慢渐变维,即维度中的属性可能会随着时间发生改变,比如包含用户住址Address的DimCustomer维度,用户的住址可能会发生改变,进而影响业务统计精度。

        而在维度表中,会出现一些更新,比如增加了新的产品,或者产品的ID号码修改了,或者产品增加了一个新的属性,此时,维度表就会被修改或者增加新的记录行。这样,在数仓设计维度和使用维度的过程中,就要考虑到缓慢变化维度数据的处理

二、缓慢渐变维的分类

缓慢渐变维分为四种:SCD1、SCD2、SCD3、SCD4。

SCD1:不维护历史变更行为, 直接对过去数据进行覆盖。(仅适用于对错误数据的处理)

SCD2:维护历史变化行为, 每天同步全量的数据, 不管是否有变化, 均全量维护到一个新的分区中。

SCD3:维护历史变更行为,处理方式是在表中新增两个新的字段,一个是起始时间,一个是结束时间,当数据发生变更后,将之前的数据设置为过期,将新的变更后完整的数据添加到表中,重新记录其起始和结束时间,这种方案也称为拉链表。

        好处:可以维护更多的历史版本的数据, 处理起来也是比较简单的 (利于维护)

        弊端:造成数据冗余存储 大量占用磁盘空间

SCD4:维度历史变化,处理方式是当表中有字段发生变更后,新增一列,将变更后的数据存储到这一列中。

        好处:减少数据冗余存储

        弊端:只能维护少量的历史版本, 而且维护不方便, 效率比较低

三、拉链表

        拉链表能够记录每条信息的开始结束时间,维护数据的新增和更新,为维度的更新和新增提供一种解决方案。由于在实际开发中,拉链表(SCD3)的使用比较多,因此下面介绍拉链表的使用步骤:

        (1)首先在源数据层里(一般称为ODS层)获取到增量数据(即上一天新增和更新的数据);
        (2)用原始的拉链数据 left join  增量数据,这时通过左连接就会得到更新的数据(能够关联上就代表有更新,没有关联上即为null,就是没有更新),然后修改关联到的历史数据的结束时间为上一天,这表明上一天有进行了更新。

        (3)接着将进行 left join 连接后并更新的结果集再去 union all 上下合并增量数据,这时新增和更新的数据就会拼接到原来历史数据的底部,拉链表就完成了。
        (4)但为了数据安全起见,一般会把最新的拉链数据优先保存到对应临时表中,保存没问题后利用insert + select 方式把临时表数据灌入到对应拉链表中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值