异构数据库表的差异定位方法、装置、设备及介质与流程

摘要: 本技术涉及数据库数据校验,尤其涉及一种异构数据库表的差异定位方法、装置、设备及介质。背景技术:1、在异构数据库数据一致性校验场景中,源表和目标表往往因业务系统设...
异构数据库表的差异定位方法、装置、设备及介质与流程

本技术涉及数据库数据校验,尤其涉及一种异构数据库表的差异定位方法、装置、设备及介质。

背景技术:

1、在异构数据库数据一致性校验场景中,源表和目标表往往因业务系统设计差异而缺少主键约束,或主键不唯一,导致无法直接采用基于主键的行匹配方式进行对比。

2、现有数据对比工具普遍以主键为前提进行行匹配,主键缺失、主键不唯一或无法确定主键的表无法直接对比或需手工指定比对键。部分校验方案采用总量统计或全表指纹级对比,仅能回答两表数据是否一致,无法定位到具体差异行;而按列校验和相加生成行指纹的方式存在碰撞风险,在字段内容更换列位置后易产生误判。

技术实现思路

1、鉴于以上内容,本技术提供一种异构数据库表的差异定位方法、装置、设备及存储介质,其目的在于解决上述技术问题。

2、第一方面,本技术提供一种异构数据库表的差异定位方法,所述方法包括:

3、获取源数据库中的源表与目标数据库中的目标表的配置信息,根据所述配置信息分别从所述源表和所述目标表中提取公共列;

4、对所述公共列中的数据进行归一化处理,得到归一化公共列数据;

5、基于所述归一化公共列数据,执行不依赖主键的双向差集查询,分别确定仅存在于所述源表中而不存在于所述目标表中的第一差异行集合,以及仅存在于所述目标表中而不存在于所述源表中的第二差异行集合,并为所述第一差异行集合和所述第二差异行集合标注来源方标识;

6、基于所述归一化公共列数据,对所述源表和所述目标表中除所述第一差异行集合和所述第二差异行集合以外的共有行集合执行行级差异定位,得到第三差异行集合;

7、基于所述第一差异行集合、所述第二差异行集合和所述第三差异行集合,生成最终差异行结果;其中所述最终差异行结果中每条差异行均携带差异类型标注。

8、在一些实施例中,所述基于所述归一化公共列数据,对所述源表和所述目标表中除所述第一差异行集合和所述第二差异行集合以外的共有行集合执行行级差异定位,得到第三差异行集合,包括:

9、根据所述配置信息判断是否已配置主键;

10、若所述配置信息中未配置真实主键,则执行无主键差异定位;

11、其中,所述无主键差异定位包括:

12、针对所述共有行集合中的每一行,将所述归一化公共列数据中的全部值按预设顺序拼接,并对拼接后的字符串计算哈希值,将计算得到的哈希值作为该行的自拟主键;

13、以所述自拟主键为分组依据,分别统计所述源表和所述目标表中各哈希值的出现次数,并对所述源表和所述目标表基于所述自拟主键执行全外连接比对;

14、将所述全外连接比对中所述源表和所述目标表中出现次数不一致的哈希值所对应的行确定为所述第三差异行集合。

15、在一些实施例中,所述以所述自拟主键为分组依据,分别统计所述源表和所述目标表中各哈希值的出现次数,并对所述源表和所述目标表基于所述自拟主键执行全外连接比对,包括:

16、分别对所述源表和所述目标表中具有相同自拟主键的行进行分组计数,确定源端计数和目标端计数;

17、通过全外连接将所述源端计数和所述目标端计数按照所述自拟主键进行关联;

18、若所述源端计数小于所述目标端计数,将所述自拟主键所对应的行确定为目标端多余差异;

19、若所述源端计数大于所述目标端计数,将所述自拟主键所对应的行确定为源端多余差异;

20、若所述源端计数等于所述目标端计数,则基于所述自拟主键对相等计数分组进行行级内容差异判定。

21、在一些实施例中,在确定源端计数和目标端计数之后,所述方法还包括:

22、基于所述自拟主键所对应的所述源端计数和所述目标端计数的具体数值,确定差异类型,包括:

23、当所述源端计数和所述目标端计数相等且均等于1时,将所述源表和所述目标表中具有所述自拟主键的两行数据进行逐项比对,定位发生内容变更的具体字段,并将该行数据标记为内容变更差异;

24、当所述源端计数和所述目标端计数相等且均大于1时,分别提取所述源表和所述目标表中具有所述自拟主键的所有行的值,构成源端行集合和目标端行集合;

