计算引擎运行结果对比方法、装置、设备及存储介质与流程

未命名 10-08 阅读:88 评论:0


1.本技术涉及数据处理领域,尤其涉及一种计算引擎运行结果对比方法、装置、设备及存储介质。


背景技术:

2.随着sql计算引擎的发展,不仅有性能更快、功能点更丰富的同一计算引擎的新版本迭代,而且有全新的计算引擎诞生。在生产环境里,用户有一些存量sql作业使用老的sql计算引擎运行,用户想要变更到新的sql计算引擎,来获得更快的计算速度。但是,由于不同的计算引擎在某些数据逻辑的处理上有变动,会导致某些作业在新的计算引擎的逻辑执行结果和旧的不一致,用户希望对这些结果不一致的作业不变更计算引擎,因此需要确定同一个sql作业在不同计算引擎的逻辑执行结果是否一致。
3.目前通常用新旧两个不同的计算引擎运行同一个sql作业,并生成两个结果表;然后将两个结果表的数据都读到内存中,再按照主键排序两个结果表;最后对于某个数据列,分别逐行比较数据的一致性。按照主键排序两个结果表的计算量较大,并且在一个结果表的数据大小可能会大于一台机器的内存,将两个结果表的数据都读到内存中时可能导致内存溢出。


技术实现要素:

4.本技术提供一种计算引擎运行结果对比方法、装置、设备及存储介质,用以解决对比结果表时需要按照主键排序两个结果表,计算量较大,并且在一个结果表的数据大小可能会大于一台机器的内存,将两个结果表的数据都读到内存中时可能导致内存溢出的问题。
5.第一方面,本技术提供一种计算引擎运行结果对比方法,包括:
6.获取待计算的目标sql语句;
7.采用第一计算引擎及第二计算引擎分别运行待计算的目标sql语句,并获取第一计算引擎对应的第一运行结果表及第二计算引擎对应的第二运行结果表;所述第一运行结果表及第二运行结果表中包括:主键列及数据列;
8.采用预设列特征值计算算法基于主键列计算第一运行结果表及第二运行结果表中各数据列的列特征值;
9.若确定第一运行结果表及第二运行结果表中数据列标识相同对应数据列的列特征值均相同,则确定第一计算引擎及第二计算引擎对目标sql语句的运行结果一致。
10.第二方面,本技术提供一种计算引擎运行结果对比装置,包括:
11.获取模块,用于获取待计算的目标sql语句;
12.运行模块,用于采用第一计算引擎及第二计算引擎分别运行待计算的目标sql语句,并获取第一计算引擎对应的第一运行结果表及第二计算引擎对应的第二运行结果表;所述第一运行结果表及第二运行结果表中包括:主键列及数据列;
13.计算模块,用于采用预设列特征值计算算法基于主键列计算第一运行结果表及第二运行结果表中各数据列的列特征值;
14.对比模块,用于若确定第一运行结果表及第二运行结果表中数据列标识相同对应数据列的列特征值均相同,则确定第一计算引擎及第二计算引擎对目标sql语句的运行结果一致。
15.第三方面,本技术提供一种电子设备,包括:处理器,以及与所述处理器通信连接的存储器及收发器;
16.所述存储器存储计算机执行指令;所述收发器用于收发数据;
17.所述处理器执行所述存储器存储的计算机执行指令,以实现上述任一方面所述的计算引擎运行结果对比方法。
18.第四方面,本技术提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现上述任一方面所述的计算引擎运行结果对比方法。
19.第五方面,本技术提供一种计算机程序产品,包括计算机执行指令,该计算机执行指令被处理器执行时实现上述任一方面所述的计算引擎运行结果对比方法。
20.本技术提供的计算引擎运行结果对比方法、装置、设备及存储介质,获取待计算的目标sql语句;采用第一计算引擎及第二计算引擎分别运行待计算的目标sql语句,并获取第一计算引擎对应的第一运行结果表及第二计算引擎对应的第二运行结果表;第一运行结果表及第二运行结果表中包括:主键列及数据列;采用预设列特征值计算算法基于主键列计算第一运行结果表及第二运行结果表中各数据列的列特征值;若确定第一运行结果表及第二运行结果表中数据列标识相同对应数据列的列特征值均相同,则确定第一计算引擎及第二计算引擎对目标sql语句的运行结果一致。通过计算各列的列特征值,在该列任一行数据不一致时的列特征值不一致,通过对比各列的列特征值就可以确定同一个sql作业在不同计算引擎的逻辑执行结果是否一致,无需按照主键排序两个结果表,避免了内存溢出并提高了数据对比效率。而且基于主键列计算第一运行结果表及第二运行结果表中各数据列的列特征值可以使列特征值能体现各数据列中数据的顺序,确保了数据对比的准确率。
附图说明
21.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本技术的实施例,并与说明书一起用于解释本技术的原理。
22.图1为本技术实施例提供的计算引擎运行结果对比方法流程图;
23.图2为本技术实施例提供的计算引擎运行结果对比示意图;
24.图3为本技术实施例提供的另一计算引擎运行结果对比方法流程图;
25.图4为本技术实施例提供的又一计算引擎运行结果对比方法流程图;
26.图5为本技术实施例提供的计算引擎运行结果对比装置的结构示意图;
27.图6为本技术实施例提供的电子设备的结构示意图。
28.通过上述附图,已示出本技术明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本技术构思的范围,而是通过参考特定实施例为本大数据技术领域技术人员说明本技术的概念。
具体实施方式
29.这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本技术相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本技术的一些方面相一致的装置和方法的例子。
30.术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。在以下各实施例的描述中,“多个”的含义是两个以上,除非另有明确具体的限定。
31.首先对本发明所涉及的现有技术进行详细说明及分析。
32.在现代软件系统中,sql计算引擎广泛应用于大数据表处理的场景。随着sql计算引擎的发展,不仅有性能更快、功能点更丰富的同一计算引擎的新版本迭代,而且有全新的计算引擎诞生。比如在早期阶段,基于mapreduce的hive是主要的sql计算引擎。随后基于内存计算的spark计算速度更快,被越来越多人使用,以及flinksql流式计算引擎的出现,并被广泛使用。
33.在生产环境里,用户有一些存量sql作业使用老的sql计算引擎运行。用户想要变更到新的sql计算引擎,来获得更快的计算速度。但由于不同的计算引擎在某些数据逻辑的处理上有变动,会导致某些作业在新的计算引擎的逻辑执行结果和旧的不一致,用户希望对这些结果不一致的作业不变更计算引擎。在计算引擎变更的过程中,需要快速、有效地自动检查出同一个sql作业在不同计算引擎的逻辑执行结果是否一致。
34.目前业界的检查方案是把同一个sql作业,用新旧两个不同的计算引擎运行,生成两个结果表。然后将两个结果表的数据都读到内存中,再按照主键排序两个结果表。最后对于某个数据列,分别逐行比较数据的一致性。这种方法靠程序自动化完成,不需要人工介入,准确度高。但不适用结果表的数据量比较大的场景。但排序过程计算量大。在大数据计算场景下,一个结果表的数据大小可能会大于一台机器的内存。为了防止内存溢出,该类检查方法会使用外部排序作为排序算法,排序时把排序的中间结果在磁盘和内存间做导入导出操作,非常耗时,因此这种检查方法在结果表的数据量比较大时,检查速度很慢。
35.发明人在研究中发现,由于做一致性检查时,是比较两个结果表的全表数据,如果两个结果表任一一项数据不一致,该检查方法得出的检查结果也是不一致。因此,可以计算各列的列特征值,在该列任一行数据不一致时的列特征值不一致,通过对比各列的列特征值就可以确定同一个sql作业在不同计算引擎的逻辑执行结果是否一致,无需按照主键排序两个结果表,因此无需将两个结果表的数据都读到内存中,可以避免内存溢出并可以提高数据对比效率。
36.需要说明的是,本技术所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据,并且相关数据的收集、使用和处理需要遵守相关法律法规和标准,并提供有相应的操作入口,供用户选择授权或者拒绝。
37.需要说明的是,本技术计算引擎运行结果对比方法、装置、设备及存储介质可用于大数据技术领域,也可用于除大数据技术领域之外的任意领域,本技术计算引擎运行结果对比方法、装置、设备及存储介质的应用领域不做限定。
38.下面以具体地实施例对本技术的技术方案以及本技术的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本技术的实施例进行描述。
39.图1为本技术实施例提供的计算引擎运行结果对比方法流程图,本技术实施例针对对比结果表时需要按照主键排序两个结果表,计算量较大,并且在一个结果表的数据大小可能会大于一台机器的内存,将两个结果表的数据都读到内存中时可能导致内存溢出的问题,提供了计算引擎运行结果对比方法。本实施例中的方法应用于计算引擎运行结果对比装置,计算引擎运行结果对比装置可以位于电子设备中。其中,电子设备可以为表示各种形式的数字计算机。诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。
40.如图1所示,该方法具体步骤如下:
41.步骤s101、获取待计算的目标sql语句。
42.本技术实施例中,目标sql语句为待对比计算引擎运行结果的sql作业中的sql语句。第一计算引擎及第二计算引擎可以运行目标sql语句,获取运行结果并进行对比。
43.步骤s102、采用第一计算引擎及第二计算引擎分别运行待计算的目标sql语句,并获取第一计算引擎对应的第一运行结果表及第二计算引擎对应的第二运行结果表。
44.其中,第一运行结果表及第二运行结果表中包括:主键列及数据列。第一计算引擎及第二计算引擎为待对比计算引擎运行结果的两个计算引擎,第一计算引擎及第二计算引擎为两种不同的sql计算引擎。
45.具体地,采用第一计算引擎运行待计算的目标sql语句获取第一计算引擎对应的第一运行结果表,并采用第二计算引擎运行待计算的目标sql语句获取第二计算引擎对应的第二运行结果表。
46.步骤s103、采用预设列特征值计算算法基于主键列计算第一运行结果表及第二运行结果表中各数据列的列特征值。
47.本技术实施例不显示采用的预设列特征值计算算法。应理解的是,预设列特征值计算算法基于各行数据与其主键列中该行数据对应数据的结合确定各数据列的列特征值。
48.示例性地,待计算列特征值的数据列可以包括三行数据,基于该数据列第一行数据与主键列第一行数据的结合、该数据列第二行数据与主键列第二行数据的结合、该数据列第三行数据与主键列第三行数据的结合,确定该数据列的列特征值。
49.本技术实施例对各行数据与其主键列中该行数据对应数据的结合不做限定。示例性地,可以为相加、也可以为拼接。
50.本技术实施例中,基于主键列计算第一运行结果表及第二运行结果表中各数据列的列特征值可以使列特征值能体现各数据列中数据的顺序。例如,第一运行结果表的数据列中数据为1、1、2,第二运行结果表的数据列中数据为1、2、1;若未基于主键列计算列特征值,则第一运行结果表的数据列与第二运行结果表的数据列的列特征值相同;而基于主键列计算列特征值,则第一运行结果表的数据列与第二运行结果表的数据列的列特征值不相同。
51.应理解的是,若主键列的某一行的值在一个结果表里有,而在另一个结果表里没有,也即存在数据缺失,那么两个结果表的各数据列的列特征值都会不同。若主键列的各行
的值在两个结果表里都有,而某个主键列的值对应的某个数据列的值在两个结果表里不一致,那么两个结果表的这个数据列的表特征值就会不同。当且仅当主键列的各行的值在两个结果表里都有,并且各主键列的值对应的各数据列的值在两个结果表都一致,那么两个结果表的各数据列的表特征值才会相同。
52.步骤s104、若确定第一运行结果表及第二运行结果表中数据列标识相同对应数据列的列特征值均相同,则确定第一计算引擎及第二计算引擎对目标sql语句的运行结果一致。
53.本技术实施例中,若确定存在不相同的第一运行结果表及第二运行结果表中数据列标识相同对应数据列的列特征值,则确定第一计算引擎及第二计算引擎对目标sql语句的运行结果不一致。若确定第一运行结果表及第二运行结果表中数据列标识相同对应数据列的列特征值均相同,则确定第一计算引擎及第二计算引擎对目标sql语句的运行结果一致。
54.示例性地,如图2所示,采用第一计算引擎及第二计算引擎分别运行待计算的目标sql语句,并获取第一计算引擎对应的第一运行结果表及第二计算引擎对应的第二运行结果表;第一运行结果表及第二运行结果表中包括数据列a、数据列b、数据列c;若确定第一运行结果表数据列a的列特征值a与第二运行结果表数据列a的列特征值a相同,且第一运行结果表数据列b的列特征值b与第二运行结果表数据列b的列特征值b相同,且第一运行结果表数据列c且列特征值c与第二运行结果表数据列c列特征值c相同,则确定第一计算引擎及第二计算引擎对目标sql语句的运行结果一致。
55.本技术实施例中,若第一运行结果表及第二运行结果表的数据是一致的,只是前后顺序不同,那么对于某个数据列,第一运行结果表及第二运行结果表的列特征值依然是相同的。本技术实施例提供的计算引擎运行结果对比方法对结果表的数据顺序没有要求,避免了现有里的排序操作,能减少计算量,提高计算引擎运行结果对比效率。
56.本技术实施例提供的计算引擎运行结果对比方法,获取待计算的目标sql语句;采用第一计算引擎及第二计算引擎分别运行待计算的目标sql语句,并获取第一计算引擎对应的第一运行结果表及第二计算引擎对应的第二运行结果表;第一运行结果表及第二运行结果表中包括:主键列及数据列;采用预设列特征值计算算法基于主键列计算第一运行结果表及第二运行结果表中各数据列的列特征值;若确定第一运行结果表及第二运行结果表中数据列标识相同对应数据列的列特征值均相同,则确定第一计算引擎及第二计算引擎对目标sql语句的运行结果一致。通过计算各列的列特征值,在该列任一行数据不一致时的列特征值不一致,通过对比各列的列特征值就可以确定同一个sql作业在不同计算引擎的逻辑执行结果是否一致,无需按照主键排序两个结果表,避免了内存溢出并提高了数据对比效率。而且基于主键列计算第一运行结果表及第二运行结果表中各数据列的列特征值可以使列特征值能体现各数据列中数据的顺序,确保了数据对比的准确率。
57.下面结合一个具体的示例对上述实施例提供的计算引擎运行结果对比方法进行说明,图3为本技术实施例提供的另一计算引擎运行结果对比方法流程图,在上述实施例的基础上,如图3所示,计算引擎运行结果对比方法的具体步骤可以包括:
58.步骤s201、获取待计算的目标sql语句。
59.步骤s202、采用第一计算引擎运行待计算的目标sql语句获取第一计算引擎对应
的第一运行结果表,并采用第二计算引擎运行待计算的目标sql语句获取第二计算引擎对应的第二运行结果表。
60.具体地,对同一个sql作业的目标sql语句,分别用待检测的两个sql计算引擎做计算,并把计算结果写到各自的结果表中。
61.步骤s203、读取第一运行结果表及第二运行结果表的表结构,以获取第一运行结果表及第二运行结果表的主键列及数据列的列标识。
62.具体地,可以读取第一运行结果表及第二运行结果表的表结构,识别出表的主键列和数据列的列名。如不特别说明,在大数据计算场景下,主键列只有1列,位置是第1列,数据列有1列或者多列,位置是从第2列到最后1列。
63.本技术实施例中,读取运行结果表的主键列及数据列的列标识后,在执行步骤s203时可以按数据列的列标识依次采用预设列特征值计算算法基于主键列计算第一运行结果表及第二运行结果表中各数据列的列特征值。可以避免列特征值的重复计算。
64.步骤s204、启用两个线程并行地采用预设列特征值计算算法基于主键列计算第一运行结果表及第二运行结果表中各数据列的列特征值。
65.本技术实施例中,启用两个线程并行地采用预设列特征值计算算法基于主键列计算第一运行结果表及第二运行结果表中各数据列的列特征值,可以提高数据列的列特征值的计算效率,从而提高计算引擎运行结果对比的效率。
66.可选地,预设列特征值计算算法可以包括:
67.步骤s2041、采用行特征值计算公式计算某数据列的列标识对应各行数据的行特征值。
68.步骤s2042、对该数据列的列标识对应各行数据的行特征值进行累加,以获取该数据列的列特征值。行特征值计算公式为:
69.rf=hash(concat(tostr(id),tostr(data)))
70.其中,rf表示该表某个数据列在某一行的行特征值,id表示该行对应的主键列的值,data表示这一行的这个数据列的值,tostr为把某个数据类型的值转换成字符串类型的值的函数,concat为把两个字符串连接成一个字符串的函数,hash为把字符串映射成32位整数的函数。
71.具体地,计算某行数据的行特征值方式为:将某一行对应的主键列的值转换成字符串类型的值,将该行数据的值转换成字符串类型的值;将字符串类型的主键列的值与字符串类型的该行数据的值进行拼接形成一个字符串,将该字符串映射成32位整数,将该32位整数确定为该行数据的行特征值。
72.具体地,对该数据列的列标识对应各行数据的行特征值进行累加,以获取该数据列的
[0073][0074]
tf表示数据列的列特征值,这个值是一个32位整数。rf表示该表这个数据列在某一行的行特征值,这个值是一个32位整数。n为数据列的行数。如果计算结果有数据溢出,按
溢出后的结果继续计算。
[0075]
可选地,可以选用xxhash算法来实现hash函数。xxhash支持32位输出,相比较murmur3、fnv等算法,它的散列效果更好,执行速度更快。
[0076]
本技术实施例提供的计算引擎运行结果对比方法,采用行特征值计算公式计算某数据列的列标识对应各行数据的行特征值;对该数据列的列标识对应各行数据的行特征值进行累加,以获取该数据列的列特征值;采用各函数计算行特征值,提高了行特征值的计算效率及准确率;并且将该行特征值的字符串映射成32位整数,便于行特征值的累加。
[0077]
步骤s205、确定第一计算引擎及第二计算引擎对目标sql语句的运行结果是否一致。
[0078]
可选地,在计算第一运行结果表及第二运行结果表中各数据列的列特征值后,可以将各数据列的列特征值与数据列的列标识关联存储于存储空间中,以便执行步骤s205确定第一计算引擎及第二计算引擎对目标sql语句的运行结果是否一致,提高对比效率及准确率。
[0079]
具体地,可以在计算出某数据列的列特征值后,将其与数据列的列标识关联存储于存储空间中,直至计算并存储完第一运行结果表及第二运行结果表中各数据列的列特征值。
[0080]
本技术实施例中,若各数据列的列特征值都相同,则可以确定第一运行结果表及第二运行结果表的数据是一致的,即两个计算引擎对目标sql语句的运行结果一致。若存在一个或多个数据列的列特征值不相同,则可以确定第一运行结果表及第二运行结果表的数据是不一致的,即两个计算引擎对目标sql语句的运行结果不同的。
[0081]
在一种可选地实施方式中,步骤s205确定第一计算引擎及第二计算引擎对目标sql语句的运行结果是否一致的具体可以包括:
[0082]
步骤s2051、获取某数据列的列标识对应的第一运行结果表的列特征值及第二运行结果表的列特征值。
[0083]
具体地,可以依次获取某数据列的列标识对应的第一运行结果表的列特征值及第二运行结果表的列特征值,并确定某数据列的列标识对应的第一运行结果表的列特征值及第二运行结果表的列特征值是否相同;若不相同则执行步骤s2052确定运行结果不一致,并中止对列特征值的对比;若相同则执行步骤s2053获取并对比下一数据列的列标识对应的第一运行结果表的列特征值及第二运行结果表的列特征值,直至对比完第一运行结果表及第二运行结果表中各数据列的列特征值。
[0084]
步骤s2052、若确定某数据列的列标识对应的第一运行结果表的列特征值及第二运行结果表的列特征值不相同,则确定第一计算引擎及第二计算引擎对目标sql语句的运行结果不一致,中止对列特征值的对比。
[0085]
步骤s2053、若确定某数据列的列标识对应的第一运行结果表的列特征值及第二运行结果表的列特征值相同,则获取并对比下一数据列的列标识对应的第一运行结果表的列特征值及第二运行结果表的列特征值。
[0086]
本技术实施例提供的计算引擎运行结果对比方法,若确定某数据列的列标识对应的第一运行结果表的列特征值及第二运行结果表的列特征值不相同,则中止对列特征值的对比。可以确定某数据列的列标识对应的列特征值不相同后,就确定的运行结果不一致,并
中止对列特征值的对比,无需对比完各数据列的列标识对应的列特征值,提高了计算引擎运行结果对比效率,减少对运行资源的占用。
[0087]
在上述实施例的基础上,本实施例涉及的是对步骤s103采用预设列特征值计算算法基于主键列计算第一运行结果表及第二运行结果表中各数据列的列特征值的一种实现方式的细化,如图4所示,具体包括以下步骤:
[0088]
步骤s301、按序计算某数据列的列标识对应第一行数据的行特征值及第二行数据的行特征值。
[0089]
步骤s302、对第一行数据的行特征值及第二行数据的行特征值进行累加,以获取当前行特征累加值,并存储当前行特征累加值。
[0090]
步骤s303、按序计算下一行数据的行特征值。
[0091]
步骤s304、将下一行数据的行特征值与当前行特征累加值进行累加,以更新当前行特征累加值。
[0092]
本技术实施例中,可以循环执行步骤s303及步骤s304,直至将该数据列最后一行数据的行特征值与当前行特征累加值进行累加,以获取该数据列的列特征值。
[0093]
步骤s305、确定下一行数据是否为该数据列最后一行数据。
[0094]
本技术实施中,若确定下一行数据为该数据列最后一行数据,则执行步骤s306将当前行特征累加值确定为该数据列的列特征值;若确定下一行数据不为该数据列最后一行数据,则执行步骤s303及后续步骤,直至将该数据列最后一行数据的行特征值与当前行特征累加值进行累加,以获取该数据列的列特征值。
[0095]
步骤s306、若确定下一行数据为该数据列最后一行数据,将当前行特征累加值确定为该数据列的列特征值。
[0096]
具体地,可以读取一行数据,在计算一行数据的行特征值后,将该特征值与当前行特征累加值进行累加;在累加后,可以清空计算出的该行数据的行特征值及该行数据。
[0097]
本技术实施例中,列特征值的计算过程只需要在内存中保存从第一行到上一行的行特征值的累加结果,以及当前行的主键列和数据列的数据即可,而不需要在内存中保存数据列从第一行到最后一行的全部数据。这就使得计算过程对内存占用很小,能极大地减轻机器的内存压力。
[0098]
图5为本技术实施例提供的计算引擎运行结果对比装置的结构示意图。本技术实施例提供的计算引擎运行结果对比装置可以执行计算引擎运行结果对比方法实施例提供的处理流程。如图5所示,该计算引擎运行结果对比装置40包括:获取模块401,运行模块402,计算模块403和对比模块404。
[0099]
具体地,获取模块401,用于获取待计算的目标sql语句。
[0100]
运行模块402,用于采用第一计算引擎及第二计算引擎分别运行待计算的目标sql语句,并获取第一计算引擎对应的第一运行结果表及第二计算引擎对应的第二运行结果表;第一运行结果表及第二运行结果表中包括:主键列及数据列。
[0101]
计算模块403,用于采用预设列特征值计算算法基于主键列计算第一运行结果表及第二运行结果表中各数据列的列特征值。
[0102]
对比模块404,用于若确定第一运行结果表及第二运行结果表中数据列标识相同对应数据列的列特征值均相同,则确定第一计算引擎及第二计算引擎对目标sql语句的运
行结果一致。
[0103]
本技术实施例提供的装置可以具体用于执行上述实施例所提供的方法实施例,具体功能此处不再赘述。
[0104]
可选地,计算模块403具体用于:启用两个线程并行地采用预设列特征值计算算法基于主键列计算第一运行结果表及第二运行结果表中各数据列的列特征值。
[0105]
可选地,计算模块403还包括:读取单元及计算单元;读取单元用于:读取第一运行结果表及第二运行结果表的表结构,以获取第一运行结果表及第二运行结果表的主键列及数据列的列标识;计算单元用于:按数据列的列标识依次采用预设列特征值计算算法基于主键列计算第一运行结果表及第二运行结果表中各数据列的列特征值。
[0106]
可选地,计算单元具体用于:采用行特征值计算公式计算某数据列的列标识对应各行数据的行特征值;对该数据列的列标识对应各行数据的行特征值进行累加,以获取该数据列的列特征值;行特征值计算公式为:
[0107]
rf=hash(concat(tostr(id),tostr(data)))
[0108]
其中,rf表示该表某个数据列在某一行的行特征值,id表示该行对应的主键列的值,data表示这一行的这个数据列的值,tostr为把某个数据类型的值转换成字符串类型的值的函数,concat为把两个字符串连接成一个字符串的函数,hash为把字符串映射成32位整数的函数。
[0109]
可选地,计算单元具体用于:按序计算某数据列的列标识对应第一行数据的行特征值及第二行数据的行特征值;对第一行数据的行特征值及第二行数据的行特征值进行累加,以获取当前行特征累加值,并存储当前行特征累加值;按序计算下一行数据的行特征值;将下一行数据的行特征值与当前行特征累加值进行累加,以更新当前行特征累加值,直至将该数据列最后一行数据的行特征值与当前行特征累加值进行累加,以获取该数据列的列特征值。
[0110]
可选地,计算模块403还用于:将各数据列的列特征值与数据列的列标识关联存储于存储空间中。
[0111]
可选地,对比模块404还用于:获取某数据列的列标识对应的第一运行结果表的列特征值及第二运行结果表的列特征值;若确定某数据列的列标识对应的第一运行结果表的列特征值及第二运行结果表的列特征值不相同,则确定第一计算引擎及第二计算引擎对目标sql语句的运行结果不一致,中止对列特征值的对比;若确定某数据列的列标识对应的第一运行结果表的列特征值及第二运行结果表的列特征值相同,则获取并对比下一数据列的列标识对应的第一运行结果表的列特征值及第二运行结果表的列特征值。
[0112]
本技术实施例提供的装置可以具体用于执行上述方法实施例,具体功能此处不再赘述。
[0113]
图6为本技术实施例提供的电子设备的结构示意图,如图6所示,本技术还提供了一种电子设备50,包括:处理器501,以及与处理器501通信连接的存储器502及收发器503。其中,存储器502存储计算机执行指令;收发器503用于收发数据;处理器501执行存储器502存储的计算机执行指令,以实现本技术任意一个实施例提供的方法。
[0114]
具体地,程序可以包括程序代码,程序代码包括计算机执行指令。存储器502可能包含高速ram存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一
个磁盘存储器。其中,计算机执行指令存储在存储器502中,并被配置为由处理器501执行以实现本技术任意一个实施例提供的方法。相关说明可以对应参见附图中的步骤所对应的相关描述和效果进行理解,此处不做过多赘述。
[0115]
其中,本技术实施例中,存储器502和处理器501通过总线连接。总线可以是工业标准体系结构(industry standard architecture,简称为isa)总线、外部设备互连(peripheralcomponent interconnect,简称为pci)总线或扩展工业标准体系结构(extended industrystandard architecture,简称为eisa)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,图6中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
[0116]
本技术实施例还提供一种计算机可读存储介质,计算机可读存储介质中存储有计算机执行指令,计算机执行指令被处理器执行时用于实现本技术任意一个实施例提供的方法。
[0117]
本技术实施例还提供一种计算机程序产品,包括计算机执行指令,计算机执行指令被处理器执行时实现本技术任意一个实施例提供的方法。
[0118]
在本技术所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0119]
作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
[0120]
另外,在本技术各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用硬件加软件功能模块的形式实现。
[0121]
用于实施本技术的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程全路径轨迹融合装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
[0122]
在本技术的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦除可编程只读存储器(eprom或快闪存储器)、光纤、便捷式紧凑盘只读存储器(cd-rom)、光学储存设备、磁储存设备、或
上述内容的任何合适组合。
[0123]
此外,虽然采用特定次序描绘了各操作,但是这应当理解为要求这样操作以所示出的特定次序或以顺序次序执行,或者要求所有图示的操作应被执行以取得期望的结果。在一定环境下,多任务和并行处理可能是有利的。同样地,虽然在上面论述中包含了若干具体实现细节,但是这些不应当被解释为对本技术的范围的限制。在单独的实施例的上下文中描述的某些特征还可以组合地实现在单个实现中。相反地,在单个实现的上下文中描述的各种特征也可以单独地或以任何合适的子组合的方式实现在多个实现中。
[0124]
本大数据技术领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本技术的其它实施方案。本技术旨在涵盖本技术的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本技术的一般性原理并包括本技术未公开的本技术大数据技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本技术的真正范围和精神由下面的权利要求书指出。
[0125]
应当理解的是,本技术并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本技术的范围仅由所附的权利要求书来限制。

技术特征:
1.一种计算引擎运行结果对比方法,其特征在于,包括:获取待计算的目标sql语句;采用第一计算引擎及第二计算引擎分别运行待计算的目标sql语句,并获取第一计算引擎对应的第一运行结果表及第二计算引擎对应的第二运行结果表;所述第一运行结果表及第二运行结果表中包括:主键列及数据列;采用预设列特征值计算算法基于主键列计算第一运行结果表及第二运行结果表中各数据列的列特征值;若确定第一运行结果表及第二运行结果表中数据列标识相同对应数据列的列特征值均相同,则确定第一计算引擎及第二计算引擎对目标sql语句的运行结果一致。2.根据权利要求1所述的方法,其特征在于,所述采用预设列特征值计算算法基于主键列计算第一运行结果表及第二运行结果表中各数据列的列特征值,包括:启用两个线程并行地采用预设列特征值计算算法基于主键列计算第一运行结果表及第二运行结果表中各数据列的列特征值。3.根据权利要求1所述的方法,其特征在于,所述采用预设列特征值计算算法基于主键列计算第一运行结果表及第二运行结果表中各数据列的列特征值,包括:读取第一运行结果表及第二运行结果表的表结构,以获取第一运行结果表及第二运行结果表的主键列及数据列的列标识;按数据列的列标识依次采用预设列特征值计算算法基于主键列计算第一运行结果表及第二运行结果表中各数据列的列特征值。4.根据权利要求3所述的方法,其特征在于,所述按数据列的列标识依次采用预设列特征值计算算法基于主键列计算第一运行结果表及第二运行结果表中各数据列的列特征值,包括:采用行特征值计算公式计算某数据列的列标识对应各行数据的行特征值;对该数据列的列标识对应各行数据的行特征值进行累加,以获取该数据列的列特征值;所述行特征值计算公式为:rf=hash(concat(tostr(id),tostr(data)))其中,rf表示该表某个数据列在某一行的行特征值,id表示该行对应的主键列的值,data表示这一行的这个数据列的值,tostr为把某个数据类型的值转换成字符串类型的值的函数,concat为把两个字符串连接成一个字符串的函数,hash为把字符串映射成32位整数的函数。5.根据权利要求4所述的方法,其特征在于,所述采用行特征值计算公式计算某数据列的列标识对应各行数据的行特征值,对该数据列的列标识对应各行数据的行特征值进行累加,以获取该数据列的列特征值,包括:按序计算某数据列的列标识对应第一行数据的行特征值及第二行数据的行特征值;对第一行数据的行特征值及第二行数据的行特征值进行累加,以获取当前行特征累加值,并存储当前行特征累加值;按序计算下一行数据的行特征值;将下一行数据的行特征值与当前行特征累加值进行累加,以更新当前行特征累加值,
直至将该数据列最后一行数据的行特征值与当前行特征累加值进行累加,以获取该数据列的列特征值。6.根据权利要求3所述的方法,其特征在于,所述采用预设列特征值计算算法基于主键列计算第一运行结果表及第二运行结果表中各数据列的列特征值之后,包括:将各数据列的列特征值与数据列的列标识关联存储于存储空间中。7.根据权利要求6所述的方法,其特征在于,所述若确定第一运行结果表及第二运行结果表中数据列标识相同对应数据列的列特征值均相同之前,包括:获取某数据列的列标识对应的第一运行结果表的列特征值及第二运行结果表的列特征值;若确定某数据列的列标识对应的第一运行结果表的列特征值及第二运行结果表的列特征值不相同,则确定第一计算引擎及第二计算引擎对目标sql语句的运行结果不一致,中止对列特征值的对比;若确定某数据列的列标识对应的第一运行结果表的列特征值及第二运行结果表的列特征值相同,则获取并对比下一数据列的列标识对应的第一运行结果表的列特征值及第二运行结果表的列特征值。8.一种计算引擎运行结果对比装置,其特征在于,包括:获取模块,用于获取待计算的目标sql语句;运行模块,用于采用第一计算引擎及第二计算引擎分别运行待计算的目标sql语句,并获取第一计算引擎对应的第一运行结果表及第二计算引擎对应的第二运行结果表;所述第一运行结果表及第二运行结果表中包括:主键列及数据列;计算模块,用于采用预设列特征值计算算法基于主键列计算第一运行结果表及第二运行结果表中各数据列的列特征值;对比模块,用于若确定第一运行结果表及第二运行结果表中数据列标识相同对应数据列的列特征值均相同,则确定第一计算引擎及第二计算引擎对目标sql语句的运行结果一致。9.一种电子设备,其特征在于,包括:处理器,以及与所述处理器通信连接的存储器及收发器;所述存储器存储计算机执行指令;所述收发器用于收发数据;所述处理器执行所述存储器存储的计算机执行指令,以实现如权利要求1-7中任一项所述的方法。10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现如权利要求1-7中任一项所述的方法。

技术总结
本申请提供一种计算引擎运行结果对比方法、装置、设备及存储介质,可用于数据处理领域。本方法包括:获取待计算的目标SQL语句;采用第一计算引擎及第二计算引擎分别运行待计算的目标SQL语句,并获取第一计算引擎对应的第一运行结果表及第二计算引擎对应的第二运行结果表;第一运行结果表及第二运行结果表中包括:主键列及数据列;采用预设列特征值计算算法基于主键列计算第一运行结果表及第二运行结果表中各数据列的列特征值;若确定第一运行结果表及第二运行结果表中数据列标识相同对应数据列的列特征值均相同,则确定第一计算引擎及第二计算引擎对目标SQL语句的运行结果一致;避免了内存溢出并提高了数据对比效率。避免了内存溢出并提高了数据对比效率。避免了内存溢出并提高了数据对比效率。


技术研发人员:李潇 陈杰
受保护的技术使用者:联通数字科技有限公司 联通云数据有限公司
技术研发日:2023.06.29
技术公布日:2023/10/6
版权声明

本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

航空之家 https://www.aerohome.com.cn/

飞机超市 https://mall.aerohome.com.cn/

航空资讯 https://news.aerohome.com.cn/

分享:

扫一扫在手机阅读、分享本文

相关推荐