业务背景:原本的逻辑架构为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