CN106933927B - 数据表的连接方法和装置 - Google Patents
数据表的连接方法和装置 Download PDFInfo
- Publication number
- CN106933927B CN106933927B CN201511032710.3A CN201511032710A CN106933927B CN 106933927 B CN106933927 B CN 106933927B CN 201511032710 A CN201511032710 A CN 201511032710A CN 106933927 B CN106933927 B CN 106933927B
- Authority
- CN
- China
- Prior art keywords
- data
- connection
- tables
- data tables
- sequence
- 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.)
- Active
Links
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/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开了一种数据表的连接方法和装置。其中,该连接方法包括:获取待连接的多个数据表中每个数据表的统计信息,其中,统计信息中记录有对应的数据表的属性信息;基于每个数据表的属性信息,确定每个数据表的数据容量;按照每个数据表的数据容量确定多个数据表的连接顺序;按照确定的连接顺序依次连接多个数据表。通过本申请,解决了现有技术中表连接时系统效率低的技术问题。
Description
技术领域
本申请涉及数据处理领域,具体而言,涉及一种数据表的连接方法和装置。
背景技术
针对查询维度链计算出的所有表结点(如多个事实数据表),需要进行表连接,而表连接顺序的设定对整个查询系统的性能的影响较大。现有技术中进行表连接时,由于各引擎的查询的实现方式不同,对整个查询系统的性能的影响方式不同,在进行表连接时,随机确定顺序或预先确定表顺序,该表连接方法的性能较差。另外,如何判断表是大表还是小表,且在带有过滤条件后,如何判断哪个是大表,哪个是小表,目前还未提出任何与此相关的方案。按照随机确定的顺序或预先确定的表顺序对各个表进行连接,表连接效率低,将会造成系统资源开销大、性能差。
针对现有技术中表连接时系统效率低的问题,目前尚未提出有效的解决方案。
发明内容
本申请实施例提供了一种数据表的连接方法和装置,以至少解决表连接时系统效率低的问题。
根据本申请实施例的一个方面,提供了一种数据表的连接方法,该连接方法包括:获取待连接的多个数据表中每个数据表的统计信息,其中,统计信息中记录有对应的数据表的属性信息;基于每个数据表的属性信息,确定每个数据表的数据容量;按照每个数据表的数据容量确定多个数据表的连接顺序;按照确定的连接顺序依次连接多个数据表。
进一步地,按照每个数据表的数据容量确定多个数据表的连接顺序包括:获取多个数据表的序列,其中,序列中的数据表按照数据表的数据容量的大小排列;将序列中数据表的顺序作为多个数据表的连接顺序。
进一步地,按照确定的连接顺序依次连接多个数据表包括:将连接顺序中的第一个数据表设置为当前的第一表,对当前的第一表执行下述操作,直至多个数据表中的最后一个数据表,操作包括:按照连接顺序,获取当前的第一表的下一个数据表,将下一个数据表作为第二表;将第一表和第二表连接,得到第三表;确定第三表和多个数据表中未进行连接的数据表中,用于执行下一次操作的当前的第一表。
进一步地,确定第三表和多个数据表中未进行连接的数据表中,用于执行下一次操作的当前的第一表包括:基于第三表与多个数据表中未进行连接的数据表的数据容量,重新确定连接顺序;将重新确定的连接顺序中第一个数据表作为用于执行下一次操作的当前的第一表。
进一步地,第一表的数据容量小于第二表的数据容量,其中,将第一表和第二表连接,得到第三表包括下述至少之一:按照内连接方式,将第一表和第二表的交集作为第三表;按照左外连接方式,将第二表作为左表,将第一表作为右表,使用左表的过滤条件过滤右表中记录的数据,得到第三表;按照右外连接方式,将第二表作为左表,将第一表作为右表,使用右表的过滤条件过滤左表中记录的数据,得到第三表;按照全外连接方式,将第一表和第二表的并集作为第三表。
进一步地,在将第一表和第二表连接,得到第三表之后,连接方法还包括:确定第三表的数据容量,具体包括:若按照内连接方式连接第一表和第二表,则将第一表的数据容量作为第三表的数据容量;若按照左外连接方式连接第一表和第二表,则将第二表的数据容量作为第三表的数据容量;若按照右外连接方式连接第一表和第二表,则将第一表的数据容量作为第三表的数据容量;若按照全外连接方式连接第一表和第二表,则将第一表和第二表的数据容量之和作为第三表的数据容量。
进一步地,基于每个数据表的属性信息,确定每个数据表的数据容量包括:从数据表的属性信息中读取数据表的数据容量;或从数据表的属性信息中读取数据表的行数,使用数据表的行数表示数据容量。
根据本申请实施例的另一方面,还提供了一种数据表的连接装置,该连接装置包括:获取模块,用于获取待连接的多个数据表中每个数据表的统计信息,其中,统计信息中记录有对应的数据表的属性信息;第一确定模块,用于基于每个数据表的属性信息,确定每个数据表的数据容量;第二确定模块,用于按照每个数据表的数据容量确定多个数据表的连接顺序;连接模块,用于按照确定的连接顺序依次连接多个数据表。
进一步地,第二确定模块包括:序列获取子模块,用于获取多个数据表的序列,其中,序列中的数据表按照数据表的数据容量的大小排列;第一处理子模块,用于将序列中数据表的顺序作为多个数据表的连接顺序。
进一步地,连接模块包括:执行子模块,用于将连接顺序中的第一个数据表设置为当前的第一表,调用第二处理子模块、第三处理子模块、第四处理子模块对当前的第一表执行下述操作,直至多个数据表中的最后一个数据表,操作包括:第二处理子模块,用于按照连接顺序,获取当前的第一表的下一个数据表,将下一个数据表作为第二表;第三处理子模块,用于将第一表和第二表连接,得到第三表;第四处理子模块,用于确定第三表和多个数据表中未进行连接的数据表中,用于执行下一次操作的当前的第一表。
进一步地,第四处理子模块包括:重新确定子模块,用于基于第三表与多个数据表中未进行连接的数据表的数据容量,重新确定连接顺序;第五处理子模块,用于将重新确定的连接顺序中第一个数据表作为用于执行下一次操作的当前的第一表。
进一步地,第一表的数据容量小于第二表的数据容量,其中,第三处理子模块包括下述至少之一:内连接处理子模块,用于按照内连接方式,将第一表和第二表的交集作为第三表;左外连接处理子模块,用于按照左外连接方式,将第二表作为左表,将第一表作为右表,使用左表的过滤条件过滤右表中记录的数据,得到第三表;右外连接处理子模块,用于按照右外连接方式,将第二表作为左表,将第一表作为右表,使用右表的过滤条件过滤左表中记录的数据,得到第三表;全外连接处理子模块,用于按照全外连接方式,将第一表和第二表的并集作为第三表。
进一步地,连接装置还包括:第三确定模块,用于在将第一表和第二表连接,得到第三表之后,确定第三表的数据容量,具体包括:第一数据容量确定子模块,用于若按照内连接方式连接第一表和第二表,则将第一表的数据容量作为第三表的数据容量;第二数据容量确定子模块,用于若按照左外连接方式连接第一表和第二表,则将第二表的数据容量作为第三表的数据容量;第三数据容量确定子模块,用于若按照右外连接方式连接第一表和第二表,则将第一表的数据容量作为第三表的数据容量;第四数据容量确定子模块,用于若按照全外连接方式连接第一表和第二表,则将第一表和第二表的数据容量之和作为第三表的数据容量。
进一步地,第一确定模块包括:第一读取子模块,用于从数据表的属性信息中读取数据表的数据容量;或第二读取子模块,用于从数据表的属性信息中读取数据表的行数,使用数据表的行数表示数据容量。
在本申请实施例中,基于待连接的多个数据表的数据容量,确定多个数据表的连接顺序,并将多个数据表按照该连接顺序依次进行连接。通过上述实施例,基于数据表的数据容量确定连接多个数据表的连接顺序,按照该连接顺序依序连接多个数据表,也即,可以按照数据表的数据容量连接数据表,能够使得系统执行速度快,耗费时间短,从而提高表连接的效率,解决了现有技术中表连接时系统效率低的问题。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1是根据本申请实施例的一种数据表的连接方法的流程图;
图2是根据本申请实施例的一种数据表的连接装置的示意图。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
实施例1
根据本申请实施例,提供了一种数据表的连接方法的实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
图1是根据本申请实施例的一种数据表的连接方法的流程图,如图1所示,该连接方法可以包括如下步骤:
步骤S102,获取待连接的多个数据表中每个数据表的统计信息,其中,统计信息中记录有对应的数据表的属性信息。
步骤S104,基于每个数据表的属性信息,确定每个数据表的数据容量。
步骤S106,按照每个数据表的数据容量确定多个数据表的连接顺序。
步骤S108,按照确定的连接顺序依次连接多个数据表。
采用本申请实施例,基于待连接的多个数据表的数据容量,确定多个数据表的连接顺序,并将多个数据表按照该连接顺序依次进行连接。通过上述实施例,基于数据表的数据容量确定连接多个数据表的连接顺序,按照该连接顺序依序连接多个数据表,也即,可以按照数据表的数据容量连接数据表,能够使得系统执行速度快,耗费时间短,从而提高表连接的效率,解决了现有技术中表连接时系统效率低的问题。
其中,上述实施例中,数据表中可以记录多个属性数据之间的关联关系,每个属性数据包含多个事实数据(即属性值),如页面访问表中可以记录页面访问次数、页面访问地址和页面访问时长之间的关联关系。
本申请实施例中的表连接大多为join连接,也即两个数据表进行连接的时候,存在过滤条件,即多表过滤后,数据量会更小。
为了进一步提高表连接的性能,本申请还提供了一种可选的实施例,在该实施例中,按照每个数据表的数据容量确定多个数据表的连接顺序可以包括:获取多个数据表的序列,其中,序列中的数据表按照数据表的数据容量的大小排列;将序列中数据表的顺序作为多个数据表的连接顺序。
在上述实施例中,可以按照各个数据表的数据容量从大到小排列,也可以按照各个数据表的数据容量从小到大排列。
在按照数据容量从小到大排列的情况下,将多个数据表按照该排列顺序,依次连接。在该种连接方式中,可以将小表相连,再依次和中表连接,再和大表连接,由于表连接时,存在过滤条件,在两个表连接后数据量会更小,通过上述方案,可以将小表变为更小,再与最大的表连接,这样效率很高。
通过上述实施例,可以提高表连接的执行速度,减少表连接的时间,从而提高系统的表连接效率。
本申请上述实施例中的大表、中表和小表是通过数据容量确定的,该数据容量也可以称之为数据量,也即,大表的数据量大于中表的数据量,中表的数据量大于小表的数据量。
在本申请的上述实施例中,将连接顺序中的第一个数据表设置为当前的第一表,对当前的第一表执行下述操作,直至多个数据表中的最后一个数据表,该操作包括:按照连接顺序,获取当前的第一表的下一个数据表,将下一个数据表作为第二表;将第一表和第二表连接,得到第三表;确定第三表和多个数据表中未进行连接的数据表中,用于执行下一次操作的当前的第一表。
具体地,将待连接的多个数据表按照数据容量从小到大的顺序排列,得到多个数据表的排序序列,从排序序列中的第一个表(即多个数据表中数据容量最小的数据表)开始,将排序在第一位的确定为当前的第一表、将排序在第二位的确定为第二表,将第一表与第二表连接,得到连接后的数据表(即上述实施例中的第三表),将排序在第一位和第二位的表的相关信息从排序序列中删除,并从该排序序列中读取排位在第一位的表,也即,此时将第三表作为第一表,将读取的排位在第一位的表作为第二表,将第一表和第二表执行上述步骤,直至完成对多个数据表的连接。
上述的相关信息可以为数据表的标识。
在一个可选的方案中,确定第三表和多个数据表中未进行连接的数据表中,用于执行下一次操作的当前的第一表可以包括:基于第三表与多个数据表中未进行连接的数据表的数据容量,重新确定连接顺序;将重新确定的连接顺序中第一个数据表作为用于执行下一次操作的当前的第一表。
具体的,在将第一表和第二表的相关信息从多个数据表中删除之后,可以将第三表和未进行连接的表重新排序,得到新的序列,将该新的序列中的排序第一位的数据表作为下一次操作的当前的第一表。
通过上述实施例,按照排序序列中各个数据表的顺序,依次对多个数据表进行连接,采用该方案,以提高系统进行表连接时的效率。
在本申请的上述实施例中,第一表的数据容量小于第二表的数据容量,其中,将选取的第一表和第二表连接,得到第三表包括下述至少之一:按照内连接方式,将第一表和第二表的交集作为第三表;按照左外连接方式,将第二表作为左表,将第一表作为右表,使用左表的过滤条件过滤右表中记录的数据,得到第三表;按照右外连接方式,将第二表作为左表,将第一表作为右表,使用右表的过滤条件过滤左表中记录的数据,得到第三表;按照全外连接方式,将第一表和第二表的并集作为第三表。
进一步地,在将选取的第一表和第二表连接,得到第三表之后,上述连接方法还可以包括:确定第三表的数据容量,具体包括:若按照内连接方式连接第一表和第二表,则将第一表的数据容量作为第三表的数据容量;若按照左外连接方式连接第一表和第二表,则将第二表的数据容量作为第三表的数据容量;若按照右外连接方式连接第一表和第二表,则将第一表的数据容量作为第三表的数据容量;若按照全外连接方式连接第一表和第二表,则将第一表和第二表的数据容量之和作为第三表的数据容量。
具体地,在第一表的数据容量小于第二表的数据容量的情况下,将第一表和第二表进行连接,且得到连接后的数据表(即第三表)的数据容量的方案包括如下四种:
第一种,内连接方式(即Inner Join):该种连接方式是以第一表和第二表中的相同属性条件为基准,连接后的数据表中包括相同的属性条件对应的数据信息,即为第一表和第二表的交集;采用该种连接方式得到的第三表的数据容量默认预估变为两个连接的数据表中数据容量较小(即第一表)的表的预估行数,也可能出现第三表的行数小于第一表的情况。
第二种,左外连接方式(即Left Join):将第一表作为右表,将第二表作为左表,采用该种连接方式,以左表的过滤条件为基准,过滤右表中记录的数据,即通过左表的过滤条件实现第一表和第二表的连接,得到第三表;在该种连接方式下,两表连接后得到的第三表的数据容量为左表的行数。
第三种,右外连接方式(即Right Join):将第一表作为右表,将第二表作为左表,采用该种连接方式,以右表的过滤条件为基准,过滤左表中记录的数据,即通过右表的过滤条件实现第一表和第二表的连接,得到第三表;在该种连接方式下,两表连接后得到的第三表的数据容量为右表的行数。
第四种,全外连接方式(即Full Join):该种连接方式以第一表和第二表中的所有属性条件为基准,连接后的数据表中包括两个表中所有的属性条件对应的数据信息,即为第一表和第二表的并集;采用该种连接方式得到的第三表的数据容量默认预估变为两个连接的数据表的行数的总和。
通常表连接方式大多采用上述的第一种连接方式,在多维度过滤条件下,采用该种连接方式进行表连接时,得到的连接后的数据表的数据容量会变小,即可以通过该种连接方式,将数据容量小的数据表变得更小,再与数据容量大的数据表进行连接,以提高系统进行表连接时的效率。
在上述实施例中,四种连接方式均是将数据容量小的数据表作为右表,将数据容量较大的表作为左表,依次完成待连接的多个数据表的连接。
下面以四个数据表的连接为例说明本申请实施例,以A,B,C,D表示四个数据表。对这四个数据表的建立统计信息,基于统计信息预估确定这四个数据表的数据量;将这四个数据表按照数据量从小到大的顺序进行排序,如数据表A至数据表D的数据容量依次增大,则将该四个数据表排序如下:A、B、C、和D。在将这四个表排序之后,将这四个表按照该排序顺序进行表连接,可选地,选取前两个表,即表A和表B,将表A作为右表,表B作为左表,表B与表A进行表连接,得到表BA,并将表A和表B的信息从排序序列中删除;再按照排序顺序选取表C,将表C作为左表,表BA作为右表,将表C与表BA进行连接,得到表CBA;最后将数据容量最大的表D作为左表,表CBA作为右表,将表D与表CBA进行连接,得到连接后的表DCBA,完成表A、B、C和D的连接。
本申请还提供了一种统计数据表的属性信息的方式,如表1所示。对当前进行统计的数据表的各列数据(特别是该数据表中包含的维度列)建立统计信息,该数据表的某列的统计信息包括该列的属性信息,如表1所示,统计信息包括统计信息头部、密度向量和直方图三部分。
表1
其中,统计信息头部包括如下信息:
Name:CTX_Session Time Key,表示表的索引名称;
Updated:Jul 2020153:15AM,表示该列的统计信息上次更新的日期和时间;
Rows:84856055,表示该列的所有行数;
Rows Sampled:389665,表示该列的统计信息计算的抽样行数;
Steps:198,表示由抽象行数的数据形成直方图的直方图步数,即直方图中的梯级数,每个梯级都跨越一个Key值范围,后跟上限Key值。
密度向量包括如下信息:
All Density:0.0007251631,表示当前统计的数据表的密度,即该数据表中数据的密度,该密度是通过抽样行数的数据统计的,可以根据该密度预估出不存在直方图里的数据记录,如可以预估出不存在直方图里的数据在数据表内所有行里出现的几率(表总行数*密度);
Average Length:4,表示该列的每个值的平均长度(以字节为单位);
Columns:Session Time Key,用于表示该列的名称。
表1中仅示例性的给出了上述的198行记录数据的部分统计信息,如表1所示,直方图的头信息包括如下信息:
RANGE_HI_KEY:表示直方图里记录的直方图梯级的上限Key值(Key值即键值);
RANGE_ROWS:表示位于直方图梯级内(不包括上限)的行的估算数目,即该行的Key值与上一行的Key值之间,一共有多少行记录;
EQ_ROWS:表示等于直方图梯级的上限的行的估算数目,即与该行Key值相等的一共有多少行记录;
DISTINCT_RANGE_ROWS:表示非重复Key值位于直方图梯级内(不包括上限)的行的估算数目,即该行的Key值与上一行的Key值之间,一共有多少的唯一值(即不重复的Key值);
AVG_RANGE_ROWS:表示在此区间(该行的Key值与上一行的Key值区间),一个唯一值平均存在多少行记录。
可选地,基于每个数据表的属性信息,确定每个数据表的数据容量包括:从数据表的属性信息中读取数据表的数据容量;或从数据表的属性信息中读取数据表的行数,使用数据表的行数表示数据容量。
在上述实施例中,通过对数据表的各列建立统计信息,得到类似表1的统计信息,从表中统计信息包含的属性信息中可以直接读取统计的数据表的总行数(如表中Rows的属性值),使用该总行数表示数据表的数据容量;或者从表中的属性信息中读取每个SessionTime Key的行数(如从表1中读取Session Time Key=56228的行数为29.3万),并将各个Session Time Key的行数进行求和,使用得到的行数的总和表示数据表的数据容量。
在一种可选的实施例中,通过对数据表的各列建立统计信息,得到数据表的属性信息,可以从属性信息中读取数据表占用系统空间的属性值,用该属性值表示数据表的数据容量。
通过上述实施例,对待连接的多个数据表中的各个数据表的各列建立统计信息,以确定各个数据表的数据容量,该方案基于统计数据信息的方式,可以达到快速获取数据表的数据容量的目的,为后续表连接过程提供方便。
在本申请的上述实施例中,采用统计数据的方式预估出待连接的多个数据表的数据容量,并按照数据容量的大小排列将多个数据表进行排序,得到排序序列,多个数据表则按照排序序列中的顺序,并按照内连接或外连接(包括左外连接、右外连接和全外连接)的连接方式,对多个数据表进行连接。通过上述实施例,基于数据表的数据容量确定连接多个数据表的连接顺序,按照该连接顺序依序连接多个数据表,也即,可以按照数据表的数据容量连接数据表,该方案进行表连接的过程,降低了现有技术中表随机连接对系统资源造成的浪费,且减小了表连接的执行时间,从而提高了系统进行表连接时的效率。
实施例2
根据本申请的另一方面,提供了一种数据表的连接装置的实施例。
图2是根据本申请实施例的一种数据表的连接装置的示意图,如图2所示,该连接装置可以包括:获取模块20、第一确定模块40、第二确定模块60和连接模块80。
获取模块20,用于获取待连接的多个数据表中每个数据表的统计信息,其中,统计信息中记录有对应的数据表的属性信息。
第一确定模块40,用于基于每个数据表的属性信息,确定每个数据表的数据容量。
第二确定模块60,用于按照每个数据表的数据容量确定多个数据表的连接顺序。
连接模块80,用于按照确定的连接顺序依次连接多个数据表。
采用本申请实施例,基于待连接的多个数据表的数据容量,确定多个数据表的连接顺序,并将多个数据表按照该连接顺序依次进行连接。通过上述实施例,基于数据表的数据容量确定连接多个数据表的连接顺序,按照该连接顺序依序连接多个数据表,也即,可以按照数据表的数据容量连接数据表,能够使得系统执行速度快,耗费时间短,从而提高表连接的效率,解决了现有技术中表连接时系统效率低的问题。
其中,上述实施例中,数据表中可以记录多个属性数据之间的关联关系,每个属性数据包含多个事实数据(即属性值),如页面访问表中可以记录页面访问次数、页面访问地址和页面访问时长之间的关联关系。
本申请实施例中的表连接大多为join连接,也即两个数据表进行连接的时候,存在过滤条件,即多表过滤后,数据量会更小。
在一种可选的实施例中,第二确定模块可以包括:序列获取子模块,用于获取多个数据表的序列,其中,序列中的数据表按照数据表的数据容量的大小排列;第一处理子模块,用于将序列中数据表的顺序作为多个数据表的连接顺序。
在上述实施例中,可以按照各个数据表的数据容量从大到小排列,也可以按照各个数据表的数据容量从小到大排列。
在按照数据容量从小到大排列的情况下,将多个数据表按照该排列顺序,依次连接。在该种连接方式中,可以将小表相连,再依次和中表连接,再和大表连接,由于表连接时,存在过滤条件,在两个表连接后数据量会更小,通过上述方案,可以将小表变为更小,再与最大的表连接,这样效率很高。
通过上述实施例,可以提高表连接的执行速度,减少表连接的时间,从而提高系统的表连接效率。
本申请上述实施例中的大表、中表和小表是通过数据容量确定的,该数据容量也可以称之为数据量,也即,大表的数据量大于中表的数据量,中表的数据量大于小表的数据量。
在本申请的上述实施例中,连接模块可以包括:执行子模块,用于将连接顺序中的第一个数据表设置为当前的第一表,调用第二处理子模块、第三处理子模块、第四处理子模块对当前的第一表执行下述操作,直至多个数据表中的最后一个数据表,操作包括:第二处理子模块,用于按照连接顺序,获取当前的第一表的下一个数据表,将下一个数据表作为第二表;第三处理子模块,用于将第一表和第二表连接,得到第三表;第四处理子模块,用于确定第三表和多个数据表中未进行连接的数据表中,用于执行下一次操作的当前的第一表。
具体地,将待连接的多个数据表按照数据容量从小到大的顺序排列,得到多个数据表的排序序列,从排序序列中的第一个表(即多个数据表中数据容量最小的数据表)开始,将排序在第一位的确定为当前的第一表、将排序在第二位的确定为第二表,将第一表与第二表连接,得到连接后的数据表(即上述实施例中的第三表),将排序在第一位和第二位的表的相关信息从排序序列中删除,并从该排序序列中读取排位在第一位的表,也即,此时将第三表作为第一表,将读取的排位在第一位的表作为第二表,将第一表和第二表执行上述步骤,直至完成对多个数据表的连接。
上述的相关信息可以为数据表的标识。
在一个可选的方案中,第四处理子模块可以包括:重新确定子模块,用于基于第三表与多个数据表中未进行连接的数据表的数据容量,重新确定连接顺序;第五处理子模块,用于将重新确定的连接顺序中第一个数据表作为用于执行下一次操作的当前的第一表。
具体的,在将第一表和第二表的相关信息从多个数据表中删除之后,可以将第三表和未进行连接的表重新排序,得到新的序列,将该新的序列中的排序第一位的数据表作为下一次操作的当前的第一表。
通过上述实施例,按照排序序列中各个数据表的顺序,依次对多个数据表进行连接,采用该方案,以提高系统进行表连接时的效率。
在本申请的上述实施例中,第一表的数据容量小于第二表的数据容量,其中,第三处理子模块包括下述至少之一:内连接处理子模块,用于按照内连接方式,将第一表和第二表的交集作为第三表;左外连接处理子模块,用于按照左外连接方式,将第二表作为左表,将第一表作为右表,使用左表的过滤条件过滤右表中记录的数据,得到第三表;右外连接处理子模块,用于按照右外连接方式,将第二表作为左表,将第一表作为右表,使用右表的过滤条件过滤左表中记录的数据,得到第三表;全外连接处理子模块,用于按照全外连接方式,将第一表和第二表的并集作为第三表。
进一步地,上述连接装置还可以包括:第三确定模块,用于在将第一表和第二表连接,得到第三表之后,确定第三表的数据容量,具体包括:第一数据容量确定子模块,用于若按照内连接方式连接第一表和第二表,则将第一表的数据容量作为第三表的数据容量;第二数据容量确定子模块,用于若按照左外连接方式连接第一表和第二表,则将第二表的数据容量作为第三表的数据容量;第三数据容量确定子模块,用于若按照右外连接方式连接第一表和第二表,则将第一表的数据容量作为第三表的数据容量;第四数据容量确定子模块,用于若按照全外连接方式连接第一表和第二表,则将第一表和第二表的数据容量之和作为第三表的数据容量。
具体地,在第一表的数据容量小于第二表的数据容量的情况下,将第一表和第二表进行连接,且得到连接后的数据表(即第三表)的数据容量的方案包括如下四种:
第一种,内连接方式(即Inner Join):该种连接方式是以第一表和第二表中的相同属性条件为基准,连接后的数据表中包括相同的属性条件对应的数据信息,即为第一表和第二表的交集;采用该种连接方式得到的第三表的数据容量默认预估变为两个连接的数据表中数据容量较小(即第一表)的表的预估行数,也可能出现第三表的行数小于第一表的情况。
第二种,左外连接方式(即Left Join):将第一表作为右表,将第二表作为左表,采用该种连接方式,以左表的过滤条件为基准,过滤右表中记录的数据,即通过左表的过滤条件实现第一表和第二表的连接,得到第三表;在该种连接方式下,两表连接后得到的第三表的数据容量为左表的行数。
第三种,右外连接方式(即Right Join):将第一表作为右表,将第二表作为左表,采用该种连接方式,以右表的过滤条件为基准,过滤左表中记录的数据,即通过右表的过滤条件实现第一表和第二表的连接,得到第三表;在该种连接方式下,两表连接后得到的第三表的数据容量为右表的行数。
第四种,全外连接方式(即Full Join):该种连接方式以第一表和第二表中的所有属性条件为基准,连接后的数据表中包括两个表中所有的属性条件对应的数据信息,即为第一表和第二表的并集;采用该种连接方式得到的第三表的数据容量默认预估变为两个连接的数据表的行数的总和。
通常表连接方式大多采用上述的第一种连接方式,在多维度过滤条件下,采用该种连接方式进行表连接时,得到的连接后的数据表的数据容量会变小,即可以通过该种连接方式,将数据容量小的数据表变得更小,再与数据容量大的数据表进行连接,以提高系统进行表连接时的效率。
在上述实施例中,四种连接方式均是将数据容量小的数据表作为右表,将数据容量较大的表作为左表,依次完成待连接的多个数据表的连接。
可选地,第一确定模块可以包括:第一读取子模块,用于从数据表的属性信息中读取数据表的数据容量;或第二读取子模块,用于从数据表的属性信息中读取数据表的行数,使用数据表的行数表示数据容量。
在上述实施例中,通过对数据表的各列建立统计信息,得到类似表1的统计信息,从表中统计信息包含的属性信息中可以直接读取统计的数据表的总行数(如表中Rows的属性值),使用该总行数表示数据表的数据容量;或者从表中的属性信息中读取每个SessionTime Key的行数(如从表1中读取Session Time Key=56228的行数为29.3万),并将各个Session Time Key的行数进行求和,使用得到的行数的总和表示数据表的数据容量。
在一种可选的实施例中,通过对数据表的各列建立统计信息,得到数据表的属性信息,可以从属性信息中读取数据表占用系统空间的属性值,用该属性值表示数据表的数据容量。
通过上述实施例,对待连接的多个数据表中的各个数据表的各列建立统计信息,以确定各个数据表的数据容量,该方案基于统计数据信息的方式,可以达到快速获取数据表的数据容量的目的,为后续表连接过程提供方便。
在本申请的上述实施例中,采用统计数据的方式预估出待连接的多个数据表的数据容量,并按照数据容量的大小排列将多个数据表进行排序,得到排序序列,多个数据表则按照排序序列中的顺序,并按照内连接或外连接(包括左外连接、右外连接和全外连接)的连接方式,对多个数据表进行连接。通过上述实施例,基于数据表的数据容量确定连接多个数据表的连接顺序,按照该连接顺序依序连接多个数据表,也即,可以按照数据表的数据容量连接数据表,该方案进行表连接的过程,降低了现有技术中表随机连接对系统资源造成的浪费,且减小了表连接的执行时间,从而提高了系统进行表连接时的效率。
上述数据表的连接装置包括处理器和存储器,上述获取模块、第一确定模块、第二确定模块、连接模块等均作为程序单元存储在存储器中,由处理器执行存储在存储器中的上述程序单元。上述统计信息、属性信息、数据表都可以存储在存储器中。
处理器中包含内核,由内核去存储器中调取相应的程序单元。内核可以设置一个或以上,通过调整内核参数解析文本内容。
存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM),存储器包括至少一个存储芯片。
本申请还提供了一种计算机程序产品的实施例,当在数据处理设备上执行时,适于执行初始化有如下方法步骤的程序代码:获取待连接的多个数据表中每个数据表的统计信息,其中,统计信息中记录有对应的数据表的属性信息;基于每个数据表的属性信息,确定每个数据表的数据容量;按照每个数据表的数据容量确定多个数据表的连接顺序;按照确定的连接顺序依次连接多个数据表。
在本申请的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,可以为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅是本申请的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。
Claims (8)
1.一种数据表的连接方法,其特征在于,包括:
获取待连接的多个数据表中每个数据表的统计信息,其中,所述统计信息中记录有对应的数据表的属性信息;
基于每个所述数据表的属性信息,确定每个所述数据表的数据容量;
按照每个所述数据表的数据容量确定所述多个数据表的连接顺序;
按照确定的连接顺序依次连接所述多个数据表;
其中,按照确定的连接顺序依次连接所述多个数据表包括:
将连接顺序中的第一个数据表设置为当前的第一表,对当前的第一表执行下述操作,直至所述多个数据表中的最后一个数据表,所述操作包括:
按照连接顺序,获取所述当前的第一表的下一个数据表,将所述下一个数据表作为第二表;
将所述第一表和所述第二表连接,得到第三表;
确定所述第三表和所述多个数据表中未进行连接的数据表中,用于执行下一次操作的当前的第一表。
2.根据权利要求1所述的连接方法,其特征在于,按照每个所述数据表的数据容量确定所述多个数据表的连接顺序包括:
获取多个数据表的序列,其中,所述序列中的数据表按照所述数据表的数据容量的大小排列;
将所述序列中所述数据表的顺序作为所述多个数据表的连接顺序。
3.根据权利要求1所述的连接方法,其特征在于,确定所述第三表和所述多个数据表中未进行连接的数据表中,用于执行下一次操作的当前的第一表包括:
基于所述第三表与所述多个数据表中未进行连接的数据表的数据容量,重新确定连接顺序;
将重新确定的连接顺序中第一个数据表作为所述用于执行下一次操作的当前的第一表。
4.根据权利要求1所述的连接方法,其特征在于,所述第一表的数据容量小于所述第二表的数据容量,其中,将所述第一表和第二表连接,得到第三表包括下述至少之一:
按照内连接方式,将所述第一表和所述第二表的交集作为所述第三表;
按照左外连接方式,将所述第二表作为左表,将所述第一表作为右表,使用所述左表的过滤条件过滤所述右表中记录的数据,得到所述第三表;
按照右外连接方式,将所述第二表作为左表,将所述第一表作为右表,使用所述右表的过滤条件过滤所述左表中记录的数据,得到所述第三表;
按照全外连接方式,将所述第一表和所述第二表的并集作为所述第三表。
5.根据权利要求4所述的连接方法,其特征在于,在将所述第一表和第二表连接,得到第三表之后,所述连接方法还包括:确定所述第三表的数据容量,具体包括:
若按照所述内连接方式连接所述第一表和所述第二表,则将所述第一表的数据容量作为所述第三表的数据容量;
若按照所述左外连接方式连接所述第一表和所述第二表,则将所述第二表的数据容量作为所述第三表的数据容量;
若按照所述右外连接方式连接所述第一表和所述第二表,则将所述第一表的数据容量作为所述第三表的数据容量;
若按照所述全外连接方式连接所述第一表和所述第二表,则将所述第一表和所述第二表的数据容量之和作为所述第三表的数据容量。
6.根据权利要求1所述的连接方法,其特征在于,基于每个所述数据表的属性信息,确定每个所述数据表的数据容量包括:
从所述数据表的属性信息中读取所述数据表的数据容量;或
从所述数据表的属性信息中读取所述数据表的行数,使用所述数据表的行数表示所述数据容量。
7.一种数据表的连接装置,其特征在于,包括:
获取模块,用于获取待连接的多个数据表中每个数据表的统计信息,其中,所述统计信息中记录有对应的数据表的属性信息;
第一确定模块,用于基于每个所述数据表的属性信息,确定每个所述数据表的数据容量;
第二确定模块,用于按照每个所述数据表的数据容量确定所述多个数据表的连接顺序;
连接模块,用于按照确定的连接顺序依次连接所述多个数据表;
其中,所述连接模块包括:
执行子模块,用于将连接顺序中的第一个数据表设置为当前的第一表,调用第二处理子模块、第三处理子模块、第四处理子模块对当前的第一表执行下述操作,直至所述多个数据表中的最后一个数据表,所述操作包括:
第二处理子模块,用于按照连接顺序,获取所述当前的第一表的下一个数据表,将所述下一个数据表作为第二表;
第三处理子模块,用于将所述第一表和所述第二表连接,得到第三表;
第四处理子模块,用于确定所述第三表和所述多个数据表中未进行连接的数据表中,用于执行下一次操作的当前的第一表。
8.根据权利要求7所述的连接装置,其特征在于,所述第二确定模块包括:
序列获取子模块,用于获取多个数据表的序列,其中,所述序列中的数据表按照所述数据表的数据容量的大小排列;
第一处理子模块,用于将所述序列中所述数据表的顺序作为所述多个数据表的连接顺序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201511032710.3A CN106933927B (zh) | 2015-12-31 | 2015-12-31 | 数据表的连接方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201511032710.3A CN106933927B (zh) | 2015-12-31 | 2015-12-31 | 数据表的连接方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106933927A CN106933927A (zh) | 2017-07-07 |
CN106933927B true CN106933927B (zh) | 2019-12-10 |
Family
ID=59444214
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201511032710.3A Active CN106933927B (zh) | 2015-12-31 | 2015-12-31 | 数据表的连接方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106933927B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108090224B (zh) * | 2018-01-05 | 2020-05-08 | 星环信息科技(上海)有限公司 | 一种级联连接方法及设备 |
CN109697066B (zh) * | 2018-12-28 | 2021-02-05 | 第四范式(北京)技术有限公司 | 实现数据表拼接及自动训练机器学习模型的方法和系统 |
CN109739855B (zh) * | 2018-12-28 | 2022-03-01 | 第四范式(北京)技术有限公司 | 实现数据表拼接及自动训练机器学习模型的方法和系统 |
US10885035B2 (en) | 2019-04-26 | 2021-01-05 | Advanced New Technologies Co., Ltd. | Method and system for outer join of database tables |
CN110175202B (zh) * | 2019-04-26 | 2021-09-10 | 蚂蚁金服(杭州)网络技术有限公司 | 用于数据库的表的外连接的方法和系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101840430A (zh) * | 2010-04-28 | 2010-09-22 | 北京握奇数据系统有限公司 | 智能卡数据库多表操作方法及装置 |
CN102262675A (zh) * | 2011-08-12 | 2011-11-30 | 北京握奇数据系统有限公司 | 数据库查询方法及智能卡 |
CN103186566A (zh) * | 2011-12-28 | 2013-07-03 | 中国移动通信集团河北有限公司 | 一种数据分级存储方法、装置及系统 |
CN104112008A (zh) * | 2014-07-16 | 2014-10-22 | 深圳市国泰安信息技术有限公司 | 一种多表数据关联查询优化方法和装置 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP2177874B1 (en) * | 2008-10-14 | 2012-12-26 | EchoStar Global B.V. | Universal remote control device |
US9715560B2 (en) * | 2012-04-24 | 2017-07-25 | International Business Machines Corporation | Optimizing sparse schema-less data in data stores |
-
2015
- 2015-12-31 CN CN201511032710.3A patent/CN106933927B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101840430A (zh) * | 2010-04-28 | 2010-09-22 | 北京握奇数据系统有限公司 | 智能卡数据库多表操作方法及装置 |
CN102262675A (zh) * | 2011-08-12 | 2011-11-30 | 北京握奇数据系统有限公司 | 数据库查询方法及智能卡 |
CN103186566A (zh) * | 2011-12-28 | 2013-07-03 | 中国移动通信集团河北有限公司 | 一种数据分级存储方法、装置及系统 |
CN104112008A (zh) * | 2014-07-16 | 2014-10-22 | 深圳市国泰安信息技术有限公司 | 一种多表数据关联查询优化方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN106933927A (zh) | 2017-07-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106933927B (zh) | 数据表的连接方法和装置 | |
US10331642B2 (en) | Data storage method and apparatus | |
CN108133031A (zh) | 一种过滤推荐视频候选结果的方法及装置 | |
CN109086456B (zh) | 数据索引方法及装置 | |
CN106933934B (zh) | 数据表的连接方法和装置 | |
CN113609347A (zh) | 数据存储及查询方法、装置及数据库系统 | |
CN106933919B (zh) | 数据表的连接方法及装置 | |
CN106933916B (zh) | Json字符串的处理方法及装置 | |
CN104765792B (zh) | 一种维度数据存储的方法、装置及系统 | |
CN110457348B (zh) | 一种数据处理方法及装置 | |
CN108073709B (zh) | 一种数据记录的操作方法、装置、设备和存储介质 | |
CN106469086B (zh) | 事件处理方法和装置 | |
CN106933933B (zh) | 数据表信息的处理方法及装置 | |
CN107203550B (zh) | 一种数据处理方法和数据库服务器 | |
CN110019054A (zh) | 日志去重方法和系统、内容分发网络系统 | |
CN114416731A (zh) | 数据存储方法、数据读取方法、装置、电子设备及介质 | |
CN110955710B (zh) | 一种数据交换作业中脏数据的处理方法及装置 | |
CN113760907A (zh) | 一种数据库中数据唯一性标识方法 | |
CN108241679B (zh) | 数据处理方法及装置 | |
CN112800146B (zh) | 风控数据的回溯方法及装置、存储介质和处理器 | |
JP6397105B2 (ja) | データを記憶する方法及び装置 | |
CN109033189A (zh) | 链路结构日志的压缩方法、装置、服务器及可读存储介质 | |
CN111813679B (zh) | 基于python执行测试用例的方法、装置、电子设备及存储介质 | |
CN113535702B (zh) | 一种数据处理方法、装置、设备和存储介质 | |
CN109189346B (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 | ||
CB02 | Change of applicant information | ||
CB02 | Change of applicant information |
Address after: 100083 No. 401, 4th Floor, Haitai Building, 229 North Fourth Ring Road, Haidian District, Beijing Applicant after: Beijing Guoshuang Technology Co.,Ltd. Address before: 100086 Cuigong Hotel, 76 Zhichun Road, Shuangyushu District, Haidian District, Beijing Applicant before: Beijing Guoshuang Technology Co.,Ltd. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |