首页 > 其他分享 >银行数据迁移项目,init(初始化)脚本怎么开发(实战)

银行数据迁移项目,init(初始化)脚本怎么开发(实战)

时间:2024-06-11 09:02:47浏览次数:16  
标签:实战 初始化 数据量 prd -- init key dt 数据

银行数据迁移项目,比起一般遇到的项目,其实难度还是挺大的。

从0到1的项目好做,普通迭代开发的也不难,但是,对于(系统升级)数据迁移的项目,有点要老命。

0,数迁项目背景

一般由于业务部门新的业务需求的增加或者合并,为满足新需求,将某个系统(比如说最常见的信用卡系统)进行改造升级,其数据要进行迁移,很多旧口径逻辑变更,重新映射,再次进行数据建模,实现各种业务指标开发。

举个例子:

比如A银行本身做贷款项目,数据都使用银行贷款系统,一直稳定运行使用很多年,但是几年后,银行和各机构线上营销的趋势猛增,A银行也不例外,A银行和美团,消费金融等app进行合作,发现原本的系统结构不符合现在的合作业务需求,存在功能异构,逻辑重大变更,需要对之前的系统重新建模,数据重新迁移到新系统。

一般数迁项目难以开发,是弊端很多:

0,建模分析工作做得不够完全,细致到位。
1,新需求文档写的很烂,字段数据类型对应不上。跑脚本很吃力,报错多。
2,新需求文档存在逻辑变更,功能异构,其字段的逻辑,映射规则,字段的增减,改动很频繁,还要你及时更新脚本通,并且跑通脚本。
3,一些映射口径有遗漏,在映射表里找不到替代方案;有些映射规则都还没有确定下来,就叫你瞎开发。
4,一些映射口径可以从旧到新映射,但却不能还原回来,到时候数据自测肯定对不上数据。
5,当你开发测试发现有问题的时候,他们告诉你报错的那张表突然说下线。
6,测试环境切换频繁;测试环境没有数据;没有业务培训直接上手。

当然,你已经很努力的在那边开发了 ,然而行员领导可能觉得大家还很傻冒,对你一通乱骂。有时候他们也不知道疑难杂症究竟有多少!!!

1,需求案例(字段新增)

原表字段:

key_prd
日期(yyyy-mm-dd)产品类型产品代码折算系数
upl_dateprd_typeprd_codecnvr_coef

现需求指标字段:

key_prd_new
日期(yyyy-mm-dd)产品类型产品代码产品名称折算系数
upl_dateprd_typeprd_codeprd_namecnvr_coef

现在需要新增一个字段,在产品代码字段后面。

这个时候,你该如何应对呢???

2,初始化脚本开发

2.1,什么是初始化脚本。

就是在这个需求上线的时候,要提前在正常日常跑批脚本之前,先执行。以满足后续的跑批要求。

其特点:

1,一次性的,上线之后就只跑一次。

2,执行前置,时间上要先跑。之后再跑日常跑批脚本。

目的性:

为了把历史的数据按照最新的需求,给迁移到新系统上。

2.2,脚本开发

特别是对于这种表结构有新增的需求,其实是最难的。比字段的删减,字段名变更,某字段逻辑变更都要难。

1,先rename原目标表

alter table key_prd rename to key_prd_2024068 ;

2,key_prd_new

2,再创建新目标表结构

drop  table if exists key_prd_new ;

create table key_prd_new (

upl_date    date    comment '日期',

prd_type    string  comment '产品类型',

prd_code    string  comment '产品代码',

prd_name    string  comment '产品名称',

cnvr_coef   secimal(26,10)  comment '折算系数'

)

comment '重要产品表'

partition by  (dt       string comment '时间分区'
 
               sys_src  string comment '系统名'  )

;

注意:数据迁移的项目,表的分区一般都是双分区,一级分区是dt 时间分区,二级分区是sys_src 系统分区。

3,数据回插(原系统数据回插到新系统的表里)

--对新表进行【动态插入】的方式就行数据回插

insert overwrite key_prd_new patition (dt, sys_sc)

select  upl_date    

        ,prd_type    

        ,prd_code    

        ,''  as prd_name    --产品代码【新增字段】

        ,cnvr_coef   
        
        ,dt

        ,sys_src

from  key_prd_2024068  --旧系统表的备份数据
 
;

注意:如果新增字段的数据类型为  string ,数据回插的时候,默认 ''

如果新增字段的数据类型为  decimal ,数据回插的时候,默认 0

4,分批次回插

如果说之前的旧系统的数据量太大了,字段50+,数据量有接近100亿,那么如果按照上面步骤3的方法,还可以做到嘛???

当然不行了,生产上的资源本来就很紧张,每天都有很多的脚本在跑批。

内存不会太多,所以针对如此巨量的数据,肯定不够加载到内存里,如果硬是要这么操作,那肯定会导致其他的作业无法正常跑批,导致整个调度系统瘫痪。

所以有什么解决的办法呢??
答案就是把该表的数据量做一个统计,如果说有近百亿的数据,那么一般按照银行的要求,每次加载的数据量,不超过1亿,意味着把表的数据差不多要分成100份,分批次导入。

那么如何比较均等的,分为100份数据呢??

我们可以对该表进行分区的数据统计。

select dt  
      ,count(*) 
from key_prd  
group by dt ;

