文章目录
- 一、基础资料准备
- 1.1.表名规约
- 1.2.设计1套临时表和1套同构层表
- 1.3.存储过程
 
- 二、流程规范
- 2.1. 生成控制文件(.ctl)
- 2.2. 拉取ods推送的数据文件
- 2.3. 数据加载+数据同步
 
- 三、手动调度
- 3.1. 到下载的数据文件路径:
- 3.2. 数据文件筛选
- 3.3. 将要加载的表的备份表清空;
- 3.4. 数据加载脚本执行
- 3.5. sql还原
 
- 四、轮询定时调度
- 4.1. 设置脚本执行频次
- 4.2. 设置执行频次
- 4.3. 定时任务查看
 
- 五、日志轨迹
 
 
 
 
简述:
将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 | 记录表从备份表到目标表错误的状态 |