文章目录

简述:
将ods推送的数据文件,加载到数据库的临时B表中,然后通过存储过程将临时B表中的数据同步到目标A表中。
注:临时B表结构和目标A表表结构必须一致,同步失败。

一、基础资料准备
1.1.表名规约

ods同步表的表名称、字段名称、字段数量规范,双方需要提前约定好,一旦约定好不允许修改,否则加载数据和同步数据会失败。

1.2.设计1套临时表和1套同构层表

临时B表作用:将ods推送的数据文件内容加载到数据库的临时表中,每次执行脚本临时表中的数据会清空。
注:临时B表可以理解为缓冲区

同构层表作用:保存或者备份推送过来的数据,数据不会也不允许更改。
同构层表目的:查阅数据问题可以直接查阅同构层表的数据,不用请求其他系统咨询,减少时间损耗和提高数据区配的效率。

1.3.存储过程

设计与表关系为1:1的存储过程
存储过程作用:将临时B表中的数据同步到目标的A表中。
注:同步数据种类:有全量-0和增量-1

二、流程规范
2.1. 生成控制文件(.ctl)
cd /app/jiazai/sql_loadv1.0/control/
rm -rf new.unl old.unl file/
sh ./new.sh
2.2. 拉取ods推送的数据文件
#进入sql_loadv1.0下面
cd /app/jiazai/sql_loadv1.0/
#拉取ods推送指定日期的数据文件
#格式:sh load.sh 年月日
案例:sh load.sh 20201027
2.3. 数据加载+数据同步

将数据文件的数据加载到临时B表 把临时表到B表数据同步到目标A表
#进入拉取的某一天数据文件的目录

cd /app/jiazai/sql_loadv1.0/loaded/20201027/

#1.将数据文件中的数据加载到数据库中的临时B表中
#2.将数据库中的临时B表中的数据同步到目标A表中

sh run_sqlldr.sh

注:run_sqlldr.sh这个脚本做了2件事情

三、手动调度

如当天的调度出现问题,修正后,想手动指定跑某张表的数据

3.1. 到下载的数据文件路径:

例:​​/app/jiazai/sql_loadv1.0/loaded/20180918​

3.2. 数据文件筛选

修改​​/app/jiazai/sql_loadv1.0/loaded/加载的数据文件日期/f.unl​​​:只保留需要加载的批次表信息(简言之,那个表的数据没有加载成功,只留下对应这个表的数据文件即可。
这是有数据的全部数据文件)

案例:
如果:20201027这一天dbx_ljtempfee 表数据加载失败,就留下​​​dir.ods.dbx_ljtempfee.20201027.000.01.i​​这一行,把其他数据文件删除。

3.3. 将要加载的表的备份表清空;

例:T01_INDV_CUST_HB
修改​​​/app/jiazai/sql_loadv1.0/sql/truncateyw.sql​​​ 只保留​​TRUNCATE TABLE T01_INDV_CUST_HB;​​ 在​​/app/jiazai/sql_loadv1.0/loaded/20201027​​路径下执行

sh truncateyw.sh
3.4. 数据加载脚本执行
cd /app/jiazai/sql_loadv1.0/loaded/20201027/
sh ./run_sqlldr.sh
3.5. sql还原

将​​/app/jiazai/sql_loadv1.0/sql/truncateyw.sql​​还原

四、轮询定时调度

定时每天调用​​/app/jiazai/sql_loadv1.0/hxloadupgrade.sh​​ 自动将前一天的数据加载到行协test用户下的表中。

4.1. 设置脚本执行频次

编辑定时任务配置文件:

crontab –e
4.2. 设置执行频次
案例:每天上午10:15触发:0 15 10 * * ?  /app/jiazai/sql_loadv1.0/hxloadupgrade.sh
4.3. 定时任务查看
crontab -l
五、日志轨迹

第一次初始化:
待ODS将全部数据文件推送至数据交换平台后,手动在 /app/jiazai/sql_loadv1.0路径下执行sh load.sh 要加载的数据文件夹名(例:sh load.sh 20201027)
生成的日志文件在以下两个文件夹下:
/app/jiazai/sql_loadv1.0/hx_loadlog
/app/jiazai/sql_loadv1.0/loaded/日期(例如:20201027)/load/log
可以去数据库中的日志表查询
load_log 记录表加载入备份表的状态
LOAD_PL_LOG记录表从备份表到目标表正确的状态
LOAD_PL_ERROR_LOG记录表从备份表到目标表错误的状态
例:

SELECT * FROM load_log where  to_Char(load_time,'yyyymmdd') =20200330 ; --实际加载日期
SELECT * FROM LOAD_PL_LOG where to_Char(s_time,'yyyymmdd') =20200330 ;--实际加载日期
SELECT * FROM LOAD_PL_ERROR_LOG where to_Char(s_time,'yyyymmdd') =20200330 ;--实际加载日期

注意:
如果第一次初始话在凌晨3点前完成数据加载,则crontab -e
解除定时的注释,以后每天3:00-9:00会自动加载调用。

如果第一次初始化不能在凌晨3点前加载完成、或日后出现9点前未将32张接口表数据文件全部推送完成、或ODS修复数据重新推数,需运维手动调用进行加载完成后,再crontab -e
解除定时的注释,以后每天3:00-9:00会自动加载调用
如运维手动调用:
​​​/app/jiazai/sql_loadv1.0​​​路径下执行​​sh loadyw.sh​​​ 要下载的数据文件夹名
脚本运行完成后,去数据库中确认以下26张表中数据是否全部被删除

确认无误后到
/app/jiazai/sql_loadv1.0/loaded/日期(就是所要加载的数据文件夹名例如:20201027)路径下执行

sh run_sqlldr.sh

轮询定时调度:
定时每天调用​​​/app/jiazai/sql_loadv1.0/hxloadupgrade.sh​​​ 自动将前一天的数据加载到行协test用户下的表中。
定时查看:​​crontab -l​

ODS数据文件从数据交换平台下载到:
​​​/app/jiazai/sql_loadv1.0/loaded/指定日期文件夹​​​ 例:​​/app/jiazai/sql_loadv1.0/loaded/20201027​​路径下
装载后的数据文件存放在:(如果有失败的表,路径下会产生*.bad文件)
例:​​/app/jiazai/sql_loadv1.0/loaded/20201027/load/data​​路径下

如当天的装载有失败的表,需查看日志确定原因。
查看每张表装载日志:
例:​​​/app/jiazai/sql_loadv1.0/loaded/20201027/load/log/表名.log​​ 数据库中的日志表:

表名

作用

load_z_log

每天只生成1条记录,记录每天整体装载情况

load_log

记录表加载入备份表的状态

LOAD_PL_LOG

记录表从备份表到目标表正确的状态

LOAD_PL_ERROR_LOG

记录表从备份表到目标表错误的状态