看看每个日期分区的数据是多少,是不是均匀或者说稳步缓增的。

一般来说,数据量都是差不多,比较均匀,也有数据量稳步缓慢增加的。

看看要多少个分区的数据量加起来差不多到1亿。

--对新表进行【动态插入】的方式就行数据回插

insert into key_prd_new patition (dt, sys_sc)  --注意,变为 insert into

select  upl_date    

        ,prd_type    

        ,prd_code    

        ,''  as prd_name    --产品代码【新增字段】

        ,cnvr_coef   
        
        ,dt

        ,sys_src

from  key_prd_2024068  --旧系统表的备份数据
where  dt >20240101  and dt < 20240205   --时间分区内的数据量和<=1亿
 
;

按照上面的方式,依次进行分批次数据插入。就完美解决了,perfect!


今天这期属于数迁项目实战,希望你可以学到更多,不光是业务背景,sql技能,更重要的是认知,是对项目开发的框架的理解。

就好比如写语文作文一样,别人年纪比普通人小很多,但是写出来的作文深度比之高深很多。我想这不是努力不努力的问题,同样需要悟性,认知在里头。希望可以给大家增加一些知识面,仔细琢磨,提升自己的悟性。

欢迎一键三连!!!

标签:实战,初始化,数据量,prd,--,init,key,dt,数据
From: https://blog.csdn.net/wowulita123/article/details/139538989

相关文章

  • 情景题之小明的Linux实习之旅:linux实战练习1(上)【基础命令,权限修改,日志查询,进程管理...
    小明的Linux实习之旅:基础指令练习情景练习题背景介绍场景1:初识Linux,创建目录和文件场景2:权限管理,小明的权限困惑场景3:打包与解压,小明的备份操作场景4:使用Grep,小明的搜索技能场景5:系统服务管理,小明的首次接触场景6:进程管理,小明的多任务处理场景7:定时任务与系统状态场景8:d......
  • C语言实战
    一、计算n的m次方(理论上只需要更改数组result[...]的元素个数,可以输出无穷大的结果)#include<stdio.h>#defineULLONG(unsignedlonglong)1000000000000000000ULLintmain(){ intn; intm; intcc=0;//监控循环次数 unsignedlonglongresult[10]={1,0,0,0,0,0......
  • vuInhub靶场实战系列--Kioptrix Level #3
    免责声明本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关。目录免责声明前言一、环境配置1.1靶场信息1.2靶场配置二、信息收集2.1主机发现2.1.1netdiscover2.1.2arp-scan主机扫描2.2端口扫描2.3指纹识别2.......
  • Vision-LSTM(ViL)实战:使用Vision-LSTM(ViL)实现图像分类任务(一)
    文章目录摘要安装包安装timm数据增强Cutout和MixupEMA项目结构计算mean和std生成数据集摘要论文链接:https://arxiv.org/pdf/2406.04303Vision-LSTM(ViL)架构的核心是xLSTM块。每个xLSTM块都包含一个输入门、一个遗忘门、一个输出门和一个内部记忆单元。与传统的LSTM......
  • Python统计实战:两道题掌握一个总体均值、一个总体方差、两个总体均值差、两个总体方差
    为了解决特定问题而进行的学习是提高效率的最佳途径。这种方法能够使我们专注于最相关的知识和技能,从而更快地掌握解决问题所需的能力。(以下练习题来源于《统计学—基于Python》。联系我获取完整数据和Python代码。) 求解参数(区间)估计的基本思路一看求总体的什么参数(总体......
  • 微信小程序毕业设计-公交信息在线查询系统项目开发实战(附源码+演示视频+LW)
    大家好!我是岛上程序猿,感谢您阅读本文,欢迎一键三连哦。......
  • Objective-C的初始化方法中,应该如何读写属性
    除非有明确的原因需要使用setter,getter,否则总是应该直接访问,也就是直接使用实例变量(也称为iVar)来读写数据理由:避免子类覆盖setter方法的影响:若在初始化方法中使用setter方法,使用此方法实例化子类,可能会调用子类重写的setter方法,这可能会导致意想不到的行为......
  • 动手学深度学习4.10 实战Kaggle比赛:预测房价-笔记&练习(PyTorch)
    以下内容为结合李沐老师的课程和教材补充的学习笔记,以及对课后练习的一些思考,自留回顾,也供同学之人交流参考。本节课程地址:实战Kaggle比赛:预测房价_哔哩哔哩_bilibili本节教材地址:4.10.实战Kaggle比赛:预测房价—动手学深度学习2.0.0documentation(d2l.ai)本节开源代......
  • 4_Spring Bean的初始化和销毁
    SpringBean的初始化和销毁1.Bean的初始化执行流程Spring提供了多种初始化和销毁的方法编写相关Bean代码:publicclassBean1implementsInitializingBean{@PostConstructpublicvoidinit1(){System.out.println("初始化1");}@Override......
  • Vue TypeScript 实战:掌握静态类型编程
    title:VueTypeScript实战:掌握静态类型编程date:2024/6/10updated:2024/6/10excerpt:这篇文章介绍了如何在TypeScript环境下为Vue.js应用搭建项目结构,包括初始化配置、创建Vue组件、实现状态管理利用Vuex、配置路由以及性能优化的方法,旨在提升开发效率与应用性能。categ......