25、对所述源端行集合和所述目标端行集合执行对称差集运算,确定在重复行中具体哪一行发生变更或缺失,并将确定出的行标记为重复行内差异。

26、在一些实施例中,所述对所述源端行集合和所述目标端行集合执行对称差集运算,确定在重复行中具体哪一行发生变更或缺失,包括:

27、在所述自拟主键下,为所述源端行集合中的每一行分配第一行内序号,并为所述目标端行集合中的每一行分配第二行内序号;

28、以所述源端行集合中除所述自拟主键之外的其余值组合为第一比对键,以所述目标端行集合中除所述自拟主键之外的其余值组合为第二比对键;

29、将所述第一比对键与所述第二比对键进行逐对匹配,若存在无法匹配的所述第一比对键,则将对应行标记为源端在重复组内多余;

30、若存在无法匹配的所述第二比对键,则将对应行标记为目标端在重复组内多余;

31、若所述第一比对键与所述第二比对键均能配对但内容不完全相同,则将配对的两行共同标记为重复组内内容变更。

32、在一些实施例中,所述方法还包括:

33、根据所述配置信息判断是否已配置主键;

34、若所述配置信息中配置有真实主键,则执行有主键差异定位;

35、其中,所述执行有主键差异定位,包括:

36、预先构建行哈希指纹缓存表和主键指纹缓存表,所述行哈希指纹缓存表用于存储各行数据对应的行哈希值和对应的版本时间戳,所述主键指纹缓存表用于存储各行主键值对应的聚合指纹和对应的版本时间戳;

37、当执行所述有主键差异定位时,对所述源表和所述目标表中数据变更时间戳大于缓存表中版本时间戳的数据分片,重新计算行哈希值或主键聚合指纹并进行比对,将比对出的差异行作为新增差异行加入所述最终差异行结果,并同步更新所述缓存表。

38、在一些实施例中,所述当执行所述有主键差异定位时,对所述源表和所述目标表中数据变更时间戳大于缓存表中版本时间戳的数据分片,重新计算行哈希值或主键聚合指纹并进行比对,包括:

39、比较所述源表和所述目标表中对应数据项的块版本号或块组合哈希值;

40、若对应数据项的块版本号相同且块组合哈希值一致,则确定该数据项未发生变更,直接跳过该数据项的重算;

41、若对应数据项的块版本号不同或块组合哈希值不一致,则确定所述数据项已发生数据变更;

42、将该数据项所覆盖的全部数据行标记为失效,并对所述数据项范围内的数据行重新计算行哈希值或主键聚合指纹;

43、将重算后的新指纹与对端数据库进行逐行比对。

44、第二方面,本技术提供一种异构数据库表的差异定位装置,该异构数据库表的差异定位装置包括:

45、获取模块,用于获取源数据库中的源表与目标数据库中的目标表的配置信息,根据所述配置信息分别从所述源表和所述目标表中提取公共列;

46、处理模块,用于对所述公共列中的数据进行归一化处理,得到归一化公共列数据;

47、第一确定模块,用于基于所述归一化公共列数据,执行不依赖主键的双向差集查询,分别确定仅存在于所述源表中而不存在于所述目标表中的第一差异行集合,以及仅存在于所述目标表中而不存在于所述源表中的第二差异行集合,并为所述第一差异行集合和所述第二差异行集合标注来源方标识;

48、第二确定模块,用于基于所述归一化公共列数据,对所述源表和所述目标表中除所述第一差异行集合和所述第二差异行集合以外的共有行集合执行行级差异定位,得到第三差异行集合;

49、生成模块,用于基于所述第一差异行集合、所述第二差异行集合和所述第三差异行集合,生成最终差异行结果;其中所述最终差异行结果中每条差异行均携带差异类型标注。

50、第三方面,本技术提供一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;

51、存储器,用于存放计算机程序;

52、处理器,用于执行存储器上所存放的程序时,实现第一方面任一项实施例所述的异构数据库表的差异定位方法的步骤。

53、第四方面,提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如第一方面任一项实施例所述的异构数据库表的差异定位方法的步骤。

54、本技术实施例提供的上述技术方案与现有技术相比具有如下优点:

55、通过依次执行提取公共列、归一化处理、不依赖主键的双向差集查询以及行级差异定位,并在最终结果中为每条差异行携带精确的差异类型标注,解决了现有技术中因表结构缺失主键或主键不唯一而无法进行行级精准匹配的问题,同时消除了因跨库字段类型差异和空值语义不一致导致的对比误报。将比对结果从仅能回答两表是否一致升级为能够精确定位到每一条差异行及其具体差异方向,解决了无法定位具体差异行以及在重复主键和空值场景下容易发生漏报与误报的问题。