一种批量异构数据源自动比对系统、方法及设备与流程

文档序号:26944657发布日期:2021-10-12 17:49阅读:137来源:国知局
1.本发明涉及数据处理领域,尤其涉及一种批量异构数据源自动比对系统、方法及设备。
背景技术
::2.异构数据源(disparatedatasource)广义上讲是指数据结构、存取方式、形式不一样的多个数据源。例如,在一个系统中,同时包含由关系型数据库oracle/sqlserver/mysql、excel文件或txt文本数据、xml数据等不同的数据源的一个整体,就是一个异构的数据源。3.在数据测试过程中,经常需要对关系型数据库(mysql、oracle等)、非关系型数据库(hive、clickhouse等)等各种异构数据源的表数据做数据比对。异构数据不能直接通过一条sql实现比对,需要通过脚本方式比对。4.申请人的在先专利“一种表数据批量自动比对的控制方法及装置”(申请号为202011368859.x)可以实现任意数据源的比对(例如,hive与mysql),但如果需要比对clickhouse与hive、clickhouse与mysql数据时,需要增加两个比对脚本。即通过脚本方式比对时,对于新增的数据源,不能复用已有脚本,脚本数目会成倍增长,而且不能实现异构数据源混合批量比对。5.此外,在先专利“一种表数据批量自动比对的控制方法及装置”中,需要每次查询表的全部数据,然后借助python中的pandas进行数据比对。当表数据量比较大时,一次查询全部数据会出现内存溢出,造成比对失败。技术实现要素:6.本发明的目的在于提供一种批量异构数据源自动比对系统、方法及设备,以解决上述技术背景中提出的问题。7.为实现上述目的,本发明采用以下技术方案:8.本技术第一个方面提供了一种批量异构数据源自动比对系统,包括:9.多个数据源模块,每个数据源模块分别对应一种数据源,每个数据源模块被配置为用于创建数据源连接,关闭数据源连接,获取表结构,调取待比对的源表与目标表进行总量查询所获取的总量结果集,以及调取所述源表与目标表进行分页明细查询所获取的明细结果集;10.数据比对模块,被配置为用于创建临时表,将数据源模块调取的总量结果集插入所述临时表中,得到源临时表和目标临时表,对源临时表和目标临时表进行比对,获取所述源表、目标表的总量比对结果和差异数据,以及将数据源模块调取的明细结果集插入所述临时表中,得到源临时表和目标临时表,对源临时表和目标临时表进行比对,获取所述源表、目标表的明细比对结果和差异数据;其中,所述临时表包括单字段临时表和双字段临时表;11.批量比对脚本,被配置为将批量待比对的源表和目标表分别存储在数组中,调用所述数据比对模块对所述源表和目标表进行数据比对;12.比对结果形成模块,被配置为根据所述源表和目标表的比对结果生成结果文件,以便于用户查看。13.优选地,所述数据比对模块,还被配置为用于删除临时表。14.优选地,所述数组的元素是存储数据源类型、数据源连接信息和表名的元组。15.优选地,所述数据源的数据类型包括mysql、oracle、postgresql、clickhouse、hive、oceanbase、hbase、ots及odps中至少一种。16.优选地,所述数据比对模块包括:17.第一处理子模块,用于创建两字段临时表,作为多张待比对表数据中的至少一对源表以及目标表对应的总量临时表,将获取的源表的总量结果集、目标表的总量结果集插入到总量临时表中,比对源表和目标表对应的总量临时表,获取总量比对结果和差异数据;18.第二处理子模块,用于创建所述源表和目标表对应的单字段临时表,将获取的源表的分页明细结果集、目标表的分页明细结果集插入到单字段临时表中,获取单字段临时表的分组明细数据;以及创建所述源表和目标表对应的两字段明细临时表,将获取的单字段临时表的分组明细数据插入到两字段明细临时表中,比对源表和目标表对应的两字段明细临时表,获取明细比对结果和差异数据。19.优选地,所述数据源模块包括:20.数据源连接子模块,用于获得所述数据源模块与其对应的数据源之间的通讯链路;21.数据源关闭子模块,用于断开所述数据源模块与其对应的数据源之间的通讯链路;22.第一获取子模块,用于查询多张待比对的表数据的表结构,并获取多张待比对的表数据的表字段,对所述表字段进行处理以获得总量查询sql以及分页明细查询sql。23.更优选地,所述数据源模块还包括:24.第二处理子模块,用于根据预设的每页返回的分页明细的最大条目数,以及根据所述第一获取子模块获取表结构,将表全部字段使用指定拼接符进行拼接,将拼接后的数据进行md5加密,使之变为固定长度,返回拼接数据的md5值作为分页明细查询的分页明细结果集。25.本技术第二个方面提供了一种批量异构数据源自动比对方法,采用上述的一种批量异构数据源自动比对系统实现,所述方法包括:26.步骤s1:为每种数据源单独定义一个数据源模块;27.步骤s2:从存储有源表的源表数组和存储有目标表的目标表数组中取出一对待比对的源表和目标表;28.步骤s3:根据源表、目标表的数据源类型,分别获取源表、目标表的总量结果集;29.步骤s4:创建两字段临时表,作为源表和目标表对应的总量临时表;30.步骤s5:将获取的源表的总量结果集插入到总量临时表中,将获取的目标表的总量结果集插入到总量临时表中;31.步骤s6:比对源表和目标表对应的总量临时表,获取总量比对结果和差异数据,若比对一致,则在结果文件中将总量比对结果作为第一标记进行记录,执行步骤s7;若比对不一致,则在结果文件中将总量比对结果和差异数据作为第二标记进行记录,以及删除为源表、目标表创建的总量临时表,并返回步骤s2;32.步骤s7:创建源表和目标表对应的单字段临时表;33.步骤s8:根据步骤s1获取的源表、目标表的表总量,以及预设的每页返回的分页明细的最大条目数,分别获取源表、目标表的分页明细结果集,将获取的源表的分页明细结果集插入到单字段临时表中,将获取的目标表的分页明细结果集插入到单字段临时表中;获取单字段临时表的分组明细数据;34.步骤s9:创建源表和目标表对应的两字段明细临时表,将单字段临时表的分组明细数据插入到两字段明细临时表中;35.步骤s10:比对源表和目标表对应的两字段明细临时表,获取明细比对结果和差异数据,若比对一致,则在结果文件中将明细比对结果作为第三标记进行记录;若比对不一致,则在结果文件中将明细比对结果和差异数据作为第四标记进行记录;36.步骤s11:删除创建的单字段临时表和两字段临时表;37.步骤s12:对源表数组和目标表数组中的每一对待比对的源表和目标表执行步骤s1至步骤s11,直至完成所有源表和目标表的比对,并将总体比对结果进行输出。38.优选地,所述源表数组、所述目标表数组的元素是存储数据源类型、数据源连接信息和表名的元组。39.优选地,所述数据源的数据类型包括mysql、oracle、postgresql、clickhouse、hive、oceanbase、hbase、ots及odps中至少一种。40.优选地,在步骤s3中,所述方法还包括:执行总量查询sql,获取源表和目标表的总量结果集。41.优选地,在步骤s8中,所述方法还包括:执行分页明细查询sql,获取源表和目标表的分页明细结果集。42.优选地,在步骤s6中,若所述源表以及所述目标表的总量结果集的比对结果不一致,将比对结果不一致的差异数据导出并存储至txt文件中。43.优选地,在步骤s10中,若源表以及所述目标表的分页明细结果集的比对结果不一致,将比对结果不一致的差异数据导出并存储至txt文件中。44.优选地,在步骤s10之后,还包括:将所述第一标记、和/或所述第二标记、和/或所述第三标记、和/或所述第四标记作为所述源表以及所述目标表的比对结果。45.优选地,在步骤s12中,所述总体比对结果至少包括所有源表数组和目标表数组中待比对的源表和目标表的比对结果。46.优选地,在步骤s3之前,还包括步骤s3’:组装字符串,获得总量查询sql。47.优选地,在步骤s8之前,还包括步骤s8’:查询多张待比对的表数据的表结构,并获取多张待比对的表数据的表字段,对所述表字段进行处理以获得分页明细查询sql。48.更优选地,所述步骤s8’还包括:根据预设的每页返回的分页明细的最大条目数,以及根据所获取的表结构,将表全部字段使用指定拼接符进行拼接,将拼接后的数据进行md5加密,使之变为固定长度,返回拼接数据的md5值作为分页明细查询的分页明细结果集。49.本技术第三个方面公开了一种批量异构数据源自动比对设备,包括:50.存储器,用于存储计算机程序;51.处理器,用于执行所述计算机程序时实现上述的批量异构数据源自动比对方法的步骤;以及52.显示器,用于对处理器生成的比对结果进行显示。53.本技术第四个方面公开了一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现上述的批量异构数据源自动比对方法。54.与现有技术相比,本发明的技术方案具有以下有益效果:55.本技术公开了一种批量异构数据源自动比对系统、方法及设备,基于总量查询和分页明细查询逐一将源表数组和目标表数组中的待比对的源表以及目标表进行比对,进而将批量比对结果进行txt文件存储,实现了异构数据源的混合批量自动比对。本技术技术方案具有以下特点:56.1)本技术将数据源代码与比对代码分离,将网状比对链路变成星型比对链路。本技术为每种数据源建立一个独立的数据源模块,当需要接入一种新的数据源时,只需要定义一个关于新数据源的数据源模块,就能复用已有的数据源,实现与已有数据源数据的自动比对,解决了现有技术中异构数据比对中,对于新增的数据源,不能复用已有脚本,脚本数目成倍增长的问题。57.2)本技术借助临时表分批处理数据,解决了大数据量查询内存溢出的问题。本技术采用分页查询表数据,每次最多查询指定条目的数据,然后将分页处理的数据写入临时表中,最后直接比对源表和目标表对应的临时表数据,解决了现有技术中,当表数据量比较大时,一次查询全部数据会出现内存溢出,造成比对失败的问题。附图说明58.构成本技术的一部分附图用来提供对本技术的进一步理解,本技术的示意性实施例及其说明用于解释本技术,并不构成对本技术的不当限定。在附图中:59.图1是本技术的一种批量异构数据源自动比对系统的组成结构示意图;60.图2是本技术的一种批量异构数据源自动比对方法的流程示意图;61.图3是现有技术中的数据源比对所形成的网状比对链路示意图;62.图4是本技术中的数据源比对所形成的星型比对链路示意图。具体实施方式63.为使本发明的目的、技术方案及效果更加清楚、明确,以下参照附图并举实例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。64.需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序,应该理解这样使用的数据在适当情况下可以互换。此外,术语“包括”和“具有”以及它们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。65.如
背景技术
:部分所述,现有的数据比对方法中,异构数据通过脚本方式比对时,对于新增的数据源,不能复用已有脚本,造成脚本数目成倍增长,而且不能实现异构数据源混合批量比对。66.有鉴于此,本技术在已有的现有技术的基础上进行了优化。67.参阅图1,本技术的一种批量异构数据源自动比对系统,包括如下模块:68.数据源模块1,每个数据源模块分别对应一种数据源,每个数据源模块被配置为用于创建数据源连接,关闭数据源连接,获取表结构,调取待比对的源表与目标表进行总量查询所获取的总量结果集,以及调取所述源表与目标表进行分页明细查询所获取的明细结果集;69.数据比对模块2,被配置为用于创建临时表,将数据源模块调取的总量结果集插入所述临时表中,得到源临时表和目标临时表,对源临时表和目标临时表进行比对,获取所述源表、目标表的总量比对结果和差异数据,以及将数据源模块调取的明细结果集插入所述临时表中,得到源临时表和目标临时表,对源临时表和目标临时表进行比对,获取所述源表、目标表的明细比对结果和差异数据;其中,所述临时表包括单字段临时表和双字段临时表;70.批量比对脚本3,被配置为将批量待比对的源表和目标表分别存储在数组中,调用所述数据比对模块对所述源表和目标表进行数据比对;71.比对结果形成模块4,被配置为根据所述源表和目标表的比对结果生成结果文件,以便于用户查看。72.具体地,为每种数据源单独定义一个所述数据源模块1,所述数据源的数据类型包括mysql、oracle、postgresql、clickhouse、hive、oceanbase、hbase、ots及odps中至少一种,每个所述数据源模块1被配置为可实现如下的方法:73.(1)创建数据源连接的方法(get_connection):用于获得所述数据源模块与其对应的数据源之间的通讯链路。74.(2)关闭数据源连接的方法(close_connection):用于断开所述数据源模块与其对应的数据源之间的通讯链路。75.(3)返回表结构的方法(table_name_column);用于查询多张待比对的表数据的表结构,并获取多张待比对的表数据的表字段。76.(4)返回总量查询sql和总量查询结果的总量方法(count_sql_data)。77.总量查询sql:78.select'count'aspk_col,count(*)ascntfrom库名.表名79.其中,返回列名可以自定义设置,但是需要保持一致(下面以pk_col和cnt列名进行说明)。80.(5)返回分页明细查询sql和分页明细查询结果的分页明细方法(detail_sql_data_page)。81.其中,分页处理过程为:通过limitoffset限制每页返回的最大条目数,调用返回表结构的方法获取表的结构,然后将表全部字段使用指定拼接符($)拼接,最后返回拼接数据的md5值。82.其中,分页明细查询sql(以hive为例):83.selectmd5(concat_ws('$',cast(`{字段1}`asstring),cast(`{字段2}`asstring),cast(`{字段3}`asstring)))aspk_col84.from库名.表名limit{自定义分页条目数}offset{页码}85.具体地,所述数据比对模块2被配置为可实现如下的方法:86.(1)创建两字段临时表方法(create_temp_table)。87.创建两字段临时表sql:88.createtableifnotexists{临时表表名}(`pk_col`string,`cnt`string)89.(2)创建单字段临时表方法(create_temp_table_single_col);90.创建单字段临时表sql:91.createtableifnotexists{临时表表名}(`pk_col`string)92.(3)删除临时表方法(drop_temp_table);93.删除临时表sql:94.droptableifexists{临时表表名}95.(4)返回单字段临时表分组查询sql和查询结果的分组明细方法(detail_sql_data);96.分组查询sql:97.selectpk_col,count(*)ascntfrom{临时表表名}groupbypk_col98.(5)向临时表插入数据方法(insert_into_table);99.插入sql:100.insertinto{临时表表名}values{分批获取的明细数据}101.(6)返回源临时表和目标临时表的比对结果和差异数据的表对比方法(compare_two_table);102.比对sql:103.selectt1.pk_col,t1.cnt,t2.cnt104.from{源临时表}t1105.leftjoin{目标临时表}t2106.ont1.pk_col=t2.pk_col107.wheret2.pk_colisnullorcoalesce(t1.cnt,‑99)!=coalesce(t2.cnt,‑999)108.limit1109.需要说明的是:因hive可以存储和处理大数据量的表,所以中间临时表选择使用hive表,也可以为其它类型表。110.具体地,所述批量比对脚本3被配置为可实现:111.(1)定义存储批量比对结果的txt文件;112.(2)将批量待比对源表和目标表分别存储在数组中,数组的元素是存储数据源类型、数据源连接信息和表名的元组,即数据源类型、数据源连接信息和表名以元组形式存储在数组中;113.(3)创建数据比对模块对象,用于调用数据比对模块的方法;114.(4)设置分页条目数上限;115.(5)进行表数据比对。116.参阅图2,本技术的一种批量异构数据源自动比对方法,包括如下步骤:117.步骤s1:为每种数据源单独定义一个数据源模块;其中,所述数据源的数据类型包括mysql、oracle、postgresql、clickhouse、hive、oceanbase、hbase、ots及odps中至少一种。118.步骤s2:从zip打包的源表数组和目标表数组中取出一对待比对的源表和目标表。119.步骤s3:根据表的数据源类型调用对应数据源模块的总量方法(count_sql_data),获取源表和目标表的总量数据以及总量查询sql。120.步骤s4:调用数据比对模块的创建两字段临时表方法(create_temp_table),创建源表和目标表对应的总量临时表。121.步骤s5:调用数据比对模块的插入数据方法(insert_into_table),将步骤s3获取的总量数据插入步骤s4创建的总量临时表中。122.步骤s6:调用数据比对模块的表对比方法(compare_two_table),比对源表和目标表对应的总量临时表,获取总量比对结果和差异数据。123.步骤s7:判断总量比对结果是否为数据一致。如果总量比对结果为“数据不一致”,则执行步骤s8;如果为“数据一致”,则执行步骤s9进行明细数据比对。124.步骤s8:将源表和目标表总量查询sql以及差异数据写入txt文件中,然后执行步骤s18。125.步骤s9:调用数据比对模块的创建单字段临时表方法(create_temp_table_single_col),创建源表和目标表对应的单字段临时表。126.步骤s10:根据步骤s2获取的表总量和预设的分页条目数上限,循环调用对应数据源模块的分页明细方法(detail_sql_data_page),获取源表和目标表的分页明细数据以及分页明细查询sql,然后将分页明细数据插入步骤s9创建的单字段临时表中。127.步骤s11:调用数据比对模块的分组明细方法(detail_sql_data),获取单字段临时表的分组明细数据。128.步骤s12:调用数据比对模块的创建两字段临时表方法(create_temp_table),创建源表和目标表对应的两字段明细临时表。129.步骤s13:调用数据比对模块的插入数据方法(insert_into_table),将步骤s11获取的单字段临时表分组明细数据插入步骤s12创建的两字段明细临时表中。130.步骤s14:调用数据比对模块的表对比方法(compare_two_table),比对源表和目标表对应的两字段明细临时表,获取明细比对结果和差异数据。131.步骤s15:判断明细比对结果是否为数据一致。如果比对结果为“数据不一致”,则执行步骤s16,如果为“数据一致”,则执行步骤s17。132.步骤s16:将源表和目标表的分页明细查询sql以及差异数据写入txt文件中。133.步骤s17:调用数据比对模块的删除临时表方法(drop_temp_table),删除创建的单字段临时表。134.步骤s18:调用数据比对模块的删除临时表方法(drop_temp_table),删除创建的两字段临时表,然后返回执行步骤s2。135.另一方面,本技术还公开了一种批量异构数据源自动比对设备,包括:存储器,用于存储计算机程序;处理器,用于执行所述计算机程序时实现上述的批量异构数据源自动比对方法的步骤;以及显示器,用于对处理器生成的比对结果进行显示。136.另一方面,本技术还公开了一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现上述的批量异构数据源自动比对方法。137.综上所述,本技术的技术方案在现有技术的基础上进行了两点优化:138.1、将网状比对链路变成了星型比对链路。139.参阅图3和图4,现有技术可以实现任意数据源的比对(例如,hive与mysql),但如果需要比对clickhouse与hive、clickhouse与mysql数据时,需要增加两个比对脚本,即通过脚本方式比对时,对于新增的数据源,不能复用已有的脚本,脚本数目成倍增长,而且不能实现异构数据源混合批量比对。本技术将数据源代码与比对代码分离,每种数据源配置一个独立的数据源模块。当需要接入一种新的数据源时,只需要定义一个关于新数据源的数据源模块(例如,clickhouse),就能复用已有的数据源,实现与已有数据源数据的自动比对(例如,clickhouse与hive、clickhouse与mysql),即本技术的技术方法将网状比对链路变成了星型比对链路。140.2、借助临时表分批处理数据,解决了大数据量查询内存溢出的问题。141.现有技术需要每次查询表全部数据,然后借助python中pandas进行数据比对。当表数据量比较大时,一次查询全部数据会出现内存溢出,造成比对失败。本技术借助临时表分批处理数据,只需提供表的数据源类型、数据源连接信息和表名即可实现异构数据源混合批量比对(例如,hive与hive,hive与mysql,hive与clickhouse,mysql与clickhouse)。本技术还采用分页查询表数据,每次最多查询指定条目的数据,然后对查询出的数据进行md5加密,避免因超长被截断且减少了存储量,之后将分页处理的数据写入临时表中,最后直接比对源表和目标表对应的临时表数据,解决了大数据量查询内存溢出的问题。142.以上对本发明的具体实施例进行了详细描述,但其只是作为范例,本发明并不限制于以上描述的具体实施例。对于本领域技术人员而言,任何对本发明进行的等同修改和替代也都在本发明的范畴之中。因此,在不脱离本发明的精神和范围下所作的均等变换和修改,都应涵盖在本发明的范围内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1