(连载)网络存储导论第六章:实现数据迁移(2)

    6.4.3 数据抽取和转换的准备

    数据抽取前,需要作大量的准备工作。具体如下:

    1、 针对目标数据库中的每张数据表,根据映射关系中记录的转换加工描述,建立抽取函数。该映射关系为前期数据差异分析的结果。抽取函数的命名规则为:F_目标数据表名_E。

    2、 根据抽取函数的SQL 语句进行优化。可以采用的优化方式为:调整SORT_AREA_SIZE和HASH_AREA_SIZE 等参数设置、启动并行查询、采用提示指定优化器、创建临时表、对源数据表作ANALYZES、增加索引。

    3、 建立调度控制表,包括ETL 函数定义表(记录抽取函数、转换函数、清洗函数和装载函数的名称和参数)、抽取调度表(记录待调度的抽取函数)、装载调度表(记录待调度的装载信息)、抽取日志表(记录各个抽取函数调度的起始时间和结束时间以及抽取的正确或错误信息)、装载日志表(记录各个装载过程调度的起始时间和结束时间以及装载过程执行的正确或错误信息)。

    4、建立调度控制程序,该调度控制程序根据抽取调度表动态调度抽取函数,并将抽取的数据保存入平面文件。平面文件的命名规则为:目标数据表名.txt。

    数据转换的工作在ETL 过程中主要体现为对源数据的清洗和代码数据的转换。数据清洗主要用于清洗源数据中的垃圾数据,可以分为抽取前清洗、抽取中清洗、抽取后清洗。ETL 对源数据主要采用抽取前清洗。对代码表的转换可以考虑在抽取前转换和在抽取过程中进行转换。

    具体如下:

    1、针对ETL 涉及的源数据库中数据表,根据数据质量分析的结果,建立数据抽取前的清洗函数。该清洗函数可由调度控制程序在数据抽取前进行统一调度,也可分散到各个抽取函数中调度。清洗函数的命名规则为:F_源数据表名_T_C。

    2、针对ETL 涉及的源数据库中数据表,根据代码数据差异分析的结果,对需要转换的代码数据值,如果数据长度无变化或变化不大,考虑对源数据表中引用的代码在抽取前进行转换。抽取前转换需要建立代码转换函数。代码转换函数由调度控制程序在数据抽取前进行统一调度。

    代码转换函数的命名规则为:F_源数据表名_T_DM。

    3、对新旧代码编码规则差异较大的代码,考虑在抽取过程中进行转换。根据代码数据差异分析的结果,调整所有涉及该代码数据的抽取函数。

    6.4.4 数据迁移后的校验

    在数据迁移完成后,需要对迁移后的数据进行校验。数据迁移后的校验是对迁移质量的检查,同时数据校验的结果也是判断新系统能否正式启用的重要依据。可以通过两种方式对迁移后的数据进行校验。

    对迁移后的数据进行质量分析,可以通过数据质量检查工具,或编写有针对性的检查程序进行。对迁移后数据的校验有别于迁移前历史数据的质量分析,主要是检查指标的不同。迁移后数据校验的指标主要包括五方面:完整性检查,引用的外键是否存在;一致性检查,相同含义的数据在不同位置的值是否一致;总分平衡检查,例如欠税指标的总和与分部门、分户不同粒度的合计对比;记录条数检查,检查新旧数据库对应的记录条数是否一致;特殊样本数据的检查,检查同一样本在新旧数据库中是否一致。

    新旧系统查询数据对比检查,通过新旧系统各自的查询工具,对相同指标的数据进行查询,并比较最终的查询结果;先将新系统的数据恢复到旧系统迁移前一天的状态,然后将最后一天发生在旧系统上的业务全部补录到新系统,检查有无异常,并和旧系统比较最终产生的结果。