一种数据校验方法、装置及电子设备与流程

文档序号:11407173阅读:267来源:国知局
本申请涉及数据处理
技术领域
:,具体涉及一种数据校验方法、装置及电子设备,以及一种数据迁移系统。
背景技术
::在业务系统的底层数据模型发生变化后,需要兼容老业务数据,因而需要将老数据模型中的数据迁移到新模型中,该处理过程被称为数据迁移。由于新老数据模型在结构上会有较大的差异,因此,数据迁移过程中需要将老模型中的字段转换成对应的新模型字段。由于该转换过程不仅是简单的一一对应,往往存在复杂的逻辑,因而可能导致老业务数据迁移后系统不能正常兼容,从而影响业务系统的运行。为了保证业务系统的正常运行,在数据迁移完成后,需要对迁移后的数据进行校验。数据迁移后的校验是对迁移质量的检查,同时数据校验的结果也是判断新系统能否正式启用的重要依据。数据迁移后的校验工作可采用两种方式进行:人工验证或脚本验证。相对于脚本验证而言,人工验证耗费的人力资源较多,并且问题修复之后还需要进行重复测试,可见,人工验证方法存在验证效率低且稳定性差的问题。脚本验证的优点为:可以重复执行,避免重新迁移后测试人员的重复劳动,能够增加测试用例的覆盖范围,可以对所有数据进行全量校验,很好的补充了手工测试时业务场景缺失的问题。因此,数据迁移后的校验工作通常采用脚本验证的方法进行实施。目前,脚本验证方法采用定制的校验程序,即:为特定的数据迁移任务开发特定的校验程序。在定制的校验程序中,需要写入与特定数据迁移任务相关的业务代码,包括一整套的数据库查询代码、对比逻辑代码及调度代码,例如,源表信息、目标表信息、遍历条件、字段迁移逻辑等。其中,源表信息用来描述待迁移的源数据表;目标表信息用来描述迁移后的目标数据表;遍历条件用于指定程序校验的数据范围、及校验数据的先后顺序;字段迁移逻辑,指定源表中字段和目标表字段的对应关系。通过分析可知,定制的校验程序仅对特定数据迁移任务有效,而无法被所有数据迁移任务共用,因此,需要为每一个数据迁移任务分别编写对应的数据校验程序。开发人员为了减少开发成本,通常只是做到刚好能完成本次数据迁移任务的测试场景,很难做到完善、健壮的产品级别数据校验代码。这种校验程序可能本身存在问题,甚至会影响到校验结果。综上所述,现有技术存在数据校验程序无法被复用的问题。技术实现要素:本申请提供一种数据校验的方法、装置及电子设备,用于数据迁移系统,以解决现有技术存在数据校验程序无法被复用的问题。本申请另外提供一种数据迁移系统。本申请提供一种数据校验方法,用于数据迁移系统,包括:读取数据校验任务的配置文件,获取数据校验任务的配置参数;所述配置参数包括源表信息、目标表信息及数据对比逻辑;根据所述源表信息和所述目标表信息,获取待校验的原始数据和目标数据;针对各个具有相同数据标识的所述原始数据和所述目标数据构成的数据对,根据所述数据对比逻辑对所述数据对进行数据校验;其中,所述源表信息包括存储所述原始数据的源数据表的名称、所述源数据表所属源数据库的名称和所述原始数据的数据标识的名称;所述目标表信息包括存储所述目标数据的目标数据表的名称、所述目标数据表所属目标数据库的名称、及与所述原始数据的数据标识的名称相对应的所述目标数据的数据标识的名称。可选的,所述获取待校验的原始数据和目标数据,包括:根据所述源数据表的名称和所述源数据库的名称,构建并执行第一查询语句以获取所述原始数据;所述第一查询语句是指,用于获取所述原始数据的查询语句;针对获取到的各个所述原始数据,根据所述原始数据的数据标识和所述目标数据的数据标识的名称,构建第二查询语句包括的第二查询条件;所述第二查询语句是指,用于获取与所述原始数据相对应的所述目标数据的查询语句;根据所述第二查询条件、所述目标数据表的名称和所述目标数据库的名称,构建所述第二查询语句;执行所述第二查询语句以获取与所述原始数据相对应的所述目标数据。可选的,所述获取待校验的原始数据和目标数据,包括:根据所述源数据表的名称、所述源数据库的名称和所述原始数据的数据标识的名称,构建并执行第三查询语句以获取所述原始数据的数据标识;所述第三查询语句是指,用于获取所述原始数据的数据标识的查询语句;遍历获取到的各个所述原始数据的数据标识,根据所述原始数据的数据标识,获取与所述原始数据的数据标识相对应的所述原始数据,以及获取与所述原始数据的数据标识相对应的所述目标数据;相应的,根据所述数据对比逻辑对所述数据对进行数据校验,采用如下方式:在获取到与所述原始数据的数据标识相对应的所述原始数据、及与所述原始数据的数据标识相对应的所述目标数据之后,根据所述数据对比逻辑,对所述与所述原始数据的数据标识相对应的所述原始数据、及所述与所述原始数据的数据标识相对应的所述目标数据进行数据校验。可选的,所述获取与所述原始数据的数据标识相对应的所述原始数据,包括:根据所述原始数据的数据标识和所述原始数据的数据标识的名称,构建所述第四查询语句包括的第四查询条件;所述第四查询语句是指,用于获取与所述原始数据的数据标识相对应的所述原始数据的查询语句;根据所述第四查询条件、所述源数据表的名称和所述源数据库的名称,构建所述第四查询语句;执行所述第四查询语句,获取与所述原始数据的数据标识相对应的所述原始数据。可选的,所述原始数据采用分库分表方式存储;所述原始数据的数据标识的名称包括所述源数据表的分表字段的字段名称;在所述构建所述第四查询语句之前,还包括:获取所述源数据表的分表路由规则;根据所述源数据表的分表字段的字段名称、所述原始数据的数据标识中的所述源数据表的分表字段的值、和所述源数据表的分表路由规则,计算获取存储所述原始数据的分库的名称和分表的名称;所述构建所述第四查询语句,采用如下方式:以所述存储所述原始数据的分库的名称所标识的分库中的、所述分表的名称所标识的分表为查询对象,根据所述第四查询条件构建所述第四查询语句。可选的,所述源表信息包括所述源数据表的分表路由规则;所述获取所述源数据表的分表路由规则,采用如下方式:根据所述源表信息,获取所述源数据表的分表路由规则。可选的,所述原始数据采用分库分表方式存储;所述原始数据的数据标识的名称包括所述源数据表的分表字段的字段名称;所述执行所述第四查询语句,采用如下方式:通过所述原始数据的分布式数据访问层,执行所述第四查询语句;所述原始数据的分布式数据访问层的配置信息存储在所述原始数据的分布式数据访问层的配置文件中;所述原始数据的分布式数据访问层的配置信息包括所述源数据表的分表路由规则、表结构和表地址;所述源表信息包括所述原始数据的分布式数据访问层的配置文件的标识;所述方法还包括:根据所述源表信息包括的所述原始数据的分布式数据访问层的配置文件的标识,判断执行所述方法的机器本地是否存在已初始化的所述原始数据的分布式数据访问层;若上述判断为否,则根据所述源表信息包括的所述原始数据的分布式数据访问层的配置文件的标识,读取所述原始数据的分布式数据访问层的配置文件,以获取对应所述原始数据的分布式数据访问层的配置信息;并根据所述原始数据的分布式数据访问层的配置信息,初始化所述原始数据的分布式数据访问层。可选的,在初始化所述原始数据的分布式数据访问层之后,还包括:将所述原始数据的分布式数据访问层的配置文件的标识、与所述原始数据的分布式数据访问层的对应关系存储在所述机器本地。可选的,所述获取与所述原始数据的数据标识相对应的所述目标数据,包 括:根据所述原始数据的数据标识和所述目标数据的数据标识的名称,构建第五查询语句包括的第五查询条件;所述第五查询语句是指,用于获取与所述原始数据的数据标识相对应的所述目标数据的查询语句;根据所述第五查询条件、所述目标数据表的名称和所述目标数据库的名称,构建所述第五查询语句;执行所述第五查询语句以获取与所述原始数据的数据标识相对应的所述目标数据。可选的,所述目标数据采用分库分表方式存储;所述目标数据的数据标识的名称包括所述目标数据表的分表字段的字段名称;在所述构建所述第五查询语句之前,还包括:获取所述目标数据表的分表路由规则;根据所述目标数据表的分表字段的字段名称、所述原始数据的数据标识中的所述源数据表的分表字段的值、和所述目标数据表的分表路由规则,计算获取存储所述目标数据的分库的名称和分表的名称;所述构建所述第五查询语句,采用如下方式:以所述存储所述目标数据的分库的名称所标识的分库中的、所述分表的名称所标识的分表为查询对象,根据所述第五查询条件构建所述第五查询语句。可选的,所述目标表信息包括所述源数据表的分表路由规则;所述获取所述目标数据表的分表路由规则,采用如下方式:根据所述目标表信息,获取所述目标数据表的分表路由规则。可选的,所述目标数据采用分库分表方式存储;所述目标数据的数据标识的名称包括所述目标数据表的分表字段的字段名称;所述执行所述第五查询语句,采用如下方式:通过所述目标数据的分布式数据访问层,执行所述第五查询语句;所述目标数据的分布式数据访问层的配置信息存储在所述目标数据的分布式数据访问层的配置文件中;所述目标数据的分布式数据访问层的配置信息包括所述目标数据表的分表路由规则、表结构和表地址;所述目标表信息包括所述目标数据的分布式数据访问层的配置文件的标识;所述方法还包括:根据所述目标表信息包括的所述目标数据的分布式数据访问层的配置文件的标识,判断执行所述方法的机器本地是否存在已初始化的所述目标数据的分布式数据访问层;若上述判断为否,则根据所述目标表信息包括的所述目标数据的分布式数据访问层的配置文件的标识,读取所述目标数据的分布式数据访问层的配置文件,以获取对应所述目标数据的分布式数据访问层的配置信息;并根据所述目标数据的分布式数据访问层的配置信息,初始化所述目标数据的分布式数据访问层。可选的,在初始化所述目标数据的分布式数据访问层之后,还包括:将所述目标数据的分布式数据访问层的配置文件的标识、与所述目标数据的分布式数据访问层的对应关系存储在所述机器本地。可选的,所述配置参数还包括所述原始数据的数据范围,所述数据范围包括所述原始数据的筛选规则、存储所述原始数据的所述源数据表的分表的名称和所述源数据库的分库的名称的至少一者。可选的,所述数据范围包括所述原始数据的筛选规则、存储所述原始数据的所述源数据表的分表的名称和所述源数据库的分库的名称;所述获取待校验的原始数据,采用如下方式:以所述源数据库的分库的名称所标识的分库中的、所述源数据表的分表的名称所标识的分表为查询对象,以所述原始数据的筛选规则为查询条件,获取所述待校验的原始数据。可选的,所述获取待校验的原始数据,采用如下方式:若所述待校验的原始数据的数据量大于预设的最大数据量阈值,则以所述预设的最大数据量阈值为数据获取单位,分批次获取所述待校验的原始数据;针对特定批次的所述待校验的原始数据和所述目标数据进行数据校验后,对下一批次的所述待校验的原始数据和所述目标数据进行数据校验。可选的,所述根据所述数据对比逻辑对所述数据对进行数据校验,包括:通过正则表达式匹配所述数据对比逻辑,获取所述数据对比逻辑包括的所述源数据表的特定字段、及所述目标数据表的特定字段;将所述数据对比逻辑中所述源数据表的特定字段替换为所述原始数据的所述特定字段的值,及将所述数据对比逻辑中所述目标数据表的特定字段替换为所述目标数据的所述特定字段的值,生成数据对比表达式;对所述数据对比表达式进行计算,获取数据校验结果。可选的,还包括:记录数据校验结果。相应的,本申请还提供一种数据校验装置,用于数据迁移系统,包括:获取参数单元,用于读取数据校验任务的配置文件,获取数据校验任务的配置参数;所述配置参数包括源表信息、目标表信息及数据对比逻辑;获取数据单元,用于根据所述源表信息和所述目标表信息,获取待校验的原始数据和目标数据;对比单元,用于针对各个具有相同数据标识的所述原始数据和所述目标数据构成的数据对,根据所述数据对比逻辑对所述数据对进行数据校验;其中,所述源表信息包括存储所述原始数据的源数据表的名称、所述源数据表所属源数据库的名称和所述原始数据的数据标识的名称;所述目标表信息包括存储所述目标数据的目标数据表的名称、所述目标数据表所属目标数据库的名称、及与所述原始数据的数据标识的名称相对应的所述目标数据的数据标识的名称。相应的,本申请还提供一种电子设备,包括:显示器;处理器;以及存储器,所述存储器被配置成存储数据校验装置,所述数据校验装置被所述处理器执行时,包括如下步骤:读取数据校验任务的配置文件,获取数据校验任务的配置参数;所述配置参数包括源表信息、目标表信息及数据对比逻辑;根据所述源表信息和所述目标表信息,获取待校验的原始数据和目标数据;针对各个具有相同数据标识的所述原始数据和所述目标数据构成的数据对,根据所述数据对比逻辑对所述数据对进行数据校验;其中,所述源表信息包括存储所述原始数据的源数据表的名称、所述源数据表所属源数据库的名称和所述原始数据的数据标识的名称;所述目标表信息包括存储所述目标数据的目标数据表的名称、所述目标数据表所属目标数据库的名称、及与所述原始数据的数据 标识的名称相对应的所述目标数据的数据标识的名称。相应的,本申请还提供一种数据迁移系统,包括:数据迁移装置,以及上述的数据校验装置。与现有技术相比,本申请具有以下优点:本申请提供的数据校验的方法、装置及电子设备,通过读取数据校验任务的配置文件;根据配置文件包括的源表信息和目标表信息,获取待校验的原始数据和目标数据;针对各个具有相同数据标识的原始数据和目标数据构成的数据对,根据配置文件包括的数据对比逻辑对数据对进行数据校验。采用本申请提供的方法,将数据校验任务的表达抽取成配置文件,在通用的数据校验程序中,通过读取配置文件获取数据校验任务的各种信息,进而对数据迁移前后的数据进行校验,从而达到复用数据校验程序的效果。附图说明图1是本申请的数据校验方法实施例的流程图;图2是本申请的数据校验方法实施例步骤s103的具体流程图;图3是本申请的数据校验方法实施例步骤s103的又一具体流程图;图4是本申请的数据校验装置实施例的示意图;图5是本申请的电子设备实施例的示意图;图6是本申请的数据迁移实施例的示意图。具体实施方式在下面的描述中阐述了很多具体细节以便于充分理解本申请。但是本申请能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本申请内涵的情况下做类似推广,因此本申请不受下面公开的具体实施的限制。在本申请中,提供了一种数据校验方法、装置及电子设备,以及一种数据迁移系统。在下面的实施例中逐一进行详细说明。本申请提供的数据校验方法,其核心的基本思想为:将数据校验任务的表达抽取成配置文件,在通用的数据校验程序中,通过读取配置文件获取数据校验任务的各种信息,进而对数据迁移前后的数据进行校验,从而达到复用数据 校验程序的效果。请参考图1,其为本申请的数据校验方法实施例的流程图。所述方法包括如下步骤:步骤s101:读取数据校验任务的配置文件,获取数据校验任务的配置参数。本申请实施例提供的数据校验方法,通过可通用的数据校验程序执行特定的数据校验任务。可通用的数据校验程序在运行过程中,需要获取与特定数据校验任务相关的各种信息。本申请实施例提供的方法,将与数据校验任务相关的各种信息作为配置参数存储在数据校验任务的配置文件中。因此,要执行本申请实施例提供的方法,首先需要读取数据校验任务的配置文件,以获取与数据校验任务相关的各种信息。本申请实施例所述的数据校验任务的配置参数包括但不限于:源表信息、目标表信息及数据对比逻辑。根据源表信息能够获取原始数据,即:数据迁移前的数据。所述的源表信息包括但不限于:存储原始数据的源数据表的名称、源数据表所属源数据库的名称、及原始数据的数据标识的名称。所述的原始数据的数据标识的名称是指,原始数据唯一标识的字段名称。相应的,根据目标表信息能够获取目标数据,即:数据迁移后的数据。所述的目标表信息包括但不限于:存储目标数据的目标数据表的名称、目标数据表所属目标数据库的名称、及与原始数据的数据标识的名称相对应的目标数据的数据标识的名称。所述的目标数据的数据标识的名称是指,目标数据的唯一标识的字段名称。需要说明的是,原始数据的唯一标识的字段名称既可以为一个字段的名称(通常为主键),还可以为多个字段的名称。总之,只要能够起到对原始数据进行唯一标识作用的字段名称或多个字段名称的组合,均可作为原始数据的数据标识。同理,目标数据的数据标识也是如此。此外,在实际应用中,目标数据的数据标识的名称可能与对应的原始数据的数据标识的名称并不相同。为了能够将原始数据及与其相对应的目标数据结成数据对以进行数据校验,本申请实施例所述的目标数据的数据标识的名称需要与原始数据的数据标识的名称相对应。例如,原始数据的数据标识的名称包括:item_id、dist_code和user_id三个字段名称,而目标数据的数据标识的名称包括:sc_item_id、store_code和user_id三个字段名称,根据字段名称的顺序,可判定item_id与sc_item_id相对应、dist_code与store_code相对应。下面给出本实施例的数据校验任务的配置文件的内容,以更加直观的方式说明上述相关概念。本实施例的数据校验任务的配置文件内容如下:<?xmlversion=”1.0”encoding=”gbk”?><info><!--源表信息><table><name>ipm_trade_inv_dist</name><db>alinv</db><app>alinu_app</app><keys>item_id:i,dist_code:s,user_id:i</keys></table><!--目标表信息><table><name>wh_inventory</name><db>cainiao_whc</db><app>cainiao_whc_app</app><keys>sc_item_id:i,store_code:s,user_id:i</keys></table><!--数据对比范围><muti><tablename>ipm_trade_inv_dist</tablename><tabs>*</tabs><dbid>alinv_0000_group</dbid><skips>status=1</skips></muti><!--数据对比逻辑><compare>ipm_trade_inv_dist$item_id==wh_inventory$sc_item_id</compare><compare>ipm_trade_inv_dist$dist_code==wh_inventory$store_code</compare><compare>ipm_trade_inv_dist$quantity-1==wh_inventory$quantity</compare><compare>(ipm_trade_inv_dist$version==1||ipm_trade_inv_dist$version==0)?true:false</compare></info>上述代码中第一个<table>标签内的信息为源表信息,其中子标签<name>内的信息为源数据表的名称,子标签<db>内的信息为源数据库的名称,子标签<keys>内的信息为原始数据的数据标识的名称。上述代码中第二个<table>标签内的信息为目标表信息,其中子标签 <name>内的信息为目标数据表的名称,子标签<db>内的信息为目标数据库的名称,子标签<keys>内的信息为目标数据的数据标识的名称。通过上述代码可见,原始数据的数据标识的名称包括:item_id、dist_code和user_id三个字段名称,目标数据的数据标识的名称包括:sc_item_id、store_code和user_id三个字段名称,根据字段名称的排列顺序,可判定item_id与sc_item_id相对应、dist_code与store_code相对应。本实施例采用xml语言(extensiblemarkuplaguage,可扩展性标记语言)标记数据校验任务的配置文件,因此,可通过xml解析器(即:xmlparser)获取数据校验任务的各种信息。需要说明的是,配置文件的编写格式可以为xml格式,还可以为json(javascriptobjectnotation,轻量级的数据交换格式)等其他格式。配置文件的各种格式的变化及各种标签的变化,都只是具体实施方式的变更,都不偏离本申请的核心,因此都在本申请的保护范围之内。获取到数据校验任务的配置参数后,就可以进入下一步根据配置参数获取待校验的数据。步骤s103:根据所述源表信息和所述目标表信息,获取待校验的原始数据和目标数据。本申请实施例所述的源表信息包括存储原始数据的源数据表的名称和源数据表所属源数据库的名称。首先,可根据源数据表的名称和源数据库的名称,定位到存储原始数据的源数据表;然后,再从定位好的源数据表中获取待校验的原始数据。同理,根据目标表信息包括的目标数据表的名称和目标数据库的名称,能够从目标数据表中获取到待校验的目标数据。请参考图2,其为本申请的数据校验方法实施例步骤s103的具体流程图。作为一种可选的实施方式,获取待校验的原始数据和目标数据,可包括如下步骤:步骤s201:根据所述源数据表的名称和所述源数据库的名称,构建并执行第一查询语句以获取所述原始数据。本申请实施例所述的第一查询语句是指,用于获取所述原始数据的查询语句,例如,源数据表的名称为ipm_trade_inv_dist,源数据库的名称为alinv,第一查询语句为:select*fromalinv.ipm_trade_inv_dist,即:第一查询语句用于获取源数据库alinv中源数据表ipm_trade_inv_dist内的所有原始数据。本申请实施例以存储原始数据的源数据表为主表,以存储目标数据的目标数据表为从属表。因此,本实施例首先根据源表信息获取原始数据,获取到原始数据后,再根据原始数据的数据标识和目标表信息,获取对应的目标数据。步骤s203:针对获取到的各个所述原始数据,根据所述原始数据的数据标识和所述目标数据的数据标识的名称,构建第二查询语句包括的第二查询条件。本申请实施例所述的第二查询语句是指,用于获取与步骤s201获取到的特定原始数据相对应的目标数据的查询语句。第二查询语句包括第二查询条件,以步骤s101给出的配置文件为例,对于数据标识为item_id=100057089、dist_code=”alog-0001”、user_id=725677994的原始数据,第二查询条件为sc_item_id=100057089andstore_code=”alog-0001”anduser_id=725677994。步骤s205:根据所述第二查询条件、所述目标数据表的名称和所述目标数据库的名称,构建所述第二查询语句。通过步骤s203构建第二查询条件后,根据第二查询条件、目标数据表的名称和目标数据库的名称,即可构建第二查询语句。例如,以步骤s203给出的第二查询条件为例,第二查询语句为:select*fromcainiao_whc.wh_inventorywheresc_item_id=100057089andstore_code=”alog-0001”anduser_id=725677994,即:第二查询语句用于获取与原始数据相对应的目标数据。步骤s207:执行所述第二查询语句以获取与所述原始数据相对应的所述目标数据。最后,通过数据库系统执行第二查询语句,能够获取与原始数据相对应的目标数据。需要注意的是,通过上述步骤s201获取到的原始数据包括原始数据的各个字段值,因此,获取到的原始数据将占用较大的存储空间。可见,该方法仅适用于数据量较少的情况。然而,实际应用中的待校验的原始数据的数据量通常较大,例如,字段数量较多或记录数较多均可能导致较大的数据量。在这种情况下,如果仍采用上述步骤s201获取待校验的原始数据,则可能出现数据量过大所导致的系统崩溃问题。为了避免出现数据量过大所导致的系统崩溃问题,本申请实施例提供一种获取待校验的原始数据和目标数据的优选实施方式。请参考图3,其为本申请的数据校验方法实施例步骤s103的又一具体流程图。作为一种优选的实施方式, 获取待校验的原始数据和目标数据,可包括如下步骤:步骤s301:根据所述源数据表的名称、所述源数据库的名称和所述原始数据的数据标识的名称,构建并执行第三查询语句以获取所述原始数据的数据标识。本申请实施例所述的第三查询语句是指,用于获取原始数据的数据标识的查询语句。与上述第一查询语句不同之处在于,第三查询语句仅获取原始数据的数据标识,而非获取原始数据的所有字段值,因此,能够有效减少获取到的数据量。例如,源数据表的名称为ipm_trade_inv_dist,源数据库的名称为alinv,原始数据的数据标识的名称包括:item_id、dist_code和user_id三个字段名称,第三查询语句为:selectitem_id,dist_code,user_idfromalinv.ipm_trade_inv_dist,即:第三查询语句用于获取源数据库alinv中源数据表ipm_trade_inv_dist内的所有原始数据的item_id、dist_code和user_id三个字段值。步骤s303:遍历获取到的各个所述原始数据的数据标识,根据所述原始数据的数据标识,获取与所述原始数据的数据标识相对应的所述原始数据,以及获取与所述原始数据的数据标识相对应的所述目标数据。对于获取到的各个原始数据的数据标识,需要根据原始数据的数据标识,获取与原始数据的数据标识相对应的原始数据;以及根据原始数据的数据标识和目标数据的数据标识的名称,获取与原始数据的数据标识相对应的目标数据。其中,获取与原始数据的数据标识相对应的原始数据,可包括如下步骤:1)根据所述原始数据的数据标识和所述原始数据的数据标识的名称,构建所述第四查询语句包括的第四查询条件;2)根据所述第四查询条件、所述源数据表的名称和所述源数据库的名称,构建所述第四查询语句;3)执行所述第四查询语句,获取与所述原始数据的数据标识相对应的所述原始数据。1)根据所述原始数据的数据标识和所述原始数据的数据标识的名称,构建所述第四查询语句包括的第四查询条件。本申请实施例所述的第四查询语句是指,用于获取与原始数据的数据标识相对应的原始数据的查询语句。第四查询语句包括第四查询条件,以步骤s101给出的配置文件为例,对于数据标识为item_id=100057089、dist_code=”alog-0001”、user_id=725677994的原始数据,第四查询条件为item_id=100057089anddist_code=”alog-0001”anduser_id=725677994。2)根据所述第四查询条件、所述源数据表的名称和所述源数据库的名称,构建所述第四查询语句。通过上一步骤构建第四查询条件后,根据第四查询条件、源数据表的名称和源数据库的名称,即可构建第四查询语句。例如,以上一步骤给出的第四查询条件为例,第四查询语句为:select*fromalinv.ipm_trade_inv_distwhereitem_id=100057089anddist_code=”alog-0001”anduser_id=725677994,即:第四查询语句用于获取源数据库alinv中源数据表ipm_trade_inv_dist内的原始数据的item_id=100057089、且dist_code=”alog-0001”、且user_id=725677994的原始数据的所有字段值。3)执行所述第四查询语句,获取与所述原始数据的数据标识相对应的所述原始数据。最后,通过数据库系统执行第四查询语句,能够获取与原始数据的数据标识相对应的原始数据。以上通过图2和图3给出了两种获取待校验的原始数据和目标数据的方式。采用图2给出的方案,首先需要获取全部待校验的原始数据的全部字段值,因此存在系统崩溃的风险;采用图3给出的方案,首先仅获取全部待校验的原始数据的数据标识,然后,针对每个数据标识,再获取与之对应的原始数据和目标数据,每获取到一对待校验的原始数据和目标数据之后,立即根据配置文件包括的数据对比逻辑,对该对数据进行数据校验,能够避免出现系统崩溃的问题。在数据库应用中,单库单表是最常见的数据库设计,例如,用户表放在一个数据库中,所有的用户资料都可以在该数据库中的用户表中查到。在大数据时代,一张数据表的记录数可能达到几千万甚至上亿条。当一张表的数据达到一定数量级(例如,几千万条记录)时,查询一次数据所花费的时间会变多,如果有联合查询的话,很有可能会发生数据库崩溃。为了减小数据库的负担、缩短查询时间,通常采用分库分表的方式对数据量较大且访问较为频繁的数据表进行存储。本申请实施例的原始数据和目标数据均采用分库分表的方式进行存储。下面以分库分表存储的原始数据为例,对数据的检索问题作简要说明。由于对分库分表存储的目标数据的处理方式与对分库分表的原始数据的处理方式相同, 本申请实施例不再赘述对分库分表的目标数据的访问处理。由于同一数据表的不同数据位于不同的数据库、不同的数据表中,因此,在检索数据时需要遍历各个相关数据分表。为了能够提高数据检索速度,在本实施例中,数据校验任务的配置文件所包括的原始数据的数据标识的名称包括源数据表的分表字段的字段名称。例如,用户表的分表字段可以为用户姓氏,按姓氏将不同姓氏的用户资料分别存储在不同的分表中,如张姓和李姓的用户资料存储在表一中、王姓和赵姓的用户资料存储在表十中等,分表数据的总和构成一份完整的用户表。在以分库分表方式存储原始数据时,本实施例在构建上述第四查询语句之前,还包括如下步骤:首先,需要获取源数据表的分表路由规则;然后,根据配置文件中给出的源数据表的分表字段的字段名称、原始数据的数据标识中的源数据表的分表字段的值、和源数据表的分表路由规则,计算获取存储原始数据的分库的名称和分表的名称。在获取到存储原始数据的分库的名称和分表的名称之后,构建第四查询语句,采用如下方式:以存储原始数据的分库的名称所标识的分库中的、分表的名称所标识的分表为查询对象,根据上述第四查询条件构建第四查询语句,以获取与原始数据的数据标识相对应的原始数据。本申请实施例所述的分表路由规则是指,对数据进行分表存储的规则。由于配置文件中给出了源数据表的分表字段的字段名称,因此,步骤s301所获取到的原始数据的数据标识中包括源数据表的分表字段的值。根据源数据表的分表路由规则,能够从原始数据的数据标识的名称中获取到分表字段的字段名称,再根据分表字段的字段名称、原始数据的数据标识中的该分表字段的值、和分表路由规则,即可计算获取存储原始数据的分库的名称和分表的名称。由于仅以存储原始数据的分库的名称所标识的分库中的、分表的名称所标识的分表为查询对象,因而能够避免全表查询数据,从而使得第四查询语句的执行速度得到极大的提升。本申请实施例所述的分表路由规则可直接存储在数据校验任务的配置文件中,通过读取该配置文件的方式,获取源表信息包括的源数据表的分表路由规则,再执行后续步骤。采用该方式存储分表路由规则,对于同一分表路由规则,需要在不同数据校验任务的配置文件中分别设置该分表路由规则,可见,该方式存在分表路由规则无法复用的问题。在实际应用中,可通过特定数据的分布式数据访问层对分库分表存储的特定数据进行增删改查的处理。所述的分表路由规则作为分布式数据访问层的配置信息,可设置在分布式数据访问层的配置文件中。原始数据的分布式数据访问层的配置信息可包括源数据表的分表路由规则、表结构和表地址等信息。为了能够获取原始数据的分布式数据访问层的配置信息,可在数据校验任务的配置文件中设置原始数据的分布式数据访问层的配置文件的标识。以步骤s101给出的配置文件为例,该文件中第一个<table>标签的子标签<app>内的信息即为原始数据的分布式数据访问层的配置文件的标识,第二个<table>标签的子标签<app>内的信息即为目标数据的分布式数据访问层的配置文件的标识。通过读取数据校验任务的配置文件,能够获取原始数据的分布式数据访问层的配置文件的标识;进而,根据原始数据的分布式数据访问层的配置文件的标识,读取原始数据的分布式数据访问层的配置文件,获取原始数据的分布式数据访问层的配置信息,例如,源数据表的分表路由规则、表结构和表地址等信息;进而,根据原始数据的分布式数据访问层的配置信息,对原始数据的分布式数据访问层进行初始化,使得能够通过初始化的分布式数据访问层对原始数据进行访问。为了有效利用已初始化的分布式数据访问层,本实施例获取到原始数据的分布式数据访问层的配置文件的标识后,还包括如下步骤:1)根据所述源表信息包括的所述原始数据的分布式数据访问层的配置文件的标识,判断执行本申请的方法的机器本地是否存在已初始化的所述原始数据的分布式数据访问层;2)若上述判断为否,则根据所述源表信息包括的所述原始数据的分布式数据访问层的配置文件的标识,读取所述原始数据的分布式数据访问层的配置文件,以获取对应所述原始数据的分布式数据访问层的配置信息;并根据所述原始数据的分布式数据访问层的配置信息,初始化所述原始数据的分布式数据访问层;3)若上述判断为是,则通过已初始化的所述原始数据的分布式数据访问层,对原始数据进行操作。为了能够复用已初始化的原始数据的分布式数据访问层,本实施例在初始化原始数据的分布式数据访问层后,还将原始数据的分布式数据访问层的配置文件的标识、与原始数据的分布式数据访问层的对应关系存储在机器本地。此外,为了能够对待校验的原始数据的数据范围进行限定,本申请实施例所述的数据校验任务的配置文件还可包括原始数据的数据范围。所述的数据范 围包括原始数据的筛选规则、存储原始数据的源数据表的分表的名称和源数据库的分库的名称的至少一者。通过读取配置文件,通用的数据校验程序能够对原始数据进行选取。以步骤s101给出的配置文件为例,该文件中<muti>标签内的信息即为原始数据的数据范围,其中,子标签<tablename>内的信息为源数据表的名称,子标签<tabs>内的信息为分表表名(*表示所有分表),子标签<dbid>内的信息为分库库名,子标签<skips>内的信息为筛选规则。以数据范围同时包括原始数据的筛选规则、存储原始数据的源数据表的分表的名称和源数据库的分库的名称为例,获取待校验的原始数据,可采用如下方式:以源数据库的分库的名称所标识的分库中的、源数据表的分表的名称所标识的分表为查询对象,以原始数据的筛选规则为查询条件,获取待校验的原始数据。获取到待校验的原始数据及与其对应的目标数据之后,就可以进入下一步,根据配置文件中设定的数据对比逻辑,对成对的原始数据和目标数据进行数据校验。步骤s105:针对各个具有相同数据标识的所述原始数据和所述目标数据构成的数据对,根据所述数据对比逻辑对所述数据对进行数据校验。只有具有相同数据标识的原始数据和目标数据才具有可比性。本步骤即对具有相同数据标识的原始数据和目标数据构成的数据对,根据数据对比逻辑对数据对进行数据校验。所述的数据对比逻辑是指,原始数据和目标数据的对应规则。以步骤s101给出的配置文件为例,该文件中<compare>标签内的信息即为数据对比逻辑,配置文件可包括多个数据对比逻辑。本申请实施例提供的数据校验方法,在配置文件中支持使用伪代码,以表示需要对比的字段和操作符。在对数据进行对比时,可使用正则表达式来匹配数据对比逻辑中的指定字段,使用查询到的数据值来替代字段,并根据替换后的表达式进行数据校验。在本实施例中,根据数据对比逻辑对数据对进行数据校验,包括如下步骤:1)通过正则表达式匹配数据对比逻辑,获取数据对比逻辑包括的源数据表的特定字段、及目标数据表的特定字段;2)将数据对比逻辑中源数据表的特定字段替换为原始数据的特定字段的值,及将数据对比逻辑中目标数据表的特定字段 替换为目标数据的特定字段的值,生成数据对比表达式;3)对数据对比表达式进行计算,获取数据校验结果。由于数据校验的结果是判断新系统能否正式启用的重要依据,因此,本申请实施例提供的方法,还包括:记录数据校验结果。需要注意的是,由于大数据对比需要较长的时间,可采用后台线程执行本申请实施例提供的方法,并将数据校验结果存储在服务器中。此外,为了能够控制对比数据的数据量,避免发生系统崩溃,本实施例获取待校验的原始数据,采用如下方式:若待校验的原始数据的数据量大于预设的最大数据量阈值,则以预设的最大数据量阈值为数据获取单位,分批次获取待校验的原始数据,并分批次对获取到的待校验的原始数据和目标数据进行数据校验,即:在针对特定批次的待校验的原始数据和目标数据进行数据校验后,再对下一批次的待校验的原始数据和目标数据进行数据校验。所述的最大数据量阈值可根据经验设定,例如,对于同一个数据库,可将该值设置为5000条。在上述的实施例中,提供了一种数据校验方法,与之相对应的,本申请还提供一种数据校验装置。该装置是与上述方法的实施例相对应。请参看图4,其为本申请的数据校验装置实施例的示意图。由于装置实施例基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的装置实施例仅仅是示意性的。本实施例的一种数据校验装置,用于数据迁移系统,包括:获取参数单元101,用于读取数据校验任务的配置文件,获取数据校验任务的配置参数;所述配置参数包括源表信息、目标表信息及数据对比逻辑;获取数据单元103,用于根据所述源表信息和所述目标表信息,获取待校验的原始数据和目标数据;对比单元105,用于针对各个具有相同数据标识的所述原始数据和所述目标数据构成的数据对,根据所述数据对比逻辑对所述数据对进行数据校验;其中,所述源表信息包括存储所述原始数据的源数据表的名称、所述源数据表所属源数据库的名称和所述原始数据的数据标识的名称;所述目标表信息包括存储所述目标数据的目标数据表的名称、所述目标数据表所属目标数据库的名称、及与所述原始数据的数据标识的名称相对应的所述目标数据的数据标识的名称。可选的,所述获取数据单元103包括:获取原始数据子单元,用于根据所述源数据表的名称和所述源数据库的名称,构建并执行第一查询语句以获取所述原始数据;所述第一查询语句是指,用于获取所述原始数据的查询语句;构建查询条件子单元,用于针对获取到的各个所述原始数据,根据所述原始数据的数据标识和所述目标数据的数据标识的名称,构建第二查询语句包括的第二查询条件;所述第二查询语句是指,用于获取与所述原始数据相对应的所述目标数据的查询语句;构建查询语句子单元,用于根据所述第二查询条件、所述目标数据表的名称和所述目标数据库的名称,构建所述第二查询语句;执行查询语句子单元,用于执行所述第二查询语句以获取与所述原始数据相对应的所述目标数据。可选的,所述获取数据单元103包括:获取数据标识子单元,用于根据所述源数据表的名称、所述源数据库的名称和所述原始数据的数据标识的名称,构建并执行第三查询语句以获取所述原始数据的数据标识;所述第三查询语句是指,用于获取所述原始数据的数据标识的查询语句;获取数据子单元,用于遍历获取到的各个所述原始数据的数据标识,根据所述原始数据的数据标识,获取与所述原始数据的数据标识相对应的所述原始数据,以及获取与所述原始数据的数据标识相对应的所述目标数据;所述获取数据子单元包括:获取原始数据子单元,用于根据所述原始数据的数据标识,获取与所述原始数据的数据标识相对应的所述原始数据;获取目标数据子单元,用于根据所述原始数据的数据标识,获取与所述原始数据的数据标识相对应的所述目标数据;相应的,根据所述数据对比逻辑对所述数据对进行数据校验,采用如下方式:在获取到与所述原始数据的数据标识相对应的所述原始数据、及与所述原始数据的数据标识相对应的所述目标数据之后,根据所述数据对比逻辑,对所述与所述原始数据的数据标识相对应的所述原始数据、及所述与所述原始数据 的数据标识相对应的所述目标数据进行数据校验。可选的,所述获取原始数据子单元包括:构建查询条件子单元,用于根据所述原始数据的数据标识和所述原始数据的数据标识的名称,构建所述第四查询语句包括的第四查询条件;所述第四查询语句是指,用于获取与所述原始数据的数据标识相对应的所述原始数据的查询语句;构建查询语句子单元,用于根据所述第四查询条件、所述源数据表的名称和所述源数据库的名称,构建所述第四查询语句;执行查询语句子单元,用于执行所述第四查询语句,获取与所述原始数据的数据标识相对应的所述原始数据。可选的,所述原始数据采用分库分表方式存储;所述原始数据的数据标识的名称包括所述源数据表的分表字段的字段名称;所述获取原始数据子单元还包括:获取分表路由规则子单元,用于获取所述源数据表的分表路由规则;定位子单元,用于根据所述源数据表的分表字段的字段名称、所述原始数据的数据标识中的所述源数据表的分表字段的值、和所述源数据表的分表路由规则,计算获取存储所述原始数据的分库的名称和分表的名称;所述构建所述第四查询语句,采用如下方式:以所述存储所述原始数据的分库的名称所标识的分库中的、所述分表的名称所标识的分表为查询对象,根据所述第四查询条件构建所述第四查询语句。可选的,所述原始数据采用分库分表方式存储;所述原始数据的数据标识的名称包括所述源数据表的分表字段的字段名称;所述执行所述第四查询语句,采用如下方式:通过所述原始数据的分布式数据访问层,执行所述第四查询语句;所述原始数据的分布式数据访问层的配置信息存储在所述原始数据的分布式数据访问层的配置文件中;所述原始数据的分布式数据访问层的配置信息包括所述源数据表的分表路由规则、表结构和表地址;所述源表信息包括所述原始数据的分布式数据访问层的配置文件的标识;所述装置还包括:第一判断单元,用于根据所述源表信息包括的所述原始数据的分布式数据访问层的配置文件的标识,判断执行所述方法的机器本地是否存在已初始化的所述原始数据的分布式数据访问层;第一初始化单元,用于若上述判断为否,则根据所述源表信息包括的所述原始数据的分布式数据访问层的配置文件的标识,读取所述原始数据的分布式数据访问层的配置文件,以获取对应所述原始数据的分布式数据访问层的配置信息;并根据所述原始数据的分布式数据访问层的配置信息,初始化所述原始数据的分布式数据访问层。可选的,还包括:第一存储单元,用于将所述原始数据的分布式数据访问层的配置文件的标识、与所述原始数据的分布式数据访问层的对应关系存储在所述机器本地。可选的,所述获取目标数据子单元包括:构建查询条件子单元,用于根据所述原始数据的数据标识和所述目标数据的数据标识的名称,构建第五查询语句包括的第五查询条件;所述第五查询语句是指,用于获取与所述原始数据的数据标识相对应的所述目标数据的查询语句;构建查询语句子单元,用于根据所述第五查询条件、所述目标数据表的名称和所述目标数据库的名称,构建所述第五查询语句;执行查询语句子单元,用于执行所述第五查询语句以获取与所述原始数据的数据标识相对应的所述目标数据。可选的,所述目标数据采用分库分表方式存储;所述目标数据的数据标识的名称包括所述目标数据表的分表字段的字段名称;所述获取目标数据子单元还包括:获取分表路由规则子单元,用于获取所述目标数据表的分表路由规则;定位子单元,用于根据所述目标数据表的分表字段的字段名称、所述原始数据的数据标识中的所述源数据表的分表字段的值、和所述目标数据表的分表路由规则,计算获取存储所述目标数据的分库的名称和分表的名称;所述构建所述第五查询语句,采用如下方式:以所述存储所述目标数据的分库的名称所标识的分库中的、所述分表的名称所标识的分表为查询对象,根据所述第五查询条件构建所述第五查询语句。可选的,所述目标数据采用分库分表方式存储;所述目标数据的数据标识的名称包括所述目标数据表的分表字段的字段名称;所述执行所述第五查询语句,采用如下方式:通过所述目标数据的分布式数据访问层,执行所述第五查询语句;所述目标数据的分布式数据访问层的配置信息存储在所述目标数据的分布式数据访问层的配置文件中;所述目标数据的分布式数据访问层的配置信息包括所述目标数据表的分表路由规则、表结构和表地址;所述目标表信息包括所述目标数据的分布式数据访问层的配置文件的标识;所述装置还包括:第二判断单元,用于根据所述目标表信息包括的所述目标数据的分布式数据访问层的配置文件的标识,判断执行所述方法的机器本地是否存在已初始化的所述目标数据的分布式数据访问层;第二初始化单元,用于若上述判断为否,则根据所述目标表信息包括的所述目标数据的分布式数据访问层的配置文件的标识,读取所述目标数据的分布式数据访问层的配置文件,以获取对应所述目标数据的分布式数据访问层的配置信息;并根据所述目标数据的分布式数据访问层的配置信息,初始化所述目标数据的分布式数据访问层。可选的,还包括:第二存储单元,用于将所述目标数据的分布式数据访问层的配置文件的标识、与所述目标数据的分布式数据访问层的对应关系存储在所述机器本地。可选的,还包括:第三存储单元,用于记录数据校验结果。请参考图5,其为本申请的电子设备实施例的示意图。由于设备实施例基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的设备实施例仅仅是示意性的。本实施例的一种电子设备,该电子设备包括:显示器101;处理器102;以及存储器103,所述存储器103被配置成存储数据校验装置,所述数据校验装置被所述处理器102执行时,包括如下步骤:读取数据校验任务的配置文件,获取数据校验任务的配置参数;所述配置参数包括源表信息、目标表信息及数据对比逻辑;根据所述源表信息和所述目标表信息,获取待校验的原始数据和目 标数据;针对各个具有相同数据标识的所述原始数据和所述目标数据构成的数据对,根据所述数据对比逻辑对所述数据对进行数据校验;其中,所述源表信息包括存储所述原始数据的源数据表的名称、所述源数据表所属源数据库的名称和所述原始数据的数据标识的名称;所述目标表信息包括存储所述目标数据的目标数据表的名称、所述目标数据表所属目标数据库的名称、及与所述原始数据的数据标识的名称相对应的所述目标数据的数据标识的名称。本申请实施例还提供了一种数据迁移系统,如图6所示,该系统包括数据迁移装置101和上述实施例所述的数据校验装置102。为了便于理解本申请的技术方案,首先对数据迁移的过程作简要说明。数据迁移的实现可以分为三个阶段:数据迁移前的准备阶段、数据迁移的实施阶段和数据迁移后的校验阶段。其中,准备阶段的工作是完成数据迁移的主要基础,该阶段工作具体可包括建立新旧系统数据库的数据字典、建立新老系统数据库表的映射关系、对无法映射字段的处理方法、开发及部属etl(extract-transform-load,数据抽取、转换、加载)工具、编写数据转换的测试计划和数据校验程序等。完成数据迁移前的准备工作后,即可进入到实施阶段。数据迁移的实施是实现数据迁移的三个阶段中最重要的环节,该阶段任务为:将源数据表中的原始数据迁移到目标数据表中。在完成数据迁移的处理后,即可进入到数据校验阶段,对迁移后的数据进行校验。本申请实施例提供的数据迁移系统,通过数据迁移装置101,将源数据表中的原始数据迁移到目标数据表中;通过数据校验装置102对迁移后的数据进行校验。数据校验装置102,通过读取数据校验任务的配置文件,获取数据校验任务的配置参数;根据配置参数包括的源表信息和目标表信息,获取待校验的原始数据和目标数据;针对各个具有相同数据标识的原始数据和目标数据构成的数据对,根据配置参数包括的数据对比逻辑对数据对进行数据校验。其中,数据校验任务的配置文件可在准备阶段编写。本申请提供的数据校验的方法、装置及电子设备,通过读取数据校验任务的配置文件;根据配置文件包括的源表信息和目标表信息,获取待校验的原始数据和目标数据;针对各个具有相同数据标识的原始数据和目标数据构成的数据对,根据配置文件包括的数据对比逻辑对数据对进行数据校验。采用本申请提供的方法,将数据校验任务的表达抽取成配置文件,在通用的数据校验程序中,通过读取配置文件获取数据校验任务的各种信息,进而对数据迁移前后的 数据进行校验,从而达到复用数据校验程序的效果。本申请虽然以较佳实施例公开如上,但其并不是用来限定本申请,任何本领域技术人员在不脱离本申请的精神和范围内,都可以做出可能的变动和修改,因此本申请的保护范围应当以本申请权利要求所界定的范围为准。在一个典型的配置中,计算设备包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flashram)。内存是计算机可读介质的示例。1、计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。2、本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1