CN114443659A - 联接表的方法和装置 - Google Patents
联接表的方法和装置 Download PDFInfo
- Publication number
- CN114443659A CN114443659A CN202210091434.1A CN202210091434A CN114443659A CN 114443659 A CN114443659 A CN 114443659A CN 202210091434 A CN202210091434 A CN 202210091434A CN 114443659 A CN114443659 A CN 114443659A
- Authority
- CN
- China
- Prior art keywords
- filtering
- filter
- data
- fragment
- bloom filter
- 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/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- 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/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本公开的实施例公开了联接表的方法和装置。该方法的具体实施方式包括:获取待联接的第一表和第二表,其中,所述第一表的数据量小于所述第二表的数据量;若所述第一表不可以广播,则计算所述第一表的行数与所述第二表的行数的比值;若所述比值小于等于预定阈值,则根据所述第一表的关联键构建实时布隆过滤器,并将所述实时布隆过滤器作为过滤算子插入到所述第二表的过滤条件中;从所述第二表中过滤掉不符合所述过滤条件的数据,得到过滤表;将所述第一表和所述过滤表分别进行洗牌、排序后联接起来。该实施方式提高了联接表的任务的时效,节省了计算资源,同时减少了集群负载。
Description
技术领域
本公开的实施例涉及计算机技术领域,具体涉及联接表的方法和装置。
背景技术
Spark作为大规模数据处理通用的计算引擎,其具有高吞吐、低延时、通用易扩展、高容错等特点,目前已形成一个高速发展应用广泛的生态系统,其主要模块包括:SparkCore、Spark SQL、Spark Streaming、MLlib、GraphX,其中Spark SQL在大数据应用最为广泛,并不断应用于大规模数据处理。
在生产场景中,有很多Spark SQL业务场景需要一张小表(相对小)联接一张大表。这里的小表是指不会触发BroadcastHashJoin(广播哈希联接),默认走SortMergeJoin(排序合并联接)。排序合并联接的实现逻辑:首先,两张表会分别根据联接条件确定每条记录的关联键,基于该关联键做洗牌写将可能联接到一起的记录分到同一个分区中;其次,在洗牌读阶段将两个表中相同分区的数据进行拉取并进行排序、合并;最终,将满足联接条件的数据进行联接输出,其中满足联接条件与具体SQL联接策略相关。对于上面提及的场景,满足联接条件是以左侧小表为基准的,即在两表联接时只会将大表侧满足与小表侧数据相等条件的数据保留,对于大表侧不符合联接条件的数据,会被认为是无效数据,由于无效数据参与洗牌、排序、合并计算,一方面影响任务时效,另一方面无效的洗牌数据会增加集群磁盘IO、网络IO等负载,同时浪费大量的计算资源。
发明内容
本公开的实施例提出了联接表的方法和装置。
第一方面,本公开的实施例提供了一种联接表的方法,包括:获取待联接的第一表和第二表,其中,所述第一表的数据量小于所述第二表的数据量;若所述第一表不可以广播,则计算所述第一表的行数与所述第二表的行数的比值;若所述比值小于等于预定阈值,则根据所述第一表的关联键构建实时布隆过滤器,并将所述实时布隆过滤器作为过滤算子插入到所述第二表的过滤条件中;从所述第二表中过滤掉不符合所述过滤条件的数据,得到过滤表;将所述第一表和所述过滤表分别进行洗牌、排序后联接起来。
在一些实施例中,该方法还包括:若检测到未进行过滤优化,则在每个分片上根据所述第一表的关联键构建洗牌布隆过滤器,并将所述洗牌布隆过滤器作为过滤算子插入读取到的所述第二表的洗牌数据的后面,对第二表的洗牌数据进行过滤,得到每个分片的分片过滤表;对于每个分片,分别将该分片上所述第一表的洗牌数据和分片过滤表排序后联接起来。
在一些实施例中,该方法还包括:自定义实时布隆过滤器和洗牌布隆过滤器的过滤算子以支持代码生成器。
在一些实施例中,根据所述第一表的关联键构建实时布隆过滤器,包括:若存在至少两个关联键,则对所述至少两个关联键进行哈希处理,得到一个散列值,根据所述散列值构建实时布隆过滤器。
在一些实施例中,该方法还包括:若在预定时间内未构建实时布隆过滤器,则对所述第一表和所述第二表进行内或左联接。
在一些实施例中,该方法还包括:若获取到待联接的第三表且关联键相同,则将所述实时布隆过滤器作为过滤算子插入到所述第三表的过滤条件中;从所述第三表中过滤掉不符合所述过滤条件的数据,得到下推过滤表;将所述下推过滤表进行洗牌、排序后与所述第一表和所述过滤表的联接结果联接起来。
在一些实施例中,该方法还包括:若检测到未生成下推过滤表,则将每个分片上的洗牌布隆过滤器作为过滤算子插入读取到的所述第三表的洗牌数据的后面,对第三表的洗牌数据进行过滤,得到每个分片的下推分片过滤表;对于每个分片,分别将该分片上所述第一表和所述过滤表的联接结果和下推分片过滤表排序后联接起来。
第二方面,本公开的实施例提供了一种联接表的装置,包括:获取单元,被配置成获取待联接的第一表和第二表,其中,所述第一表的数据量小于所述第二表的数据量;计算单元,被配置成若所述第一表不可以广播,则计算所述第一表的行数与所述第二表的行数的比值;构建单元,被配置成若所述比值小于等于预定阈值,则根据所述第一表的关联键构建实时布隆过滤器,并将所述实时布隆过滤器作为过滤算子插入到所述第二表的过滤条件中;过滤单元,被配置成从所述第二表中过滤掉不符合所述过滤条件的数据,得到过滤表;联接单元,被配置成将所述第一表和所述过滤表分别进行洗牌、排序后联接起来。
在一些实施例中,构建单元进一步被配置成:若检测到未进行过滤优化,则在每个分片上根据所述第一表的关联键构建洗牌布隆过滤器,将所述洗牌布隆过滤器作为过滤算子插入读取到的所述第二表的洗牌数据的后面;过滤单元进一步被配置成:对第二表的洗牌数据进行过滤,得到每个分片的分片过滤表;对于每个分片,分别将该分片上所述第一表的洗牌数据和分片过滤表排序后联接起来。
在一些实施例中,该装置还包括自定义单元,被配置成:自定义实时布隆过滤器和洗牌布隆过滤器的过滤算子以支持代码生成器。
在一些实施例中,构建单元进一步被配置成:若存在至少两个关联键,则对所述至少两个关联键进行哈希处理,得到一个散列值,根据所述散列值构建实时布隆过滤器。
在一些实施例中,联接单元进一步被配置成:若在预定时间内未构建实时布隆过滤器,则对所述第一表和所述第二表进行内或左联接。
在一些实施例中,构建单元进一步被配置成:若获取到待联接的第三表且关联键相同,则将所述实时布隆过滤器作为过滤算子插入到所述第三表的过滤条件中;过滤单元进一步被配置成:从所述第三表中过滤掉不符合所述过滤条件的数据,得到下推过滤表;联接单元进一步被配置成:将所述下推过滤表进行洗牌、排序后与所述第一表和所述过滤表的联接结果联接起来。
在一些实施例中,构建单元进一步被配置成:若检测到未生成下推过滤表,则将每个分片上的洗牌布隆过滤器作为过滤算子插入读取到的所述第三表的洗牌数据的后面;过滤单元进一步被配置成:对第三表的洗牌数据进行过滤,得到每个分片的下推分片过滤表;联接单元进一步被配置成:对于每个分片,分别将该分片上所述第一表和所述过滤表的联接结果和下推分片过滤表排序后联接起来。
第三方面,本公开的实施例提供了一种联接表的电子设备,包括:一个或多个处理器;存储装置,其上存储有一个或多个计算机程序,当所述一个或多个计算机程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如第一方面中任一项所述的方法。
第四方面,本公开的实施例提供了一种计算机可读介质,其上存储有计算机程序,其中,所述计算机程序被处理器执行时实现如第一方面中任一项所述的方法。
本公开的实施例提供的联接表的方法和装置,在两个表进行联接时,动态基于小表(相对小)构建布隆过滤器来对大表侧进行过滤,过滤掉大表一侧不会被命中(不满足联接条件)的输入数据,从而提出Spark SQL任务时效、节省计算资源,同时减少集群负载。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本公开的其它特征、目的和优点将会变得更明显:
图1是本公开的一个实施例可以应用于其中的示例性系统架构图;
图2是根据本公开的联接表的方法的一个实施例的流程图;
图3是根据本公开的联接表的方法的又一个实施例的流程图;
图4是根据本公开的联接表的方法的一个应用场景的示意图;
图5a-5f是根据本公开的联接表的方法的优化效果图;
图6是根据本公开的联接表的装置的一个实施例的结构示意图;
图7是适于用来实现本公开的实施例的电子设备的计算机系统的结构示意图。
具体实施方式
下面结合附图和实施例对本公开作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释相关发明,而非对该发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与有关发明相关的部分。
需要说明的是,在不冲突的情况下,本公开中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本公开。
图1示出了可以应用本公开的联接表的方法或联接表的装置的实施例的示例性系统架构。
先对Spark SQL的整体架构做一下概述,如图1所示,无论使用DataFrame(数据帧)、SQL语句还是使用DataSet(数据集),都会经过如下步骤转换成DAG(Directed AcyclicGraph有向无环图)对RDD(Resilient Distributed Dataset,弹性分布式数据集)的操作:
1.先解析SQL,生成Unresolved Logical Query Plan(未解决的逻辑查询计划)
2.由Analyzer(分析器)结合Catalog(目录)信息生成Resolved Logical Plan(已解决的逻辑查询计划)
3.Optimizer(优化器)根据预先定义好的规则对Resolved Logical Plan进行优化并生成Optimized Logical Plan(优化的逻辑计划)
4.Query Planner(查询计划器)将Optimized Logical Plan转换成多个PhysicalPlan(物理计划)
5.根据Cost Model(代价模型)算出每个Physical Plan的代价并选取代价最小的Physical Plan作为最终的Physical Plan
6.Spark以DAG的方法执行上述Physical Plan
7.在Spark 3.0版本以后,引入AQE(Adaptive Query Execution,自适应查询执行),其在执行DAG的过程中,会根据运行时信息动态调整执行计划从而提高执行效率。
本申请的联接表的方法的技术实现包括:基于逻辑执行计划(Logical Plan)数据裁剪(如图2所示的流程200)和基于物理执行计划(Physical Plan)数据裁剪(如图3所示的流程300),其中前者是在逻辑执行计划优化过程中(上述步骤3),动态基于小表数据构建BloomFilter(布隆过滤器),并将该BloomFilter算子插入到大表侧对其进行过滤;后者是对前者场景的补充,如果未能在逻辑执行计划优化中动态插入BloomFilter算子对大表进行过滤,在物理执行计划优化中(上述步骤7),通过AQE基于小表构建BloomFilter并对大表进行过滤,二者的主要区别是前者是在大表shuffle(洗牌)前进行过滤,后者是在大表洗牌后进行过滤。
继续参考图2,示出了根据本公开的联接表的方法的一个实施例的流程200。该联接表的方法,包括以下步骤:
步骤201,获取待联接的第一表和第二表。
在本实施例中,联接表的方法的执行主体(例如图1所示的服务器)可以通过有线连接方式或者无线连接方式接收待联接的第一表和第二表。其中,第一表的数据量小于第二表的数据量,即第一表是小表,第二表是大表。两个表可通过联接键联接起来,例如,第一表是一年级学生的数学成绩,第二表是一至六年级学生的期末的语文成绩,则可通过学号将第一表中同一学号的数学成绩和第二表中的语文成绩联接起来。这里的学号就是联接键。
步骤202,若第一表不可以广播,则计算第一表的行数与第二表的行数的比值。
在本实施例中,如果第一表的数据量小于预定的广播阈值,则可以进行广播哈希联接,因广播哈希联接不会引入洗牌、排序,往往性能表现良好,因此对于满足广播哈希联接的场景,保持Spark原生计算逻辑;否则,会默认进行排序合并联接。对于排序合并联接,会根据表数据文件大小和数据存储结构(schema)信息对两个表的行数进行评估,并基于两表的行数信息进行代价评估(例如:第一表的行数/第二表的行数小于一定阈值(例如0.01)等)。根据该比值判断进行哪种联接方式,若比值大于预定阈值,则走原生计算逻辑,不适合采用本申请的方法进行优化,性能得不到明显提升。
步骤203,若比值小于等于预定阈值,则根据第一表的关联键构建实时布隆过滤器,并将实时布隆过滤器作为过滤算子插入到第二表的过滤条件中。
在本实施例中,若比值小于等于预定阈值,则采用本申请的过滤大表的方法能让性能得到显著提升。本申请通过第一表的关联键构建布隆过滤器(BloomFilter),BloomFilter是一种多哈希函数映射的快速查找算法。本申请中的BloomFilter分为两种:1、在大表洗牌之前,构建实时布隆过滤器(RuntimeBloomFilter),2、在大表洗牌之后,构建实时洗牌过滤器(ShuffleBloomFilter)。
步骤204,从第二表中过滤掉不符合过滤条件的数据,得到过滤表。
在本实施例中,RuntimeBloomFilter会在第二表(大表)洗牌前进行过滤,提前过滤掉大表侧联接时不会被命中的数据,从而减少大表的洗牌量。
步骤205,将第一表和过滤表分别进行洗牌、排序后联接起来。
在本实施例中,将两张表按照join keys(联接键)进行了重新洗牌(也是图4中的exchage操作),保证联接键值相同的记录会被分在相应的分片。分片后对每个分片内的数据进行排序,排序后再对相应的分片内的记录进行联接。
本公开的上述实施例提供的方法在两个表进行联接时,动态基于小表(相对小)构建BloomFilter来对大表侧进行过滤,过滤掉大表一侧不会被命中(不满足联接条件)的输入数据,从而提高Spark SQL任务时效、节省计算资源,同时减少集群负载。
进一步参考图3,其示出了联接表的方法的又一个实施例的流程300。该联接表的方法的流程300,包括以下步骤:
步骤301,获取待联接的第一表和第二表,其中,第一表的数据量小于第二表的数据量。
步骤302,若第一表不可以广播,则计算第一表的行数与第二表的行数的比值。
步骤303,若比值小于等于预定阈值,则根据第一表的关联键构建实时布隆过滤器,并将实时布隆过滤器作为过滤算子插入到第二表的过滤条件中。
步骤301-303与步骤201-203基本相同,因此不再赘述。
步骤304,若检测到未进行过滤优化,则在每个分片上根据第一表的关联键构建洗牌布隆过滤器,并将洗牌布隆过滤器作为过滤算子插入读取到的第二表的洗牌数据的后面。
在本实施例中,步骤204在执行后会在分布式数据系统中标记出已进行过滤优化,就不需要执行步骤304-307了。但如果分布式数据系统中没有标记出已进行过滤优化,则需要在数据洗牌后在每个分片中进行过滤优化。基于AQE在执行计划中,基于小表联接键动态构建BloomFilter,这里定义其为ShuffleBloomFilter,并作为Filter算子动态插入读取大表洗牌数据后面,对洗牌数据过滤,从而减少大表联接前排序的数据量、减少溢出数据量。这里与以上优化的不同点在于,其作为AQE的一条规则且依赖于AQE功能的开启,该项优化主要是用于优化中间阶段。
步骤305,对第二表的洗牌数据进行过滤,得到每个分片的分片过滤表。
在本实施例中,每个分片都会执行对第二表的洗牌数据进行过滤,每个分片得到一个分片过滤表。
步骤306,对于每个分片,分别将该分片上第一表的洗牌数据和分片过滤表排序后联接起来。
在本实施例中,在每个分片上执行相同的排序、联接操作,具体过程为现有技术,因此不再赘述。
继续参见图4,图4是根据本实施例的联接表的方法的应用场景的一个示意图。在图4的应用场景中,以Table-A Inner Join Table-B为例,其中Table-A是一张小表。基于Bloom Filter算法的Runtime Filter Join优化机制的执行流程如下:
1、在逻辑执行计划过程中,实现了相应的规则,首先判断小表Table-A是否可以广播,如果可以广播会走广播哈希联接过程,因广播哈希联接不会引入洗牌、排序,往往性能表现良好,因此对于满足广播哈希联接的场景,保持Spark原生计算逻辑;否则,会默认走排序合并联接过程;
2、对于排序合并联接,上述规则会根据表数据文件大小和数据结构信息对两个表的行数进行评估,并基于两表的行数信息进行代价评估(例如:Table-A行数/Table-B行数小于一定阈值等),当小表行数与大表行数满足一定条件,上述规则会基于Table-A的联接键动态构建BloomFilter,我们定义为RuntimeBloomFilter,并作为Filter算子动态插入到Table-B的过滤条件中,因RuntimeBloomFilter会在大表洗牌前进行过滤,提前过滤掉大表侧联接时不会被命中的数据,从而减少大表的洗牌量;
3、在物理执行计划过程中,同样实现了相应的规则,该规则会根据联接策略的不同,检查排序合并联接的左或右节点中,是否在逻辑执行计划中已基于小表联接键构建了BloomFilter对大表侧进行过滤,如果存在,该步骤会自动跳过;否则,会基于AQE在执行计划中,基于小表联接键动态构建BloomFilter,这里定义其为ShuffleBloomFilter,并作为Filter算子动态插入读取大表洗牌数据后面,对洗牌数据过滤,从而减少大表联接前排序的数据量、减少溢出数据量。这里与以上优化的不同点在于,其作为AQE的一条规则且依赖于AQE功能的开启,该项优化主要是用于优化中间阶段。
在本实施例的一些可选的实现方式中,该方法还包括:自定义实时布隆过滤器和洗牌布隆过滤器的过滤算子以支持代码生成器。为了实现上述架构设计,自定义了BloomFilter算子,为了提升该算子处理性能,自定义的BloomFilter算子支持codegen(代码生成器)。
在本实施例的一些可选的实现方式中,根据所述第一表的关联键构建实时布隆过滤器,包括:若存在至少两个关联键,则对所述至少两个关联键进行哈希处理,得到一个散列值,根据所述散列值构建实时布隆过滤器。两张表联接时,可能存在多个关联键,例如:Table-A a Inner Join Table-B b on a.col1=b.col1 and a.col2=b.col2,如果基于小表每个关联键都构建一个BloomFilter并分别作为Filter算子对大表侧进行过滤,会导致多次读取小表,增加IO,另外由于BloomFilter是以广播向量的方式存在,如果产生过多的BloomFilter会带来驱动和执行的内存压力,为此可采用XxHash64对关联键进行处理,以获取一个新的散列值,基于新的散列值构建BloomFilter并对大表侧过滤,这样能够有效提升性能及减少内存溢出发生。
选取XxHash64处理多关联键的原因:首先,XxHash64支持codegen,能够与上述实现的BloomFilter算子有机结合,另外基于HashBenchmark验证可知,XxHash64在处理基本数据类型相对Murmur3Hash、HiveHash均有不错的表现,且Spark SQL的关联键一般是string类型,图5a所示为验证效果。
在本实施例的一些可选的实现方式中,该方法还包括:若在预定时间内未构建实时布隆过滤器或洗牌布隆过滤器,则对所述第一表和所述第二表进行内或左联接。结合上面的Runtime Filter Join的执行流程可知,两表联接时如果触发了RuntimeBloomFilter或ShuffleBloomFilter特性,均会先基于小表构建相应的BloomFilter,然后再作为Filter算子对大表进行过滤,这就要求对大表的处理需要等待基于小表构建BloomFilter完后才执行,极端情况下可能会导致任务延迟问题。
为了解决上述问题,设计了构建BloomFilter的超时回退机制,即在规定时间内未能完成基于“小表”构建BloomFilter,Spark执行计划会自动回退到原始处理逻辑,这样能够有效规避因大表被误判成小表,导致构建BloomFilter耗时过长所引起的性能回归问题等。可在读小表时开始计时,如果预定时间内(例如10分钟)如果没有建好实时布隆过滤器或洗牌布隆过滤器则认为超时,回退到常规的联接流程,不能进行大表过滤优化。
在本实施例的一些可选的实现方式中,该方法还包括:若获取到待联接的第三表且关联键相同,则将所述实时布隆过滤器作为过滤算子插入到所述第三表的过滤条件中;从所述第三表中过滤掉不符合所述过滤条件的数据,得到下推过滤表;将所述下推过滤表进行洗牌、排序后与所述第一表和所述过滤表的联接结果联接起来。
Spark SQL在多个表联接场景的一个典型优化就是谓词下推,即可以通过内部规则优化将某一组联接的谓词下推到其他表,从而过滤掉其他表的无效数据,提升性能。通过分析线上业务场景,发现大部分任务存在多个表联接场景,例如:A as a join B as b ona.col1=b.col1 join C as c on a.col1=c.col1。
然而,本文引入的BloomFilter算子是一种基于子查询的封装,基于Spark SQL现有的内置规则不能将其进行谓词下推,为此我们内部实现了相应的规则支持BloomFilter算子的谓词下推,在满足多个表联接且关联键相同的情况下,该规则能够基于某一组表构建的BloomFilter下推到其他表,最终实现基于一个BloomFilter过滤多组表联接的能力,下面结合一个案例进行展示,其中tb1和tb2是两个大表,tb3是小表,其中tb1数据量10000条,tb2数据量是9000条,tb3数据量是10条。
为了验证效果,我们这里关闭BroadcastHashJoin(spark.sql.autoBroadcastJoinThreshold=-1),执行上面语句,Spark会优先处理tb1 Inner JOIN tb3 ON tb1.a=tb3.a AND tb3.b<4,基于Bloom Filter算法的Runtime Filter Join优化机制会自动识别出tb3是一张小表,并基于tb3构建RuntimeBloomFilter对大表tb1进行过滤,然后进行SortMergeJoin,其DAG如图5b所示,由图5b可知tb1的数据量得到有效过滤,只保留满足联接条件的4条数据,这在生产环境中的收益是显著的,具体上线收益在后面会阐述。图5b中未对tb2进行过滤,因此Filter9000条数据,Exchange9000条数据,Sort9000条数据。
如果不引入BloomFilter谓词下推优化,优化到此已经结束,上述计算结果最终再与tb2进行SortMergeJoin,这时可发现tb2的数据会全部参与计算,其中9000条数据均会进行洗牌并最终与第一组表联接的结果进行联接匹配,但满足联接条件的数据也仅4条,即tb2存在大量无效数据参与洗牌、排序,对于上述场景我们自定义的规则能够有效将基于tb3构建RuntimeBloomFilter下推到第二组表里,即对tb2进行谓词下推,其具体的优化效果如图5c所示,由图可以看到tb2的数据量也得到有效过滤,只需要保留最终满足联接条件的4条数据(Filter4条数据,Exchange4条数据,Sort4条数据),而图5b中tb2中Filter9000条数据,Exchange9000条数据,Sort9000条数据。最终实现了基于一组表的BloomFilter谓词下推到其他表,从而减少洗牌量,减少集群负载,提升任务时效,同时节省大量的计算资源。
在本实施例的一些可选的实现方式中,该方法还包括:若检测到未生成下推过滤表,则将每个分片上的洗牌布隆过滤器作为过滤算子插入读取到的所述第三表的洗牌数据的后面,对第三表的洗牌数据进行过滤,得到每个分片的下推分片过滤表;对于每个分片,分别将该分片上所述第一表和所述过滤表的联接结果和下推分片过滤表排序后联接起来。同理,对于物理执行计划也可通过上文所述的谓词下推优化,这里采用的是ShuffleBloomFilter。可在逻辑执行计划阶段中没进行裁剪优化的情况下,在物理执行计划阶段通过上文所述的谓词下推优化。
基于TPC-DS 10TB基准测试验证,如图5d所示,图中对比分析了优化前后的shuffle量,已标记出的为优化前的数据,未标记的为优化后的数据。99个查询中有9个被Runtime Filter Join特性命中,其中shuffle量减少1.5%~73.7%。
下面线上的某核心任务优化案例:其为某重要业务线的某商品SKU属性表(小表)与某商品SKU扩展属性模型表(大表)进行Left Outer Join,因业务需要两张表在联接前会根据相关字段进行分组,最终再通过商品SKU编号进行关联,涉及业务较为复杂,这里不展开描述,该业务场景是非常符合本文的Runtime Filter Join优化,图5e、5f是优化前后的对比效果。
由上面优化前后的对比效果图5e、5f可知,1)优化前,该线上任务的shuffle量大概是:16TB+,任务运行时间:4.4h;2)基于Runtime Filter Join优化后,shuffle量较少至:200MB+,任务运行时间缩短至:4min,计算性能提升:95%+,同时节省了大量的计算资源。基于Bloom Filter算法的Runtime Filter Join优化机制在线上优化案例不胜枚举,限于篇幅原因这里不一一展开。
目前,基于Bloom Filter算法的Runtime Filter Join优化机制已全面上线(默认关闭),基于自研Spark版本相对Spark社区版本,命中任务平均处理数据量(shuffle量)减少72%、性能提升53%。
进一步参考图6,作为对上述各图所示方法的实现,本公开提供了一种联接表的装置的一个实施例,该装置实施例与图2所示的方法实施例相对应,该装置具体可以应用于各种电子设备中。
如图6所示,本实施例的联接表的装置600包括:获取单元601、计算单元602、构建单元603、过滤单元604、联接单元605。其中,获取单元601,被配置成获取待联接的第一表和第二表,其中,所述第一表的数据量小于所述第二表的数据量;计算单元602,被配置成若所述第一表不可以广播,则计算所述第一表的行数与所述第二表的行数的比值;构建单元603,被配置成若所述比值小于等于预定阈值,则根据所述第一表的关联键构建实时布隆过滤器,并将所述实时布隆过滤器作为过滤算子插入到所述第二表的过滤条件中;过滤单元604,被配置成从所述第二表中过滤掉不符合所述过滤条件的数据,得到过滤表;联接单元605,被配置成将所述第一表和所述过滤表分别进行洗牌、排序后联接起来。
在本实施例中,联接表的装置600的获取单元601、计算单元602、构建单元603、过滤单元604、联接单元605的具体处理可以参考图2对应实施例中的步骤201、步骤202、步骤203、步骤204和步骤205。
在本实施例的一些可选的实现方式中,构建单元603进一步被配置成:若检测到未进行过滤优化,则在每个分片上根据所述第一表的关联键构建洗牌布隆过滤器,将所述洗牌布隆过滤器作为过滤算子插入读取到的所述第二表的洗牌数据的后面;过滤单元604进一步被配置成:对第二表的洗牌数据进行过滤,得到每个分片的分片过滤表;对于每个分片,分别将该分片上所述第一表的洗牌数据和分片过滤表排序后联接起来。
在本实施例的一些可选的实现方式中,装置600还包括自定义单元(附图中未示出),被配置成:自定义实时布隆过滤器和洗牌布隆过滤器的过滤算子以支持代码生成器。
在本实施例的一些可选的实现方式中,构建单元603进一步被配置成:若存在至少两个关联键,则对所述至少两个关联键进行哈希处理,得到一个散列值,根据所述散列值构建实时布隆过滤器。
在本实施例的一些可选的实现方式中,联接单元605进一步被配置成:若在预定时间内未构建实时布隆过滤器,则对所述第一表和所述第二表进行内或左联接。
在本实施例的一些可选的实现方式中,构建单元603进一步被配置成:若获取到待联接的第三表且关联键相同,则将所述实时布隆过滤器作为过滤算子插入到所述第三表的过滤条件中;过滤单元604进一步被配置成:从所述第三表中过滤掉不符合所述过滤条件的数据,得到下推过滤表;联接单元进一步被配置成:将所述下推过滤表进行洗牌、排序后与所述第一表和所述过滤表的联接结果联接起来。
在本实施例的一些可选的实现方式中,构建单元603进一步被配置成:若检测到未生成下推过滤表,则将每个分片上的洗牌布隆过滤器作为过滤算子插入读取到的所述第三表的洗牌数据的后面;过滤单元604进一步被配置成:对第三表的洗牌数据进行过滤,得到每个分片的下推分片过滤表;联接单元605进一步被配置成:对于每个分片,分别将该分片上所述第一表和所述过滤表的联接结果和下推分片过滤表排序后联接起来。
根据本公开的实施例,本公开还提供了一种电子设备、一种可读存储介质。
一种联接表的电子设备,包括:一个或多个处理器;存储装置,其上存储有一个或多个计算机程序,当所述一个或多个计算机程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如流程200或300所述的方法。
一种计算机可读介质,其上存储有计算机程序,其中,所述计算机程序被处理器执行时实现流程200或300所述的方法。
图7示出了可以用来实施本公开的实施例的示例电子设备700的示意性框图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本公开的实现。
如图7所示,设备700包括计算单元701,其可以根据存储在只读存储器(ROM)702中的计算机程序或者从存储单元708加载到随机访问存储器(RAM)703中的计算机程序,来执行各种适当的动作和处理。在RAM 703中,还可存储设备700操作所需的各种程序和数据。计算单元701、ROM 702以及RAM 703通过总线704彼此相连。输入/输出(I/O)接口705也连接至总线704。
设备700中的多个部件连接至I/O接口705,包括:输入单元706,例如键盘、鼠标等;输出单元707,例如各种类型的显示器、扬声器等;存储单元708,例如磁盘、光盘等;以及通信单元709,例如网卡、调制解调器、无线通信收发机等。通信单元709允许设备700通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
计算单元701可以是各种具有处理和计算能力的通用和/或专用处理组件。计算单元701的一些示例包括但不限于中央处理单元(CPU)、图形处理单元(GPU)、各种专用的人工智能(AI)计算芯片、各种运行机器学习模型算法的计算单元、数字信号处理器(DSP)、以及任何适当的处理器、控制器、微控制器等。计算单元701执行上文所描述的各个方法和处理,例如联接表的方法。例如,在一些实施例中,联接表的方法可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元708。在一些实施例中,计算机程序的部分或者全部可以经由ROM 702和/或通信单元709而被载入和/或安装到设备700上。当计算机程序加载到RAM 703并由计算单元701执行时,可以执行上文描述的联接表的方法的一个或多个步骤。备选地,在其他实施例中,计算单元701可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行联接表的方法。
本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、芯片上系统的系统(SOC)、负载可编程逻辑设备(CPLD)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
用于实施本公开的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(LAN)、广域网(WAN)和互联网。
计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。服务器可以为分布式系统的服务器,或者是结合了区块链的服务器。服务器也可以是云服务器,或者是带人工智能技术的智能云计算服务器或智能云主机。服务器可以为分布式系统的服务器,或者是结合了区块链的服务器。服务器也可以是云服务器,或者是带人工智能技术的智能云计算服务器或智能云主机。
应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本发公开中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本公开公开的技术方案所期望的结果,本文在此不进行限制。
上述具体实施方式,并不构成对本公开保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本公开的精神和原则之内所作的修改、等同替换和改进等,均应包含在本公开保护范围之内。
Claims (10)
1.一种联接表的方法,包括:
获取待联接的第一表和第二表,其中,所述第一表的数据量小于所述第二表的数据量;
若所述第一表不可以广播,则计算所述第一表的行数与所述第二表的行数的比值;
若所述比值小于等于预定阈值,则根据所述第一表的关联键构建实时布隆过滤器,并将所述实时布隆过滤器作为过滤算子插入到所述第二表的过滤条件中;
从所述第二表中过滤掉不符合所述过滤条件的数据,得到过滤表;
将所述第一表和所述过滤表分别进行洗牌、排序后联接起来。
2.根据权利要求1所述的方法,其中,所述方法还包括:
若检测到未进行过滤优化,则在每个分片上根据所述第一表的关联键构建洗牌布隆过滤器,并将所述洗牌布隆过滤器作为过滤算子插入读取到的所述第二表的洗牌数据的后面;
对第二表的洗牌数据进行过滤,得到每个分片的分片过滤表;
对于每个分片,分别将该分片上所述第一表的洗牌数据和分片过滤表排序后联接起来。
3.根据权利要求2所述的方法,其中,所述方法还包括:
自定义实时布隆过滤器和洗牌布隆过滤器的过滤算子以支持代码生成器。
4.根据权利要求1所述的方法,其中,所述根据所述第一表的关联键构建实时布隆过滤器,包括:
若存在至少两个关联键,则对所述至少两个关联键进行哈希处理,得到一个散列值,根据所述散列值构建实时布隆过滤器。
5.根据权利要求1所述的方法,其中,所述方法还包括:
若在预定时间内未构建实时布隆过滤器,则对所述第一表和所述第二表进行内或左联接。
6.根据权利要求1所述的方法,其中,所述方法还包括:
若获取到待联接的第三表且关联键相同,则将所述实时布隆过滤器作为过滤算子插入到所述第三表的过滤条件中;
从所述第三表中过滤掉不符合所述过滤条件的数据,得到下推过滤表;
将所述下推过滤表进行洗牌、排序后与所述第一表和所述过滤表的联接结果联接起来。
7.根据权利要求6所述的方法,其中,所述方法还包括:
若检测到未生成下推过滤表,则将每个分片上的洗牌布隆过滤器作为过滤算子插入读取到的所述第三表的洗牌数据的后面,对第三表的洗牌数据进行过滤,得到每个分片的下推分片过滤表;
对于每个分片,分别将该分片上所述第一表和所述过滤表的联接结果和下推分片过滤表排序后联接起来。
8.一种联接表的装置,包括:
获取单元,被配置成获取待联接的第一表和第二表,其中,所述第一表的数据量小于所述第二表的数据量;
计算单元,被配置成若所述第一表不可以广播,则计算所述第一表的行数与所述第二表的行数的比值;
构建单元,被配置成若所述比值小于等于预定阈值,则根据所述第一表的关联键构建实时布隆过滤器,并将所述实时布隆过滤器作为过滤算子插入到所述第二表的过滤条件中;
过滤单元,被配置成从所述第二表中过滤掉不符合所述过滤条件的数据,得到过滤表;
联接单元,被配置成将所述第一表和所述过滤表分别进行洗牌、排序后联接起来。
9.一种联接表的电子设备,包括:
一个或多个处理器;
存储装置,其上存储有一个或多个计算机程序,
当所述一个或多个计算机程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-7中任一项所述的方法。
10.一种计算机可读介质,其上存储有计算机程序,其中,所述计算机程序被处理器执行时实现如权利要求1-7中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210091434.1A CN114443659A (zh) | 2022-01-26 | 2022-01-26 | 联接表的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210091434.1A CN114443659A (zh) | 2022-01-26 | 2022-01-26 | 联接表的方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114443659A true CN114443659A (zh) | 2022-05-06 |
Family
ID=81368861
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210091434.1A Pending CN114443659A (zh) | 2022-01-26 | 2022-01-26 | 联接表的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114443659A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114936223A (zh) * | 2022-05-27 | 2022-08-23 | 阿里云计算有限公司 | 数据处理方法、装置、设备和存储介质 |
-
2022
- 2022-01-26 CN CN202210091434.1A patent/CN114443659A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114936223A (zh) * | 2022-05-27 | 2022-08-23 | 阿里云计算有限公司 | 数据处理方法、装置、设备和存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8396852B2 (en) | Evaluating execution plan changes after a wakeup threshold time | |
US10133778B2 (en) | Query optimization using join cardinality | |
US9767149B2 (en) | Joining data across a parallel database and a distributed processing system | |
US10769147B2 (en) | Batch data query method and apparatus | |
US8332389B2 (en) | Join order for a database query | |
US9405855B2 (en) | Processing diff-queries on property graphs | |
EP2354921A1 (en) | Hybrid evaluation of expressions in DBMS | |
EP2657860A1 (en) | Data flow graph optimization using rules | |
EP3251030B1 (en) | Workload aware data placement for join-based query processing in a cluster | |
US11132362B2 (en) | Method and system of optimizing database system, electronic device and storage medium | |
US11269880B2 (en) | Retroreflective clustered join graph generation for relational database queries | |
US11442930B2 (en) | Method, apparatus, device and storage medium for data aggregation | |
US20190213188A1 (en) | Distributed computing framework and distributed computing method | |
CN105653647A (zh) | Sql语句的信息采集方法及系统 | |
CN111814458A (zh) | 规则引擎系统优化方法、装置、计算机设备及存储介质 | |
CN110471935B (zh) | 一种数据操作的执行方法、装置、设备和存储介质 | |
CN116244386A (zh) | 应用于多源异构数据存储系统的实体关联关系的识别方法 | |
CN108073641B (zh) | 查询数据表的方法和装置 | |
CN114443659A (zh) | 联接表的方法和装置 | |
CN112860812B (zh) | 在大数据中无侵入确定数据字段级关联关系的方法和装置 | |
CN112182031B (zh) | 数据查询方法及装置、存储介质、电子装置 | |
CN113505278A (zh) | 图匹配方法、装置、电子设备及存储介质 | |
CN116628136A (zh) | 基于声明式推理的协同查询处理方法、系统、电子设备 | |
CN106909602A (zh) | 一种信息查询方法及装置 | |
CN110895529A (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 |