数据迁移解决方案

2 篇文章 0 订阅

 业务背景:原本的逻辑架构为DM层数据永久保留,在DM层基础上存在两张数据表(1张LAST每月一号保留上月数据,一张THIS每日全量更新本月数据,LAST和THIS的数据分别从两套数据线中生成),通过视图作为接口向外展示。用户反馈两个月数据无法满足业务需要,提出希望视图可以查到最近两年年底最后一天的数据(这些数据是永久保留的,可以理解为已经抽象过的一层数据模型)。实际处理,按照每年都保留最后一天的数据处理。

1.新增了一张数据表用户存储每年年底最后一天的数据,DATEID为每年最后一天;并入到视图里,此时完整的基础表已经完成。

--建表K2,年底最后一个月的数据,看是不是调整一下存储过程,每年2月1号删除12月数据时,迁移一下12月数据
CREATE TABLE "DWADMIN"."F_PERSISTENCY_LIST_VIEW_LASTYEAR" LIKE "DWADMIN"."F_PERSISTENCY_LIST_VIEW_THIS" ;
--建表DYK1,年底最后一个月的数据,看是不是调整一下存储过程,每年2月1号删除12月数据时,迁移一下12月数据
CREATE TABLE "DWADMIN"."F_PERSISTENCY_LIST_VIEW_LASTYEAR_DYK1" LIKE "DWADMIN"."F_PERSISTENCY_LIST_VIEW_THIS_DYK1";

 2.补充顶层控制逻辑,每年定时保留上一年12月份的数据。(这里,因为是LAST和LASTYEAR两张表可以通过视图同时查到,所以DATEID设置为每次LAST表删除12月数据时,也即2月1日LAST进1月数据前。因为不想写到分存储过程中,因此提到顶层控制流,每天跑LIST_VIEW时,做一下判断)

--每年2月1号备份LAST表中12月的数据到LASTYEAR表中,平日不跑 start
DECLARE V_DATEID DATE;
SET V_DATEID = CURRENT_DATE -1 DAYS;

CALL BACKUP.SP_KETTLE_LOG('F_PERSISTENCY','DWADMIN.F_PERSISTENCY_LIST_VIEW ','01/03-Start..',to_char(CURRENT_TIMESTAMP,'YYYY-MM-DD HH24:MI:SS'),to_char(CURRENT_TIMESTAMP,'YYYY-MM-DD HH24:MI:SS'),'N',NULL);

IF V_DATEID = YEAR(V_DATEID)||'-01-31' THEN 
INSERT INTO DWADMIN.F_PERSISTENCY_LIST_VIEW_LASTYEAR SELECT * FROM DWADMIN.F_PERSISTENCY_LIST_VIEW_LAST;
INSERT INTO DWADMIN.F_PERSISTENCY_LIST_VIEW_LASTYEAR_DYK1 SELECT * FROM DWADMIN.F_PERSISTENCY_LIST_VIEW_LAST_DYK1;
COMMIT;
END IF;
--每年2月1号备份LAST表中12月的数据到LASTYEAR表中 end

2.因为今年用户就需要前两年的数据,程序无法按照计划表无法跑出来历史数据,因此,需要手工跑出过往两年的数据初始化新建的数据表。

这里借助THIS表接收LASTYEAR的数据,然后再手工恢复THIS表数据。

--K2
--01.备份this表本月数据
CREATE TABLE TMPBAC.F_PERSISTENCY_LIST_VIEW_THIS_20210222 LIKE DWADMIN.F_PERSISTENCY_LIST_VIEW_THIS;
INSERT INTO TMPBAC.F_PERSISTENCY_LIST_VIEW_THIS_20210220 SELECT * FROM DWADMIN.F_PERSISTENCY_LIST_VIEW_THIS;
--02.调整存储过程中的跑数V_DATEID 为2020-12-31 然后执行
--03.跑去年的数据
CALL DWADMIN.SP_F_PERSISTENCY_LIST_VIEW_THIS();
--导入去年年底数据
INSERT INTO "DWADMIN"."F_PERSISTENCY_LIST_VIEW_LASTYEAR" SELECT * FROM "DWADMIN"."F_PERSISTENCY_LIST_VIEW_THIS";
   跑2019年数据调整V_DATEID 为 2019-12-31 然后执行
CALL DWADMIN.SP_F_PERSISTENCY_LIST_VIEW_THIS();
--导入前年年底数据
INSERT INTO "DWADMIN"."F_PERSISTENCY_LIST_VIEW_LASTYEAR" SELECT * FROM "DWADMIN"."F_PERSISTENCY_LIST_VIEW_THIS";
--04.存储过程V_DATEID恢复;
--05.this表本月数据恢复
DELETE FROM DWADMIN.F_PERSISTENCY_LIST_VIEW_THIS;
INSERT INTO DWADMIN.F_PERSISTENCY_LIST_VIEW_THIS SELECT * FROM TMPBAC.F_PERSISTENCY_LIST_VIEW_THIS_20210222;

DYK1同理


以上。记于2021年2月22日 Esther Su

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值