Greenplum建模最佳实践之拉链表

本文介绍了Greenplum中拉链表的概念、原理及其实现过程,包括新增、删除和修改操作,以及如何通过存储过程进行数据拉链,并提供了测试案例。拉链表用于处理缓慢变化数据,有效节省存储并便于查询历史状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

获得技术资料内容,请访问Greenplum中文社区网站

拉链表是一种数据模型,主要是针对数据仓库设计中表存储数据的方式而定义的;顾名思义,所谓拉链表,就是记录历史,记录一个事务从开始一直到当前状态的所有变化的信息。
拉链表可以避免按每一天存储所有记录造成的海量存储问题,同时也是处理缓慢变化数据(SCD2)的一种常见方式。

一、概念原理

 

在拉链表中,每一条数据都有一个生效日期(sdate) 和 失效日期(edate)。假设在一个用户表中,在 2019年10月8日 新增了两个用户,则这两条记录的生效时间为当天,由于到 2019年10月8日 为止,这两条记录还没有被修改过,所以失效时间为无穷大,这里设置为数据库中的最大值(2999-12-31),如图所示:

 

b4a61144-ebcc-4a7e-bea0-b3aefd15b03b.jpg

 

第二天(2019-10-09),用户 1001 被删除,用户 1002 的电话号码被修改成 16500000006。为了保留历史状态,用户 1001 的失效时间被修改成 2019-10-09,用户 1002 则变成两条记录,如图所示:

 

f173eff5-7e51-4b3a-8f83-6987b503642f.jpg

 

第三天(2019-10-10),又新增了用户 1003,则用户表数据如图:

 

cfd22bfa-2211-4834-bebc-e1f8725a17a8.jpg

 

如果要查询最新的数据,那么只要查询失效时间为 2999-12-31 的数据即可,如果要查询 10月8号 的历史数据,则筛选生效时间 <= 2019-10-08 并且失效时间 > 2019-10-08 的数据即可;如果查询的是 10月9日的数据,那么筛选条件则是生效时间 <= 2019-10

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值