CN113760898A - 表连接操作的处理方法和装置 - Google Patents
表连接操作的处理方法和装置 Download PDFInfo
- Publication number
- CN113760898A CN113760898A CN202110097784.4A CN202110097784A CN113760898A CN 113760898 A CN113760898 A CN 113760898A CN 202110097784 A CN202110097784 A CN 202110097784A CN 113760898 A CN113760898 A CN 113760898A
- Authority
- CN
- China
- Prior art keywords
- data
- field
- intersection
- data table
- filtering
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
- G06F16/215—Improving data quality; Data cleansing, e.g. de-duplication, removing invalid entries or correcting typographical errors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2255—Hash tables
Abstract
本发明公开了一种表连接操作的处理方法和装置,涉及计算机技术领域。该方法的一具体实施方式包括:获取第一数据表及第二数据表,第一数据表及第二数据表分别包含第一字段及第二字段,第一字段及第二字段为待连接字段;根据第一数据表中的第一字段及第二数据表中的第二字段,确定第一数据表及第二数据表的数据交集;根据数据交集,对第一数据表进行过滤处理,以获得第一过滤表;根据数据交集,对第二数据表进行过滤处理,以获得第二过滤表;对第一过滤表及第二过滤表进行连接操作,以确定第一数据表及第二数据表的连接操作结果。该实施方式能够减少表连接过程中对内存及网络资源的消耗。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种表连接操作的处理方法和装置。
背景技术
二维表格模型用于将数据组织为多张由行和列组成的表。存储表时,可以采用逐行或逐列的方式进行存储。在表存储后,可对表执行连接操作。在表中的数据量较大的情况下,两表的连接操作往往会造成服务器的内存溢出或者网络资源消耗过多等问题。
发明内容
有鉴于此,本发明实施例提供一种表连接操作的处理方法和装置,能够减少表连接过程中对服务器内存及网络资源的消耗。
第一方面,本发明实施例提供了一种表连接操作的处理方法,包括:
获取第一数据表及第二数据表,所述第一数据表包含第一字段,所述第一字段为所述第一数据表的待连接字段,所述第二数据表包含第二字段,所述第二字段为所述第二数据表中与所述第一字段对应的待连接字段;
根据所述第一数据表中的第一字段及所述第二数据表中的第二字段,确定所述第一数据表及所述第二数据表的数据交集;
根据所述数据交集,对所述第一数据表进行过滤处理,以获得第一过滤表;
根据所述数据交集,对所述第二数据表进行过滤处理,以获得第二过滤表;
对所述第一过滤表及所述第二过滤表进行连接操作,以确定所述第一数据表及所述第二数据表的连接操作结果。
可选地,所述根据所述第一数据表中的第一字段及所述第二数据表中的第二字段,确定所述第一数据表及所述第二数据表的数据交集,包括:
从所述第一数据表中,提取各记录中所述第一字段的取值,得到第一数据集;
从所述第二数据表中,提取各记录中所述第二字段的取值,得到第二数据集;
确定所述第一数据集及所述第二数据集之间的交集,并将确定的交集作为所述数据交集。
可选地,所述从所述第一数据表中,提取各记录中所述第一字段的数据,得到第一数据集之后,还包括:
对所述第一数据集进行清洗处理;
从所述第二数据表中,提取各记录中所述第二字段的数据,得到第二数据集之后,还包括:
对所述第二数据集进行清洗处理;
所述确定所述第一数据集及所述第二数据集之间的交集,包括:
确定处理后的第一数据集及处理后的第二数据集之间的交集。
可选地,所述确定所述第一数据集及所述第二数据集之间的交集,包括:
确定多个哈希函数;
根据布隆过滤算法,利用所述多个哈希函数,将所述第一数据集转化为第一比特数组;
根据布隆过滤算法,利用所述多个哈希函数,将所述第二数据集转化为第二比特数组;
对所述第一比特数组及所述第二比特数组进行相与操作。
可选地,所述根据所述数据交集,对所述第一数据表进行过滤处理,以获得第一过滤表,包括:
针对所述第一数据表中的每条记录:确定所述记录中的第一字段的第一取值;判断所述数据交集中是否存在所述第一取值的对应值;若是,则将所述记录保存至所述第一过滤表中。
可选地,所述判断所述数据交集中是否存在所述第一取值的对应值,包括:
利用所述多个哈希函数,计算所述第一取值对应的多个第一哈希值;
确定所述多个第一哈希值在所述数据交集中的多个对应位置;
若所述数据交集在每个所述对应位置上的值都为1,则判断所述数据交集中存在所述第一取值的对应值。
可选地,所述根据所述数据交集,对所述第二数据表进行过滤处理,以获得第二过滤表,包括:
针对所述第二数据表中的每条记录,确定所述记录中的第二字段的第二取值;判断所述数据交集中是否存在所述第二字段的第二取值;若是,则将所述记录保存至所述第二过滤表中。
可选地,所述判断所述数据交集中是否存在所述第二取值的对应值,包括:
利用所述多个哈希函数,计算所述第二取值对应的多个第二哈希值;
确定所述多个第二哈希值在所述数据交集中的多个对应位置;
若所述数据交集在每个所述对应位置上的值都为1,则判断所述数据交集中存在所述第二取值的对应值。
可选地,所述对所述第一过滤表及所述第二过滤表进行连接操作,包括:
确定所述第一过滤表所在的多个节点,所述第一过滤表的数据量大于所述第二过滤表的数据量;
将所述第二过滤表发送至所述多个节点;
分别在各所述节点上,对所述第一过滤表及所述第二过滤表进行连接操作。
第二方面,本发明实施例提供了一种表连接操作的处理装置,包括:
表获取模块,用于获取第一数据表及第二数据表,所述第一数据表包含第一字段,所述第一字段为所述第一数据表的待连接字段,所述第二数据表包含第二字段,所述第二字段为所述第二数据表中与所述第一字段对应的待连接字段;
交集确定模块,用于根据所述第一数据表中的第一字段及所述第二数据表中的第二字段,确定所述第一数据表及所述第二数据表的数据交集;
第一过滤模块,用于根据所述数据交集,对所述第一数据表进行过滤处理,以获得第一过滤表;
第二过滤模块,用于根据所述数据交集,对所述第二数据表进行过滤处理,以获得第二过滤表;
连接操作模块,用于对所述第一过滤表及所述第二过滤表进行连接操作,以确定所述第一数据表及所述第二数据表的连接操作结果。
第三方面,本发明实施例提供了一种电子设备,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现上述任一实施例所述的方法。
第四方面,本发明实施例提供了一种计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时实现上述任一实施例所述的方法。
上述发明中的一个实施例具有如下优点或有益效果:根据第一数据表及第二数据表中的待连接字段,生成两表的数据交集,该数据交集表征了两表的待连接字段取值的交集。通过该数据交集分别对两表进行过滤,以去除两表中对于连接操作没有影响的无效记录,进而减小过滤后两表的数据量。通过对过滤后的两表进行连接操作,替代直接以原始两表进行连接操作,能够减少连接过程中所需的服务器内存及网络资源的消耗。
上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。
附图说明
附图用于更好地理解本发明,不构成对本发明的不当限定。其中:
图1是现有技术一种基于广播合并(BroadcastJoin)方式进行两表合并的示意图;
图2是现有技术一种基于哈希切换合并(ShuffleHashJoin)方式进行两表合并的示意图;
图3是本发明实施例可以应用于其中的示例性系统架构图;
图4是本发明的一个实施例提供的一种表连接操作的处理方法的流程的示意图;
图5是本发明的一个实施例提供的另一种表连接操作的处理方法的流程的示意图;
图6是本发明的一个实施例提供的一种数据交集的生成方法的流程的示意图;
图7是本发明的一个实施例提供的一种表连接操作的数据流程的示意图;
图8是本发明的一个实施例提供的一种表连接操作的处理装置的结构示意图;
图9是适于用来实现本发明实施例的终端设备或服务器的计算机系统的结构示意图。
具体实施方式
以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
本发明实施例针对数据量大小不同的两表的等值连接做为研究主题。现有技术中,可以采用如下两种连接方式,对两表进行等值连接。
方式一、采用BroadcastJoin方式对两表进行等值连接,该方式将数据量较小的表的数据全部发送到数据量较多的表所在每个节点上。图1是现有技术中一种基于BroadcastJoin方式进行两表合并的示意图。如图1所示,表1所在各节点在连接时可以不用通过shuffle操作去获取其他节点上的数据。因为在每个节点中都已经保存了表2中的数据,当连接的时候只需要在第一个task(工作单元)执行时去获取表2中的数据,在之后的每个并行的task执行时都只需要直接获取表2中的数据即可。其中,shuffle操作指在分布式集群中做某些行为时需要从其他节点上移动数据到其节点上的整个操作。
BroadcastJoin方式存在如下缺点:使用BroadcastJoin连接方式虽然可以把原先的reduce-join(归约连接)改变为map-join(映射连接),从而避免了shuffle操作。但是需要在执行前将数据量较小的表中的数据全部发送到数据量较大的表所在每个节点上,每个节点需要拥有足够的空间,并且被发送的数据量不能超过设定的某阈值。可以得知,连接的过程中需要有消耗足够多的内存资源及网络I/O。这些资源的消耗取决于小表的数据量。如果通过主控节点进行数据发送,可能直接导致主控节点的内存溢出或者直接宕机。
BroadcastJoin连接方式的缺点是由于其将小表中的数据进行了广播,导致了多种资源的消耗。
方式二、采用ShuffleHashJoin方式对两表进行等值连接。图2是现有技术中一种基于ShuffleHashJoin方式进行两表合并的示意图。如图2所示,该方式是先将数据量较大的表分解成多个比较小的分区,进行分区时需要经过一次shuffle重分区,分区时会按照大表中的键值进行分区,然后再将数据量较小的表与这些分区数据进行哈希连接。
ShuffleHashJoin方式存在如下缺点:在两张表连接中,如若有一张表相对比较小的情况下,可以将大表进行分区,分成多份数据,根据大表中的键值划定数据块,再将小表与这些数据块依次进行哈希连接。这样首先可以大大减少大表连接过程中因大表数据量过大而造成的计算压力,并且可以避免类似Broadcastjoin方式造成的资源消耗。但与Broadcastjoin方式相比下,ShuffleHashJoin方式出现了shuffle操作,并且shuffle操作时全局全程性质的,依然没有解决网路消耗的问题。shuffle操作可能导致的问题如下:
内存的消耗:首先shuffle在map(映射)计算过程中会把每个map计算的值输入到对应的bucket(桶)中,接着进行reducer(归约)操作,这种方式会产生多小文件用来存储数据,消耗内存导致内存的溢出。
网络的传输:shuffle在数据写入bucket和读取的过程中如果数据不是在本地,则需要从远程获取数据,这会导致消耗大量的网络的I/O和磁盘的I/O,这可以通过本地化级别来优化,也可以通过使用Tachyon实现数据的本地化,避免数据的远程获取。
负载均衡:在分布式的计算过程中,如何保证节点间计算资源的均衡成为了一个重点,进行shuffle操作的同时分区操作时,可能将相同的键对应的记录都输入到同一个分片中,在下一阶段reducer(归约)的过程中会导致计算的资源分配不均匀,有些记录的键只包含少数的几个数据占用了多份资源,而有些有成千上万条数据却仅分配了几个工作线程资源进行计算,这样导致了资源的分配不均,会出现短板效应,大大增加了计算延迟,带来极差的用户体验。
庞大的数据量:由于shuffle操作时需要在网络上传输,网络能有效的进行支持是个挑战。
ShuffleHashJoin连接方式的缺点产生的原因是该方式中需要执行shuffle操作,从而造成如上多种问题。
基于此,本发明实施例针对数据量不同的两表进行等值连接,提出一种表连接操作的控制方法及装置。该表连接操作的处理方法及装置能够解决上述BroadcastJoin方式及ShuffleHashJoin方式面临的诸多问题。
如图3所示,系统架构300可以包括节点301、302、303、304和网络305。网络305用以在各节点301、302、303和304之间提供通信链路。网络305可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
节点301、302、303、304可以是服务器、手机、笔记本、平板电脑、膝上型便携计算机等等。各节点301、302、303、304通过网络305进行交互。
第一数据表可分布式地存储在301、302、303、304中的至少一个节点上。第二数据表可分布式地存储在301、302、303、304中的至少一个节点上。系统从各节点上获取到第一数据表及第二数据表中的待连接字段,根据待连接字段确定第一数据表及第二数据表的数据交集;根据数据交集,对第一数据表及第二数据表分别进行过滤处理;对过滤后的两表进行连接操作,以确定第一数据表及第二数据表的连接操作结果。
应该理解,图1中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
图4是本发明的一个实施例提供的一种表连接操作的处理方法的流程的示意图,如图4所示,该方法包括:
步骤401:获取第一数据表及第二数据表,第一数据表包含第一字段,第一字段为第一数据表的待连接字段,第二数据表包含第二字段,第二字段为第二数据表中与第一字段对应的待连接字段。
本发明实施例中表连接操作指,利用第一数据表的第一字段和第二数据表的第二字段,对两表进行等值连接的操作。其中,第一字段及第二字段分别为第一数据表及第二数据表中的待连接字段。
第一字段与第二字段相对应。第一字段的名称与第二字段的名称可以相同,也可以不同。例如,第一字段的名称可以为:年龄。第二字段的名称可以为:年纪。第一字段与第二字段的名称虽然不同,但两者具有相同的含义,可以通过第一字段与第二字段,对第一数据表及第二数据表进行连接操作。
在本发明的一个实施例中,第一字段在第一数据表中的取值与第二字段在第二数据表中的取值可以相同,也可以不同。例如,第一字段及第二字段的名称都为性别。第一字段的取值为:男或女。第二字段的取值为:1或0。可先对第一字段的取值或第二字段的取值进行归一化处理,即将第一字段的取值转化为与第二字段的取值相同的值,或将第二字段的取值转化为与第一字段的取值相同的值,以确保下述步骤402的顺利执行。
步骤402:根据第一数据表中的第一字段及第二数据表中的第二字段,确定第一数据表及第二数据表的数据交集。
数据交集可用于表示第一数据表中的第一字段的取值,与第二数据表中的第二字段的取值的交集。
在本发明的一个实施例中,可通过如下方式,确定第一数据表及第二数据表的数据交集,包括:
从第一数据表中,提取各记录中第一字段的取值,得到第一数据集;
从第二数据表中,提取各记录中第二字段的取值,得到第二数据集;
确定第一数据集及第二数据集之间的交集,并将确定的交集作为数据交集。
在第一字段不是第一数据表主键的情况下,第一数据集中可能存在多个重复值。在第二字段不是第二数据表主键的情况下,第二数据集中可能存在多个重复值。可先对第一数据集及第二数据集进行去重处理,再将去重后的第一数据集及去重后的第二数据集之间的交集,确定为数据交集。这种方式可以减少数据交集中的数据量,以加快表连接的执行速度。
步骤403:根据数据交集,对第一数据表进行过滤处理,以获得第一过滤表。
具体地,针对第一数据表中的每条记录:确定记录中的第一字段的第一取值;判断数据交集中是否存在第一取值的对应值;若是,则将记录保存至第一过滤表中。
由于第一数据表及第二数据表的连接操作,为基于第一字段及第二字段的等值连接。如果第一数据表中的记录的第一字段取值未在数据交集中,则该记录为对于连接操作没有影响的无效记录。因此,第一过滤表中仅需保留有第一取值在数据交集中的记录。
步骤404:根据数据交集,对第二数据表进行过滤处理,以获得第二过滤表。
具体地,针对第二数据表中的每条记录,确定记录中的第二字段的第二取值;判断数据交集中是否存在第二字段的第二取值;若是,则将记录保存至第二过滤表中。
由于第一数据表及第二数据表的连接操作,为基于第一字段及第二字段的等值连接。如果第二数据表中的记录的第二字段取值未在数据交集中,则该记录为对于连接操作没有影响的无效记录。因此,在第二过滤表中仅保留有第二取值在数据交集中的记录。
步骤405:对第一过滤表及第二过滤表进行连接操作,以确定第一数据表及第二数据表的连接操作结果。
在本发明实施例中,根据第一数据表及第二数据表中的待连接字段,生成两表的数据交集,该数据交集可用于表征两表连接字段的交集。通过该数据交集分别对两表进行过滤,以去除两表中对于连接操作没有影响的无效记录,进而减小过滤后两表的数据量。通过对过滤后的两表进行连接操作,替代直接以原始两表进行连接操作。因此,能够解决由于表中的数据量较大,而造成表连接过程中所需的服务器内存及网络资源的消耗过多的问题。
在本发明的一个实施例中,从第一数据表中,提取各记录中第一字段的数据,得到第一数据集之后,还包括:
对第一数据集进行清洗处理;
从第二数据表中,提取各记录中第二字段的数据,得到第二数据集之后,还包括:
对第二数据集进行清洗处理;
确定第一数据集及第二数据集之间的交集,包括:
确定处理后的第一数据集及处理后的第二数据集之间的交集。
清洗处理可包括归一化、异常值处理、缺失值处理、特征删除处理中的至少一种。数据集中的数值字段可能具有不同的量纲和量纲单位,对数据集进行归一化处理,能够使各维度数据处于同一数量级。异常值处理指确定出数据集中个别明显偏离其它数据的值的异常数据,并对该异常数据进行删除或替换。缺失值处理包括删除缺失值的数据以及确定缺失值的数据的可能值,并通过可能值插补缺失值的数据。
通过对第一数据集及第二数据集进行清洗处理,可以减少由于数据集中的数据不规范,而对后续的合并操作造成不良影响的风险。
在本发明的一个实施例中,对第一过滤表及第二过滤表进行连接操作,包括:
确定第一过滤表所在的多个节点,第一过滤表的数据量大于第二过滤表的数据量;
将第二过滤表发送至至多个节点;
分别在各节点上,对第一过滤表及第二过滤表进行连接操作。
可使用广播变量进行等值连接,首先将数据量较小的第二过滤表传送至第一过滤表所在的每个节点上,这样避免了节点间数据拉取过程,且在连接过程中没有shuffle操作,避免了负载均衡问题。
其中,所需的网络开销=集群节点数*第二过滤表的记录数*每条广播记录的数据大小。由于第二过滤表为对第二数据表进行过滤处理后的数据表,第二过滤表中的数据量小于第二数据表中数据量,可减少广播数据所需的网络开销。
如下实施例以Spark架构为框架,结合布隆过滤算法讲解一个表连接的具体实施例。图5是该实施例提供的另一种表连接操作的处理方法的流程的示意图,如图5所示,该方法包括:
步骤501:获取第一数据表及第二数据表,第一数据表包含第一字段,第一字段为第一数据表的待连接字段,第二数据表包含第二字段,第二字段为第二数据表中与第一字段对应的待连接字段。
可先获取数据量不同的两份数据,并通过第一数据表及第二数据表分别存储两份数据。第一数据表及第二数据表是以二维表形式存在的结构化数据。
步骤502:根据布隆过滤算法,利用多个哈希函数,将第一数据表转化为第一比特数组。
可先从第一数据表中,提取各记录中第一字段的取值,得到第一数据集;再根据布隆过滤算法,将第一数据集转化为第一比特数组。
比特数组也称为位数组,是为了有效地利用内存空间而设计的一种存储数据的方式。在比特数组中一个整数在内存中用一位表示。这里所谓的表示就是如果整数存在,相应的二进制位就为1,否则为0。
布隆过滤算法对应一个比特数组和一系列哈希函数。当一个元素加入布隆过滤器时,会使用一系列哈希函数对其进行多次计算,得到多个哈希值,并且根据得到的哈希值,在比特数组中把对应下标的值置位1。
在Spark架构中,先对第一数据表使用map函数过滤无关字段,得到只包含第一字段取值的第一数据集。再对第一字段的各取值使用布隆过滤算法进行去重操作,并将有效数据压缩至第一比特数组中。
步骤503:根据布隆过滤算法,利用多个哈希函数,将第二数据表转化为第二比特数组。
可先从第二数据表中,提取各记录中第二字段的取值,得到第二数据集;再根据布隆过滤算法,将第二数据集转化为第二比特数组。
在Spark架构中,先对第二数据表使用map函数过滤无关字段,得到只包含第二字段取值的第二数据集。再对第二字段的各取值使用布隆过滤算法进行去重操作,并将有效数据压缩至第二比特数组中。
步骤504:对第一比特数组及第二比特数组进行相与操作,以生成数据交集。
图6是本发明的一个实施例提供的一种数据交集的生成方法的流程的示意图。如图6所示,分别抽取表1及表2中的待连接字段,再分别对抽取的待连接字段进行去重处理,分别利用布隆过滤器对去重后的待连接字段进行转换,生成第一比特数组及第二比特数组,最后对第一比特数组及第二比特数组进行与运算,生成数据交集。
数据交集是通过对第一比特数组及第二比特数组进行相与操作得到的。因此,数据交集也通过比特数组来表示。
由于数据交集是利用第一数据集及第二数据集压缩后的位数组相与得到的。所以数据交集可用于表示待连接字段的取值的交集。可通过数据交集对第一数据表及第二数据表进行过滤。
步骤505:针对第一数据表中的每条记录:确定记录中的第一字段的第一取值;判断数据交集中是否存在第一取值的对应值;若是,则将记录保存至第一过滤表中。
可通过布隆过滤器判断数据交集中是否存在第一取值的对应值。判断某个数是否在布隆过滤器中,就对该元素进行多次哈希计算,得到的值在位数组中判断每个元素是否都为1,如果每个元素都为1,就说明这个值在布隆过滤器中。
具体地,可通过如下方式判断数据交集中是否存在第一取值的对应值,包括:
利用多个哈希函数,计算第一取值对应的多个第一哈希值;
确定多个第一哈希值在数据交集中的多个对应位置;
若数据交集在每个对应位置上的值都为1,则判断数据交集中存在第一取值的对应值。
假设布隆过滤器对应有n个哈希函数。首先对第一取值利用n个哈希函数求出n个哈希值。再利用这些哈希值对数据交集的数值长度m进行模运算,求得的n个值,对照着数组查询数据交集在该位置上的值是否为1,如果这n个值全部为1,则第一取值存在于数据交集中,应被第一过滤表中,否则应丢弃该数据。
步骤506:针对第二数据表中的每条记录,确定记录中的第二字段的第二取值;判断数据交集中是否存在第二字段的第二取值;若是,则将记录保存至第二过滤表中。
在本发明的一个实施例中,判断数据交集中是否存在第二取值的对应值,包括:
利用多个哈希函数,计算第二取值对应的多个第二哈希值;
确定多个第二哈希值在数据交集中的多个对应位置;
若数据交集在每个对应位置上的值都为1,则判断数据交集中存在第二取值的对应值。
通过布隆过滤器,判断数据交集中是否存在第二取值的对应值的过程,如上述步骤505所述,此处不再赘述。
步骤507:对第一过滤表及第二过滤表进行连接操作,以确定第一数据表及第二数据表的连接操作结果。
在本发明实施例中,利用布隆过滤算法对第一数据表及第二数据表进行过滤。布隆过滤算法可分别将第一数据表中的第一字段的各取值及第二数据表中的第二字段的各取值压缩至一个比特数组中,减少表连接过程中对内存资源的消耗。此外,通过布隆过滤算法也可快速判断出某一取值是否在存在于布隆过滤器中,以提升系统的运算速度。
在本发明的一个实施例中,步骤502及步骤503之前,还包括:
对第一数据表及第二数据表进行无效字段的过滤处理。
具体地,在Spark框架中,可以map算子对第一数据表及第二数据表过滤无效字段数据。
图7是本发明的一个实施例提供的一种表连接操作的数据流程的示意图。如图7所示,横向过滤为对第一数据表及第二数据表过滤无效字段数据的操作。众向过滤为利用数据交集对第一数据表及第二数据表进行过滤的操作。
在本发明实施例中,分别使用横向过滤和众向过滤,预先过滤大部分影响等值连接效率的无效数据,以减少第一数据表及第二数据表中的数据量,提升系统运算的效率。
为使本发明实施例的方法更容易理解,以下以两表连接的具体操作过程为例进行讲解。两表的连接操作包括:
求数据交集:在生成数据交集之前,首先提取两表的连接字段,然后分别生成第一比特数组bf1及第二比特数组bf2;将提取的第一比特数组及第二比特数组相与运算得到数据交集bf3;用bf3对两张表进行过滤;将过滤后的两张表转成RDD(弹性分布式数据集,Resilient Distributed Dataset);对RDD进行映射转换。RDD是Spark中的抽象数据结构类型,任何数据在Spark中都被表示为RDD。从编程的角度来看,RDD可以简单看成是一个数组。和普通数组的区别是,RDD中的数据是分区存储的,这样不同分区的数据就可以分布在不同的机器上,同时可以被并行处理。
Broadcast优化算法:使用rdd.map方法代替rdd.join方法实现两表的连接操作。rdd.map操作是对RDD中的每个元素都执行一个指定的函数来产生一个新的RDD。任何原RDD中的元素在新RDD中都有且只有一个元素与之对应。
首先,将小表的数据传送至大表所在的每个节点上,再使用rdd.map方法实现两表的连接操作,这样避免了节点间数据拉取过程。使用rdd.map方法代替rdd.join方法实现两表的连接操作,也就是map阶段进行表之间的连接,而不需要进入到reduce阶段才进行连接,可以防止表连接过程中出现shuffle操作。
在本发明实施例中,首先,通过数据交集,预先过滤大部分影响等值连接效率的无效数据,以减少连接操作的表中的数据量。其次,将小表使用广播变量分发到大表所在集群中的每个节点上,在计算时可以直接获取较小表的全量数据进行计算,这种方案一方面可以解决BroadcastJoin连接方式痛点,即可以尽可能避免小表的数据量过大导致的内存和网络压力问题。另一方面,可以避免分布式架构下作等值连接过程中常遇到的shuffle操作导致的网络延迟、磁盘I/O、内存的消耗及负载均衡等问题。
图8是本发明的一个实施例提供的一种表连接操作的处理装置的结构示意图,包括:
表获取模块801,用于获取第一数据表及第二数据表,第一数据表包含第一字段,第一字段为第一数据表的待连接字段,第二数据表包含第二字段,第二字段为第二数据表中与第一字段对应的待连接字段;
交集确定模块802,用于根据第一数据表中的第一字段及第二数据表中的第二字段,确定第一数据表及第二数据表的数据交集;
第一过滤模块803,用于根据数据交集,对第一数据表进行过滤处理,以获得第一过滤表;
第二过滤模块804,用于根据数据交集,对第二数据表进行过滤处理,以获得第二过滤表;
连接操作模块805,用于对第一过滤表及第二过滤表进行连接操作,以确定第一数据表及第二数据表的连接操作结果。
可选地,交集确定模块802具体用于:
从第一数据表中,提取各记录中第一字段的取值,得到第一数据集;
从第二数据表中,提取各记录中第二字段的取值,得到第二数据集;
确定第一数据集及第二数据集之间的交集,并将确定的交集作为数据交集。
可选地,交集确定模块802具体用于:
对第一数据集进行清洗处理;
对第二数据集进行清洗处理;
确定处理后的第一数据集及处理后的第二数据集之间的交集。
可选地,交集确定模块802具体用于:
确定多个哈希函数;
根据布隆过滤算法,利用多个哈希函数,将第一数据集转化为第一比特数组;
根据布隆过滤算法,利用多个哈希函数,将第二数据集转化为第二比特数组;
对第一比特数组及第二比特数组进行相与操作。
可选地,第一过滤模块803具体用于:
针对第一数据表中的每条记录:确定记录中的第一字段的第一取值;判断数据交集中是否存在第一取值的对应值;若是,则将记录保存至第一过滤表中。
可选地,第一过滤模块803具体用于:
利用多个哈希函数,计算第一取值对应的多个第一哈希值;
确定多个第一哈希值在数据交集中的多个对应位置;
若数据交集在每个对应位置上的值都为1,则判断数据交集中存在第一取值的对应值。
可选地,第二过滤模块804具体用于:
针对第二数据表中的每条记录,确定记录中的第二字段的第二取值;判断数据交集中是否存在第二字段的第二取值;若是,则将记录保存至第二过滤表中。
可选地,第二过滤模块804具体用于:
利用多个哈希函数,计算第二取值对应的多个第二哈希值;
确定多个第二哈希值在数据交集中的多个对应位置;
若数据交集在每个对应位置上的值都为1,则判断数据交集中存在第二取值的对应值。
可选地,连接操作模块905具体用于:
确定第一过滤表所在的多个节点,第一过滤表的数据量大于第二过滤表的数据量;
将第二过滤表发送至至多个节点;
分别在各节点上,对第一过滤表及第二过滤表进行连接操作。
本发明实施例提供了一种电子设备,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当一个或多个程序被一个或多个处理器执行,使得一个或多个处理器实现上述任一实施例的方法。
下面参考图9,其示出了适于用来实现本发明实施例的终端设备的计算机系统900的结构示意图。图9示出的终端设备仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如9所示,计算机系统900包括中央处理单元(CPU)901,其可以根据存储在只读存储器(ROM)902中的程序或者从存储部分908加载到随机访问存储器(RAM)903中的程序而执行各种适当的动作和处理。在RAM 903中,还存储有系统900操作所需的各种程序和数据。CPU 901、ROM 902以及RAM 903通过总线904彼此相连。输入/输出(I/O)接口905也连接至总线904。
以下部件连接至I/O接口905:包括键盘、鼠标等的输入部分906;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分907;包括硬盘等的存储部分908;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分909。通信部分909经由诸如因特网的网络执行通信处理。驱动器910也根据需要连接至I/O接口905。可拆卸介质911,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器910上,以便于从其上读出的计算机程序根据需要被安装入存储部分908。
特别地,根据本发明公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本发明公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分909从网络上被下载和安装,和/或从可拆卸介质911被安装。在该计算机程序被中央处理单元(CPU)901执行时,执行本发明的系统中限定的上述功能。
需要说明的是,本发明所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本发明中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本发明中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本发明实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块也可以设置在处理器中,例如,可以描述为:一种处理器包括表获取模块、交集确定模块、第一过滤模块、第二过滤模块、连接操作模块。其中,这些模块的名称在某种情况下并不构成对该模块本身的限定,例如,表获取模块还可以被描述为“获取第一数据表及第二数据表的模块”。
作为另一方面,本发明还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该设备包括:
获取第一数据表及第二数据表,所述第一数据表包含第一字段,所述第一字段为所述第一数据表的待连接字段,所述第二数据表包含第二字段,所述第二字段为所述第二数据表中与所述第一字段对应的待连接字段;
根据所述第一数据表中的第一字段及所述第二数据表中的第二字段,确定所述第一数据表及所述第二数据表的数据交集;
根据所述数据交集,对所述第一数据表进行过滤处理,以获得第一过滤表;
根据所述数据交集,对所述第二数据表进行过滤处理,以获得第二过滤表;
对所述第一过滤表及所述第二过滤表进行连接操作,以确定所述第一数据表及所述第二数据表的连接操作结果。
根据本发明实施例的技术方案,根据第一数据表及第二数据表中的待连接字段,生成两表的数据交集,该数据交集可用于表征两表连接字段的交集。通过该数据交集分别对两表进行过滤,以去除两表中对于连接操作没有影响的无效记录,进而减小过滤后两表的数据量。通过对过滤后的两表进行连接操作,替代直接以原始两表进行连接操作,能够减少连接过程中所需的服务器内存及网络资源的消耗。
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。
Claims (12)
1.一种表连接操作的处理方法,其特征在于,包括:
获取第一数据表及第二数据表,所述第一数据表包含第一字段,所述第一字段为所述第一数据表的待连接字段,所述第二数据表包含第二字段,所述第二字段为所述第二数据表中与所述第一字段对应的待连接字段;
根据所述第一数据表中的第一字段及所述第二数据表中的第二字段,确定所述第一数据表及所述第二数据表的数据交集;
根据所述数据交集,对所述第一数据表进行过滤处理,以获得第一过滤表;
根据所述数据交集,对所述第二数据表进行过滤处理,以获得第二过滤表;
对所述第一过滤表及所述第二过滤表进行连接操作,以确定所述第一数据表及所述第二数据表的连接操作结果。
2.根据权利要求1所述的方法,其特征在于,所述根据所述第一数据表中的第一字段及所述第二数据表中的第二字段,确定所述第一数据表及所述第二数据表的数据交集,包括:
从所述第一数据表中,提取各记录中所述第一字段的取值,得到第一数据集;
从所述第二数据表中,提取各记录中所述第二字段的取值,得到第二数据集;
确定所述第一数据集及所述第二数据集之间的交集,并将确定的交集作为所述数据交集。
3.根据权利要求2所述的方法,其特征在于,所述从所述第一数据表中,提取各记录中所述第一字段的数据,得到第一数据集之后,还包括:
对所述第一数据集进行清洗处理;
从所述第二数据表中,提取各记录中所述第二字段的数据,得到第二数据集之后,还包括:
对所述第二数据集进行清洗处理;
所述确定所述第一数据集及所述第二数据集之间的交集,包括:
确定处理后的第一数据集及处理后的第二数据集之间的交集。
4.根据权利要求2所述的方法,其特征在于,所述确定所述第一数据集及所述第二数据集之间的交集,包括:
确定多个哈希函数;
根据布隆过滤算法,利用所述多个哈希函数,将所述第一数据集转化为第一比特数组;
根据布隆过滤算法,利用所述多个哈希函数,将所述第二数据集转化为第二比特数组;
对所述第一比特数组及所述第二比特数组进行相与操作。
5.根据权利要求4所述的方法,其特征在于,所述根据所述数据交集,对所述第一数据表进行过滤处理,以获得第一过滤表,包括:
针对所述第一数据表中的每条记录:确定所述记录中的第一字段的第一取值;判断所述数据交集中是否存在所述第一取值的对应值;若是,则将所述记录保存至所述第一过滤表中。
6.根据权利要求5所述的方法,其特征在于,所述判断所述数据交集中是否存在所述第一取值的对应值,包括:
利用所述多个哈希函数,计算所述第一取值对应的多个第一哈希值;
确定所述多个第一哈希值在所述数据交集中的多个对应位置;
若所述数据交集在每个所述对应位置上的值都为1,则判断所述数据交集中存在所述第一取值的对应值。
7.根据权利要求4所述的方法,其特征在于,所述根据所述数据交集,对所述第二数据表进行过滤处理,以获得第二过滤表,包括:
针对所述第二数据表中的每条记录,确定所述记录中的第二字段的第二取值;判断所述数据交集中是否存在所述第二字段的第二取值;若是,则将所述记录保存至所述第二过滤表中。
8.根据权利要求7所述的方法,其特征在于,所述判断所述数据交集中是否存在所述第二取值的对应值,包括:
利用所述多个哈希函数,计算所述第二取值对应的多个第二哈希值;
确定所述多个第二哈希值在所述数据交集中的多个对应位置;
若所述数据交集在每个所述对应位置上的值都为1,则判断所述数据交集中存在所述第二取值的对应值。
9.根据权利要求1所述的方法,其特征在于,所述对所述第一过滤表及所述第二过滤表进行连接操作,包括:
确定所述第一过滤表所在的多个节点,所述第一过滤表的数据量大于所述第二过滤表的数据量;
将所述第二过滤表发送至所述多个节点;
分别在各所述节点上,对所述第一过滤表及所述第二过滤表进行连接操作。
10.一种表连接操作的处理装置,其特征在于,包括:
表获取模块,用于获取第一数据表及第二数据表,所述第一数据表包含第一字段,所述第一字段为所述第一数据表的待连接字段,所述第二数据表包含第二字段,所述第二字段为所述第二数据表中与所述第一字段对应的待连接字段;
交集确定模块,用于根据所述第一数据表中的第一字段及所述第二数据表中的第二字段,确定所述第一数据表及所述第二数据表的数据交集;
第一过滤模块,用于根据所述数据交集,对所述第一数据表进行过滤处理,以获得第一过滤表;
第二过滤模块,用于根据所述数据交集,对所述第二数据表进行过滤处理,以获得第二过滤表;
连接操作模块,用于对所述第一过滤表及所述第二过滤表进行连接操作,以确定所述第一数据表及所述第二数据表的连接操作结果。
11.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-9中任一所述的方法。
12.一种计算机可读介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求1-9中任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110097784.4A CN113760898A (zh) | 2021-01-25 | 2021-01-25 | 表连接操作的处理方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110097784.4A CN113760898A (zh) | 2021-01-25 | 2021-01-25 | 表连接操作的处理方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113760898A true CN113760898A (zh) | 2021-12-07 |
Family
ID=78786458
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110097784.4A Pending CN113760898A (zh) | 2021-01-25 | 2021-01-25 | 表连接操作的处理方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113760898A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116910099A (zh) * | 2023-09-06 | 2023-10-20 | 天津神舟通用数据技术有限公司 | 一种数据处理方法、装置、设备及介质 |
-
2021
- 2021-01-25 CN CN202110097784.4A patent/CN113760898A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116910099A (zh) * | 2023-09-06 | 2023-10-20 | 天津神舟通用数据技术有限公司 | 一种数据处理方法、装置、设备及介质 |
CN116910099B (zh) * | 2023-09-06 | 2023-11-17 | 天津神舟通用数据技术有限公司 | 一种数据处理方法、装置、设备及介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107832406B (zh) | 海量日志数据的去重入库方法、装置、设备及存储介质 | |
CN108629029B (zh) | 一种应用于数据仓库的数据处理方法和装置 | |
CN108595268B (zh) | 一种基于MapReduce的数据分配方法、装置及计算机可读存储介质 | |
EP3238106A1 (en) | Compaction policy | |
US8898677B2 (en) | Data arrangement calculating system, data arrangement calculating method, master unit and data arranging method | |
CN112434000B (zh) | 一种基于hdfs的小文件合并方法、装置及设备 | |
CN107391770B (zh) | 一种处理数据的方法、装置、设备以及存储介质 | |
CN109471893B (zh) | 网络数据的查询方法、设备及计算机可读存储介质 | |
CN113760898A (zh) | 表连接操作的处理方法和装置 | |
CN112860412B (zh) | 业务数据处理方法、装置、电子设备及存储介质 | |
CN108334532B (zh) | 一种基于Spark的Eclat并行化方法、系统及装置 | |
CN112433757A (zh) | 一种确定接口调用关系的方法和装置 | |
US10083121B2 (en) | Storage system and storage method | |
CN111723089A (zh) | 一种基于列式存储格式处理数据的方法和装置 | |
CN115438007A (zh) | 一种文件合并方法、装置、电子设备及介质 | |
CN116226150A (zh) | 基于分布式数据库的数据处理方法、装置、设备和介质 | |
CN116010345A (zh) | 一种实现流批一体数据湖的表服务方案的方法、装置及设备 | |
CN114297196A (zh) | 元数据存储方法、装置、电子设备及存储介质 | |
CN107665241B (zh) | 一种实时数据多维度去重方法和装置 | |
CN113590322A (zh) | 一种数据处理方法和装置 | |
CN112800091A (zh) | 一种流批一体式计算控制系统及方法 | |
CN113448957A (zh) | 一种数据查询方法和装置 | |
CN111290927A (zh) | 一种数据监控方法和装置 | |
CN112148734A (zh) | 基于区块链的交易数据处理方法、装置、设备及存储介质 | |
CN110019162B (zh) | 实现属性归一的方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |