拉链表
记录一个事物从开始到当前状态的所有的变化信息。适用于“数据量非常大的表、表中的某些字段会被更新操作、需要查看历史信息、表的数据更新变化不是很大。”拉链表中会定义数据的st_date和end_date。
初始表A
cust_id | account | st_dt | end_dt |
---|---|---|---|
a | 100 | 20170801 | 29991231 |
b | 200 | 20170801 | 29991231 |
c | 100 | 20170801 | 29991231 |
20170802:更新数据表B
cust_id | account | st_dt | end_dt |
---|---|---|---|
a | 200 | 20170802 | 29991231 |
b | 300 | 20170802 | 29991231 |
更新表A
update A
set end_dt=mat_date
where cust_id in (select cust_id from B)
cust_id | account | st_dt | end_dt |
---|---|---|---|
a | 100 | 20170801 | 20170802 |
b | 200 | 20170801 | 20170802 |
c | 100 | 20170801 | 29991231 |
导入更新数据B
insert into A select * from B
得到最终表:
cust_id | account | st_dt | end_dt |
---|---|---|---|
a | 100 | 20170801 | 20170802 |
b | 200 | 20170801 | 20170802 |
c | 100 | 20170801 | 29991231 |
a | 200 | 20170802 | 29991231 |
b | 300 | 20170802 | 29991231 |
增量表
只保留当前新增的数据,例如:
初始表A
cust_id | account | st_dt |
---|---|---|
a | 100 | 20170801 |
b | 200 | 20170801 |
c | 100 | 20170801 |
2017年8月2日:a账户又存了300
cust_id | account | st_dt |
---|---|---|
a | 300 | 20170802 |
最终表
cust_id | account | st_dt |
---|---|---|
a | 300 | 20170802 |
a | 100 | 20170801 |
b | 200 | 20170801 |
c | 100 | 20170801 |
全量表
保存用户所有的数据(包括新增与历史数据),例如:
初始表A
cust_id | account | st_dt |
---|---|---|
a | 100 | 20170801 |
b | 200 | 20170801 |
2017年8月2日:a账户没存、b账户没存、c账户存200
cust_id | account | st_dt |
---|---|---|
a | 100 | 20170802 |
b | 200 | 20170802 |
c | 100 | 20170802 |
最终表
cust_id | account | st_dt |
---|---|---|
a | 100 | 20170801 |
b | 200 | 20170801 |
a | 100 | 20170802 |
b | 200 | 20170802 |
c | 100 | 20170802 |