暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
关于ETL抽取过程中保证数据一致性和完整性的方案.doc
510
2页
0次
2023-05-31
5墨值下载
关于
ETL
抽取过程中保证数据一致性和完整性的方案
一、
方案介绍
ETL
抽取端设置一个控制文件,用于记录数据抽取的进度信息。其中分别登记了
id
id
id
,示意如下图所示:
抽取某一库表前,按主键(索引)排序,读取其前
N
条(参数可配置)记录作为
次作业要处理的数据集,下一次作业则抽取
N+1
2N
区间的记录,依此类推。
在抽取过程中,通过对此文件进行实时更新,能够反映
ETL
数据抽取的最近进展信息,
并为故障恢复提供参考依据。
二、工作原理
其机制如下:
1
、每开始抽取一条数据记录之前,在控制文件中写入当前抽取的记录
id
和下一条
要抽取的记录的
id
2
、每成功完成抽取一条记录之后,都更新此控制文件,把刚处理过的记录
id
写在
prev_id
的位置;
3
、上面过程中遇到的各种异常,都不要求抽象工具
/
程序进行异常处理,而是直接抛
出异常后中止。
以上步骤迭代进行。
这样就将抽取一条记录的过程分解为事前、事中和事后,以下若不特别说明,对之
泛指,不作区分。
三、中断恢复
总体过程为:如果在抽取一条记录的过程中,发生诸如网络中断、系统掉电等问题
障,经手工排除后,重启
ETL
抽取过程。
为了检查在
ETL
抽取的中断期间,源库表是否有新增了数据,设定一个检测方法,
现返回介于两个给定的主键
id
之间的记录,以下简称为
PROC_A
发出重启指令,指示
ETL
抽取按照以下步骤进行:
1
、首先进行控制文件的检查、恢复,以及数据的校正。
1
)、如果发现
prev_id=curr_id
,则可推测中
/
故障是在抽取完成一条记录(因
curr_id
写到了
prev_id
),但还没开始抽取新一条记录的时候发生的。
next_id
curr_id
next_id
id
执行
PROC_A
(以
prev_id
curr_id
作为实参),如果返回不空的记录集,则备份控
文件,使用原控制文件对其重复擦写)对这个记录集进行抽取。完成,再用备份的
制文件覆盖原控制文件。
2
、如
id
数值(常标识
curr_id
的这
记录跟目标数据库进行比对
/
检查,查找目标数据库中是否有这条记录,存在几种可能:
a
、不存在这条记录
这说明,中
/
故障发生在抽取当前记录的过程中,导致数据完全没有进入目
标数据库。对于这种情况,按道理讲,如果不存
ETL
抽取中断期间新增数据的情况的话,
只须再次从当前记录重新进行抽取即可(不须调整控制文件)。但为了尽可能保持源库
和目标数据库表数的一致,样执
PROC_A
(以
prev_id
curr_id
作为实参,如
果返回不空的记录集,则备份控制文件,使用原控制文对其重复擦写)对这个记录
进行抽取。完成后,再用备份的控制文件覆盖原控制文件。
b
、已存在这条记录
须进一步检查源库表的这条记录跟目标数据库的这条记录是否完全一致。
果不完全一致,则须以源库表的这条记录为标更新目标数据库这条记录不一致那些
种情,说抽取
curr_id
这条录出字段据不致)然完,但
来得及写控制文件,系统就发生了异常。如果一致,则说明正在抽取过程中发生异常(但
抽取果是完整的),还没来得及写控制文件。
使
curr_id
prev_id
next_id
curr_id
next_id
则取作下一条要抽取的记录的
id
然后
PROC_A
(以
prev_id
curr_id
作为),回不的记
录集,则备份控制文件,使用原控制文件对其重复擦写对这个记录集进行抽取。完
后,同样用备份的控制文件覆盖原控制文件。
2
、接下行正常的
ETL
抽取程。
of 2
5墨值下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

关注
最新上传
暂无内容,敬请期待...
下载排行榜
Top250 周榜 月榜