CN111767265B - 一种连接操作中数据倾斜方法、系统及计算机设备 - Google Patents
一种连接操作中数据倾斜方法、系统及计算机设备 Download PDFInfo
- Publication number
- CN111767265B CN111767265B CN202010404854.1A CN202010404854A CN111767265B CN 111767265 B CN111767265 B CN 111767265B CN 202010404854 A CN202010404854 A CN 202010404854A CN 111767265 B CN111767265 B CN 111767265B
- Authority
- CN
- China
- Prior art keywords
- execution plan
- data
- inclination
- plan
- value
- 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
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/21—Design, administration or maintenance of databases
- G06F16/217—Database tuning
-
- 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
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)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种连接操作中数据倾斜处理方法,包括如下步骤:在SQL语句中为出现数据倾斜的关联对象打标注,标注内容包括关联对象以及出现倾斜的值;解析SQL执行计划,根据标注识别出SQL执行计划中与关联对象对应的关联执行计划;根据出现数据倾斜的值,将关联执行计划拆分为两个分计划,一个分计划为用于执行关联执行计划中出现数据倾斜的值,另一个分计划用于执行关联执行计划中未出现数据倾斜的值,对各分计划的执行结果取并集,得到替换执行计划;用替换执行计划替代关联执行计划,得到完成数据倾斜处理后的SQL执行计划。本发明的数据倾斜处理方法不需要定制化开发代码就可以解决两个表join过程中的数据倾斜问题。
Description
技术领域
本发明涉及数据倾斜处理技术领域,特别涉及一种连接操作中数据倾斜处理方法、系统及计算机设备。
背景技术
目前对于大数据处理领域的数据处理方法,基本思路是对一个很大的数据集按照特定的规则进行分区,然后使用多个执行器对各个分区中的数据进行并行处理计算,这些执行器可以位于不同的机器中,或者位于同一台机的不同进程中。如果一项处理比较复杂,则整个处理过程需由多个计算任务组成,不同阶段的计算任务之间通常需要对数据重新分区(或者叫shuffle)。
如果在进行计算的过程中,各个分区中的数据量分布比较均衡,那么各个执行器都可以在比较相近的时间内处理完各自负责分区内的数据。但现实的情况是:在某些情况下,某一计算阶段各个分区内的数据会出现极不均衡,特别是在某一阶段的shuffle过程后,这种情况通常叫数据倾斜。数据倾斜的直接后果就是,数据量大的分区处理时间极长,在其它分区已经完成计算的情况下,某些数据量大的分区还长时间不能计算完毕,从而使得该时候整个系统的处理并行度不高,整体计算时间拖长。甚至在某些特别严重情况下,个别分区因为数据量极其大,使得计算过程中内存不足,从而造成执行计算任务的执行器因内存溢出而被操作系统终止,使用整体计算任务永远无法完成。
现阶段,对于数据倾斜的处理没有十分好的通用方法,大多是针对具体的问题,按照一定的方法论,对问题使用定制化代码开发的形式,在代码层面进行解决。
而基于SQL或其变种的数据查询语言,目前已经应用在各个大数据生态圈中,Hive、Spark、Presto等大数据的分布式处理引擎都可以将SQL转变为各自的大数据处理代码,在各自的处理引擎中对数据进行处理。但针对SQL的处理逻辑,如何解决数据倾斜问题,目前方案甚少,也不能很好地解决数据倾斜的各个方面。解决SQL中数据倾斜,目前的方法主要有两个:
1、针对具体的问题,按照一定的方法论,以计算所用引擎所指定的开发语言进行定制化代码开发,通过定制化的代码解决数据倾斜问题。
2、以SQL语句标注(hint)的形式,可以给SQL语句加上标注,当计算引擎遇到标注的时候,可以在把SQL语句转换成计算引擎代码的过程中针对倾斜情况进行适当的处理。此方法无须进行定制化开发,只需简单加标注。但目前在实现的应用过程中,只有针对MapJoin操作的解决方案是通用的,且此解决方案要求参与两表Join操作(即连接操作)的表中有一个是小表,小表即可以直接放到各个Map端的内存中的表,对于出现数据倾斜的两个大表的Join无能为力,大表即不能直接放到各个Map端的内存中的表。
发明内容
基于此,有必要提供连接操作中数据倾斜处理方法、系统及计算机设备,解决现有技术中没有针对出现数据倾斜的两个大表的join操作进行处理的通用方法。
本发明实施例一方面提供一种连接操作中数据倾斜处理方法,包括如下步骤:
在SQL语句中为出现数据倾斜的关联对象打标注,标注内容包括关联对象以及出现倾斜的值;
解析SQL执行计划,根据所述标注识别出所述SQL执行计划中与所述关联对象对应的关联执行计划;
根据出现数据倾斜的值,将所述关联执行计划拆分为两个分计划,一个分计划为用于执行所述关联执行计划中出现数据倾斜的值,另一个分计划用于执行所述关联执行计划中未出现数据倾斜的值,对各所述分计划的执行结果取并集,得到替换执行计划;
用所述替换执行计划替代所述关联执行计划,得到完成数据倾斜处理后的SQL执行计划。
作为上述实施例的进一步改进,在SQL语句中为出现数据倾斜的关联对象打标注,具体为:
如果所述关联对象和出现数据倾斜的值均已知,则直接为所述SQL语句中关联对象打标注;
如果所述关联对象中关联表已知,且关联列未知,则观察所述关联表中各键值在分布式分区中的出现频率,将出现频率超过阈值百分比的键值所在的列定义为关联列,将出现频率超过阈值百分比的键值定义为出现数据倾斜的值,然后根据定义为所述SQL语句中关联对象打标注。
作为上述实施例的进一步改进,在SQL语句中为出现数据倾斜的关联对象打标注,还包括:
如果所述出现数据倾斜的值未知,则在设定的倾斜观察时间内,观察所述关联对象中各键值在分布式分区中的出现频率,将出现频率超过阈值百分比的键值定义为出现数据倾斜的值,然后根据定义为所述SQL语句中关联对象打标注。
作为上述实施例的进一步改进,根据出现数据倾斜的值,将所述关联执行计划拆分为两个分计划,具体为:
在所述关联执行计划的基础上执行过滤操作,滤除未出现数据倾斜的值,得到用于执行所述关联执行计划中出现数据倾斜的值的分计划;
在所述关联执行计划的基础上执行过滤操作,滤除出现数据倾斜的值,得到用于执行所述关联执行计划中未出现数据倾斜的值的分计划。
作为上述实施例的进一步改进,根据出现数据倾斜的值,将所述关联执行计划拆分为两个分计划,还包括:
如果所述关联执行计划的关联对象多于两个,则先将所述关联执行计划拆分成多个由双关联对象组成的关联执行计划,然后将每一个由双关联对象组成的关联执行计划拆分成两个分计划。
本发明实施例另一方面提供一种连接操作中数据倾斜处理系统,包括标注模块、识别模块、拆分模块以及替换模块;
所述标注模块用于在SQL语句中为出现数据倾斜的关联对象打标注,标注内容包括关联对象以及出现倾斜的值;
所述识别模块用于解析SQL执行计划,根据所述标注识别出所述SQL执行计划中与所述关联对象对应的关联执行计划;
所述拆分模块用于根据出现数据倾斜的值,将所述关联执行计划拆分为两个分计划,一个分计划为用于执行所述关联执行计划中出现数据倾斜的值,另一个分计划用于执行所述关联执行计划中未出现数据倾斜的值,对各所述分计划的执行结果取并集,得到替换执行计划;
所述替换模块用于用所述替换执行计划替代所述关联执行计划,得到完成数据倾斜处理后的SQL执行计划。
作为上述实施例的进一步改进,所述拆分模块具体用于:
如果所述关联对象和出现数据倾斜的值均已知,则直接为所述SQL语句中关联对象打标注;
如果所述关联对象中关联表已知,且关联列未知,则观察所述关联表中各键值在分布式分区中的出现频率,将出现频率超过阈值百分比的键值所在的列定义为关联列,将出现频率超过阈值百分比的键值定义为出现数据倾斜的值,然后根据定义为所述SQL语句中关联对象打标注;
如果所述出现数据倾斜的值未知,则在设定的倾斜观察时间内,观察所述关联对象中各键值在分布式分区中的出现频率,将出现频率超过阈值百分比的键值定义为出现数据倾斜的值,然后根据定义为所述SQL语句中关联对象打标注。
作为上述实施例的进一步改进,所述拆分模块具体用于:
在所述关联执行计划的基础上执行过滤操作,滤除未出现数据倾斜的值,得到用于执行所述关联执行计划中出现数据倾斜的值的分计划;
在所述关联执行计划的基础上执行过滤操作,滤除出现数据倾斜的值,得到用于执行所述关联执行计划中未出现数据倾斜的值的分计划。
作为上述实施例的进一步改进,所述拆分模块具体用于:
如果所述关联执行计划的关联对象多于两个,则先将所述关联执行计划拆分成多个由双关联对象组成的关联执行计划,然后将每一个由双关联对象组成的关联执行计划拆分成两个分计划。
本发明实施例再一方面提供一种计算机设备,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述任一实施例所述方法的步骤。
本发明实施例的连接操作中数据倾斜处理方法、系统及计算机设备,在SQL语句中通过打标注的方式告知分布式计算引擎出现数据倾斜的关联对象以及值,根据标注识别出受到数据倾斜影响的关联执行任务(join操作),把受影响的join操作替换为两个无交集的join操作的并集,这两个新的join操作,一个用于执行关联执行计划中出现数据倾斜的值,另一个用于执行关联执行计划中未出现数据倾斜的值。最后,把原执行计划中标注所指示的带有倾斜的join操作都替换为上述处理后的替换执行任务,即可实现在不进行定制化开发代码的基础上解决两个表join过程中所遇到的数据倾斜问题。
附图说明
通过附图中所示的本发明优选实施例更具体说明,本发明上述及其它目的、特征和优势将变得更加清晰。在全部附图中相同的附图标记指示相同的部分,且并未刻意按实际尺寸等比例缩放绘制附图,重点在于示出本的主旨。
图1为本发明实施例的连接操作中数据倾斜处理方法的流程图;
图2为现有技术中典型的两表join操作的执行计划示例图;
图3为本发明实施例的优化后的两表join操作的执行计划示例图。
具体实施方式
下面结合附图和具体实施例对本发明技术方案作进一步的详细描述,以使本领域的技术人员可以更好的理解本发明并能予以实施,但所举实施例不作为对本发明的限定。
如图1所示,本发明实施例提供一种连接操作中数据倾斜处理方法,其特征在于,包括如下步骤:
S1、在SQL语句中为出现数据倾斜的关联对象打标注,标注内容包括关联对象以及出现倾斜的值;
S2、解析SQL执行计划,根据所述标注识别出所述SQL执行计划中与所述关联对象对应的关联执行计划;
S3、根据出现数据倾斜的值,将所述关联执行计划拆分为两个分计划,一个分计划为用于执行所述关联执行计划中出现数据倾斜的值,另一个分计划用于执行所述关联执行计划中未出现数据倾斜的值,对各所述分计划的执行结果取并集,得到替换执行计划;
S4、用所述替换执行计划替代所述关联执行计划,得到完成数据倾斜处理后的SQL执行计划。
本发明实施例针对的是在分布式计算引擎下使用SQL语句进行两表join操作的情况,尤其是在出现数据倾斜情况下两个大表进行join操作的情况进行优化,小表即可以直接放到各个Map端的内存中的表,大表即不能直接放到各个Map端的内存中的表。借助SQL语句的标注(hint),当分布式计算引擎在解析SQL语句,转换为自身执行代码的时候,会根据hint,对SQL语句的执行计划进行动态调整,以便使两表在进行join操作出现数据倾斜的情况下,能大幅提升计算效率。
具体的,本实施例中,join操作的时候出现数据倾斜的表名为t1和t2、对应的列名为t1.c1和t2.c2、出现数据倾斜的值为v1、v2及v3。在SQL标注(hint)中指明。因此在通用SQL语句中,给出现数据倾斜的关联对象打标注(hint),打标方式为:/*+ skewjoin(t1.c1=t2.c2,[v1,v2,…])*/,t1.c1=t2.c2表示关联对象,[v1,v2,…]表示出现数据倾斜的值。
在分布式计算引擎解析出来的SQL执行计划中, 根据SQL语句的hint识别出t1.c1和t2.c2的join操作所对应的关联执行计划,并对关联执行计划中的步骤做干预。应该理解的,这里的join操作的类型为内连接(inner join)、左连接(left join)、右连接(rightjoin)、全连接(full join)中任一种均可。例如,图2是一个典型的含有两表left join操作的执行计划。下面我们就以图2中示出的执行计划作为关联执行计划,对图2中关联执行计划进行拆分优化。
拆分优化方法为:将一个关联执行计划拆分成两个分计划,即将出现数据倾斜的join操作拆分成两个没有交集join操作,一个join操作用来执行出现数据倾斜的值的join,另一个join操作用来执行未出现数据倾斜的值的join,由于两个join操作的操作对象没有交集,因此不再需要关联执行,从而从根源上解决了数据倾斜带来的计算效率低的问题,最后对拆分的两个join操作的执行结果执行并集操作(union),即可得到与拆分优化前的关联执行计划相同的执行结果。
将按上述方法调整后的替换执行计划重新交给分布式计算引擎进行计算,即可解决两个表进行join连接时所出现的数据倾斜问题。
通过以上改进,本发明实施例在不需要进行定制化代码开发的前提下,只通过给原有的SQL语句加入标注的方式,就解决了两张表join时所出现的数据倾斜问题,尤其是两张大表join时所出现的数据倾斜问题,提升分布式计算引擎在处理大批量数据时的效率。
在优选实施例中,在SQL语句中为出现数据倾斜的关联对象打标注,具体为:
如果所述关联对象和出现数据倾斜的值均已知,则直接为所述SQL语句中关联对象打标注;
如果所述出现数据倾斜的值未知,则在设定的倾斜观察时间内,观察所述关联对象中各键值在分布式分区中的出现频率,将出现频率超过阈值百分比的键值定义为出现数据倾斜的值,然后根据定义为所述SQL语句中关联对象打标注。
如果所述出现数据倾斜的值未知,则先为关联对象打上标注,标注内容仅包括关联对象,不包括出现倾斜的值,例如:/*+ skewjoin(t1.c1=t2.c2)*/。分布式计算引擎将会按键值的哈希值,把关联对象中数据存放入不同的分区中。本实施例则在倾斜观察时间内,如一分钟内,统计各个键值出现的次数,然后计算各个键值出现次数占所有键值出现次数的百分比,即出现频率,当观察时间结束后统计出现频率超过阈值百分比(例如25%)的键值,如频率超过25%的键值有3个v1、v2及v3,即t1.c1或t2.c2出现最多的3个值,则撤销正在进行的分布式计算执行计划,在原有的标注上添加出现数据倾斜的值,即将标注转换为:/*+ skewjoin(t1.c1=t2.c2,[v1,v2,v3])*/。具体的,倾斜观察时间可以通过skewjoin.observationtime属性进行设置。
在优选实施例中,在SQL语句中为出现数据倾斜的关联对象打标注,还包括:
如果所述关联对象未知,则设置全局参数对计划执行过程进行监控,当监测到关联执行任务时,在设定的倾斜观察时间内,观察所述关联对象中各键值在分布式分区中的出现频率,将出现频率超过阈值百分比的键值定义为出现数据倾斜的值,然后根据定义为所述SQL语句中关联对象打标注。
上述基础方案需要在SQL语句的hint中指明会出现数据倾斜的表、列,如果我们已经知道出现数据倾斜表时哪一张表,出现数据倾斜的列是哪一列,那么直接为相应表的相应列打上标注即可。但是如果我们出现数据倾斜的关联对象,那么我们可以通过设置全局参数进行监控,全局参数可通过skewjoin.autodetect属性进行设置,当自动监测到两表join操作关联时,在倾斜观察时间内,例如1分钟内,关联对象中各键值在分布式分区中的出现频率超过阈值百分比(例如50%),则判定该关联对象的join操作出现数据倾斜,立即按照监测结果自动加上hint并按照上述方法调整执行计划,从而实现数据倾斜的自动监测发现及解决。倾斜观察时间可以通过skewjoin.observationtime属性进行设置。
在优选实施例中,根据出现数据倾斜的值,将所述关联执行计划拆分为两个分计划,具体为:
在所述关联执行计划的基础上执行过滤操作,滤除未出现数据倾斜的值,得到用于执行所述关联执行计划中出现数据倾斜的值的分计划;
在所述关联执行计划的基础上执行过滤操作,滤除出现数据倾斜的值,得到用于执行所述关联执行计划中未出现数据倾斜的值的分计划。
对关联执行计划进行拆分优化时,先把原来的一个带有数据倾斜的join操作拆分成两个join操作,新的两个join是在原来两个表的基础上执行过Filter操作的,一个join操作的Filter是过滤过hint中不存在数据倾斜的值,即相当于t1 left join t2 on t1.c1=t2.c2 where t1.c1 not in (v1,v2,v3);另一个join操作的Filter专门处理hint中标识的存在数据倾斜的值,即相当于t1 join t2 on t1.c1=t2.c2 where t1.c1 in (v1,v2,v3)。
把新拆分的两个join操作结果执行并集(union)操作,则最终结果为未进行优化前的单个join操作的结果。图3即对图2中关联执行计划进行拆分、合并后的替换执行计划。
用替换执行计划替换掉原来整个执行计划中相应的join操作部分,如果整个执行计划还有其它数据倾斜的join操作,则都采用本实施例提供的方法进行加hint、识别、拆分、合并以及替换的步骤,就能得出一个完整的解决掉数据倾斜的新执行计划。
分布式计算引擎得到新执行计划后,生成对应的执行计算代码,进行数据处理运算即可,新的执行计划的计算效率将大大提高。
在优选实施例中,根据出现数据倾斜的值,将所述关联执行计划拆分为两个分计划,还包括:
如果所述关联执行计划的关联对象多于两个,则先将所述关联执行计划拆分成多个由双关联对象组成的关联执行计划,然后将每一个由双关联对象组成的关联执行计划拆分成两个分计划。
如果关联对象中包括多个表,那么可以先将多个表的join操作拆分为多个两表join操作,然后分别针对每一个两表join操作进行拆分以及合并。
本发明实施例还提供一种连接操作中数据倾斜处理系统,包括标注模块、识别模块、拆分模块以及替换模块;
所述标注模块用于在SQL语句中为出现数据倾斜的关联对象打标注,标注内容包括关联对象以及出现倾斜的值;
所述识别模块用于解析SQL执行计划,根据所述标注识别出所述SQL执行计划中与所述关联对象对应的关联执行计划;
所述拆分模块用于根据出现数据倾斜的值,将所述关联执行计划拆分为两个分计划,一个分计划为用于执行所述关联执行计划中出现数据倾斜的值,另一个分计划用于执行所述关联执行计划中未出现数据倾斜的值,对各所述分计划的执行结果取并集,得到替换执行计划;
所述替换模块用于用所述替换执行计划替代所述关联执行计划,得到完成数据倾斜处理后的SQL执行计划。
在优选实施例中,所述拆分模块具体用于:
如果所述关联对象和出现数据倾斜的值均已知,则直接为所述SQL语句中关联对象打标注;
如果所述出现数据倾斜的值未知,则在设定的倾斜观察时间内,观察所述关联对象中各键值在分布式分区中的出现频率,将出现频率超过阈值百分比的键值定义为出现数据倾斜的值,然后根据定义为所述SQL语句中关联对象打标注;
如果所述关联对象未知,则设置全局参数对计划执行过程进行监控,当监测到关联执行任务时,在设定的倾斜观察时间内,观察所述关联对象中各键值在分布式分区中的出现频率,将出现频率超过阈值百分比的键值定义为出现数据倾斜的值,然后根据定义为所述SQL语句中关联对象打标注。
在优选实施例中,所述拆分模块具体用于:
在所述关联执行计划的基础上执行过滤操作,滤除未出现数据倾斜的值,得到用于执行所述关联执行计划中出现数据倾斜的值的分计划;
在所述关联执行计划的基础上执行过滤操作,滤除出现数据倾斜的值,得到用于执行所述关联执行计划中未出现数据倾斜的值的分计划。
在优选实施例中,所述拆分模块具体用于:
如果所述关联执行计划的关联对象多于两个,则先将所述关联执行计划拆分成多个由双关联对象组成的关联执行计划,然后将每一个由双关联对象组成的关联执行计划拆分成两个分计划。
本发明实施例提供的连接操作中数据倾斜处理系统,用于实现连接操作中数据倾斜处理方法,因此,连接操作中数据倾斜处理方法所具备的技术效果,连接操作中数据倾斜处理系统同样具备,在此不再赘述。
本发明实施例还提供一种计算机设备,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现上述任一实施例的方法的步骤。该计算机设备可以是可以执行程序的智能手机、平板电脑、笔记本电脑、台式计算机、机架式服务器、刀片式服务器、塔式服务器或机柜式服务器(包括独立的服务器,或者多个服务器所组成的服务器集群)等。本实施例的计算机设备至少包括但不限于:可通过系统总线相互通信连接的存储器、处理器。
本实施例中,存储器(即可读存储介质)包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,存储器可以是计算机设备的内部存储单元,例如该计算机设备的硬盘或内存。在另一些实施例中,存储器也可以是计算机设备的外部存储设备,例如该计算机设备上配备的插接式硬盘,智能存储卡(Smart Media Card ,SMC),安全数字(Secure Digital ,SD)卡,闪存卡(Flash Card)等。当然,存储器还可以既包括计算机设备的内部存储单元也包括其外部存储设备。本实施例中,存储器通常用于存储安装于计算机设备的操作系统和各类应用软件等。此外,存储器还可以用于暂时地存储已经输出或者将要输出的各类数据。
处理器在一些实施例中可以是中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器通常用于控制计算机设备的总体操作。本实施例中,处理器用于运行存储器中存储的程序代码或者处理数据,以实现上述实施例的连接操作中数据倾斜处理方法。
本发明实施例提供的连接操作中数据倾斜处理方法与系统及计算机设备,在不进行定制化开发代码的基础上,解决两个表join过程中所遇到的数据倾斜问题。在实际测试中发现,当两个十亿量级大表的JOIN操作,如果没有采用本发明的方法进行优化,知识采用通用的SQL语句直接执行,会因为数据倾斜导致内在溢出,从而无法完成计算。而采用本发明中的方法进行优化后,还是用原来的SQL语句,20分钟就跑完了。结果已经非常接近通过定制化代码去实现同样逻辑的15分钟。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (10)
1.一种连接操作中数据倾斜处理方法,其特征在于,包括如下步骤:
在SQL语句中为出现数据倾斜的关联对象打标注,所述关联对象为出现数据倾斜的表和/或列,标注内容包括关联对象以及出现倾斜的值;
解析SQL执行计划,根据所述标注识别出所述SQL执行计划中与所述关联对象对应的关联执行计划;
根据出现数据倾斜的值,将所述关联执行计划拆分为两个分计划,一个分计划为用于执行所述关联执行计划中出现数据倾斜的值,另一个分计划用于执行所述关联执行计划中未出现数据倾斜的值,对各所述分计划的执行结果取并集,得到替换执行计划;
用所述替换执行计划替代所述关联执行计划,得到完成数据倾斜处理后的SQL执行计划。
2.根据权利要求1所述的连接操作中数据倾斜处理方法,其特征在于,在SQL语句中为出现数据倾斜的关联对象打标注,具体为:
如果所述关联对象和出现数据倾斜的值均已知,则直接为所述SQL语句中关联对象打标注;
如果所述出现数据倾斜的值未知,则在设定的倾斜观察时间内,观察所述关联对象中各键值在分布式分区中的出现频率,将出现频率超过阈值百分比的键值定义为出现数据倾斜的值,然后根据定义为所述SQL语句中关联对象打标注。
3.根据权利要求2所述的连接操作中数据倾斜处理方法,其特征在于,在SQL语句中为出现数据倾斜的关联对象打标注,还包括:
如果所述关联对象未知,则设置全局参数对计划执行过程进行监控,当监测到关联执行任务时,在设定的倾斜观察时间内,观察所述关联对象中各键值在分布式分区中的出现频率,将出现频率超过阈值百分比的键值定义为出现数据倾斜的值,然后根据定义为所述SQL语句中关联对象打标注。
4.根据权利要求1所述的连接操作中数据倾斜处理方法,其特征在于,根据出现数据倾斜的值,将所述关联执行计划拆分为两个分计划,具体为:
在所述关联执行计划的基础上执行过滤操作,滤除未出现数据倾斜的值,得到用于执行所述关联执行计划中出现数据倾斜的值的分计划;
在所述关联执行计划的基础上执行过滤操作,滤除出现数据倾斜的值,得到用于执行所述关联执行计划中未出现数据倾斜的值的分计划。
5.根据权利要求1所述的连接操作中数据倾斜处理方法,其特征在于,根据出现数据倾斜的值,将所述关联执行计划拆分为两个分计划,还包括:
如果所述关联执行计划的关联对象多于两个,则先将所述关联执行计划拆分成多个由双关联对象组成的关联执行计划,然后将每一个由双关联对象组成的关联执行计划拆分成两个分计划。
6.一种连接操作中数据倾斜处理系统,其特征在于,包括标注模块、识别模块、拆分模块以及替换模块;
所述标注模块用于在SQL语句中为出现数据倾斜的关联对象打标注,所述关联对象为出现数据倾斜的表和/或列,标注内容包括关联对象以及出现倾斜的值;
所述识别模块用于解析SQL执行计划,根据所述标注识别出所述SQL执行计划中与所述关联对象对应的关联执行计划;
所述拆分模块用于根据出现数据倾斜的值,将所述关联执行计划拆分为两个分计划,一个分计划为用于执行所述关联执行计划中出现数据倾斜的值,另一个分计划用于执行所述关联执行计划中未出现数据倾斜的值,对各所述分计划的执行结果取并集,得到替换执行计划;
所述替换模块用于用所述替换执行计划替代所述关联执行计划,得到完成数据倾斜处理后的SQL执行计划。
7.根据权利要求6所述的连接操作中数据倾斜处理系统,其特征在于,所述拆分模块具体用于:
如果所述关联对象和出现数据倾斜的值均已知,则直接为所述SQL语句中关联对象打标注;
如果所述出现数据倾斜的值未知,则在设定的倾斜观察时间内,观察所述关联对象中各键值在分布式分区中的出现频率,将出现频率超过阈值百分比的键值定义为出现数据倾斜的值,然后根据定义为所述SQL语句中关联对象打标注;
如果所述关联对象未知,则设置全局参数对计划执行过程进行监控,当监测到关联执行任务时,在设定的倾斜观察时间内,观察所述关联对象中各键值在分布式分区中的出现频率,将出现频率超过阈值百分比的键值定义为出现数据倾斜的值,然后根据定义为所述SQL语句中关联对象打标注。
8.根据权利要求6所述的连接操作中数据倾斜处理系统,其特征在于,所述拆分模块具体用于:
在所述关联执行计划的基础上执行过滤操作,滤除未出现数据倾斜的值,得到用于执行所述关联执行计划中出现数据倾斜的值的分计划;
在所述关联执行计划的基础上执行过滤操作,滤除出现数据倾斜的值,得到用于执行所述关联执行计划中未出现数据倾斜的值的分计划。
9.根据权利要求6所述的连接操作中数据倾斜处理系统,其特征在于,所述拆分模块具体用于:
如果所述关联执行计划的关联对象多于两个,则先将所述关联执行计划拆分成多个由双关联对象组成的关联执行计划,然后将每一个由双关联对象组成的关联执行计划拆分成两个分计划。
10.一种计算机设备,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至5任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010404854.1A CN111767265B (zh) | 2020-05-14 | 2020-05-14 | 一种连接操作中数据倾斜方法、系统及计算机设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010404854.1A CN111767265B (zh) | 2020-05-14 | 2020-05-14 | 一种连接操作中数据倾斜方法、系统及计算机设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111767265A CN111767265A (zh) | 2020-10-13 |
CN111767265B true CN111767265B (zh) | 2021-03-19 |
Family
ID=72719102
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010404854.1A Active CN111767265B (zh) | 2020-05-14 | 2020-05-14 | 一种连接操作中数据倾斜方法、系统及计算机设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111767265B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112905596B (zh) * | 2021-03-05 | 2024-02-02 | 北京中经惠众科技有限公司 | 数据处理的方法、装置、计算机设备以及存储介质 |
CN112905628B (zh) * | 2021-03-26 | 2024-01-02 | 第四范式(北京)技术有限公司 | 数据处理方法及装置 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9053207B2 (en) * | 2007-02-08 | 2015-06-09 | International Business Machines Corporation | Adaptive query expression builder for an on-demand data service |
US11921672B2 (en) * | 2017-07-31 | 2024-03-05 | Splunk Inc. | Query execution at a remote heterogeneous data store of a data fabric service |
CN108268586B (zh) * | 2017-09-22 | 2020-06-16 | 阿里巴巴(中国)有限公司 | 跨多数据表的数据处理方法、装置、介质和计算设备 |
CN110909016B (zh) * | 2019-10-12 | 2023-06-16 | 中国平安财产保险股份有限公司 | 基于数据库的重复关联检测方法、装置、设备及存储介质 |
-
2020
- 2020-05-14 CN CN202010404854.1A patent/CN111767265B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN111767265A (zh) | 2020-10-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109977110B (zh) | 数据清洗方法、装置及设备 | |
US10769147B2 (en) | Batch data query method and apparatus | |
CN111767265B (zh) | 一种连接操作中数据倾斜方法、系统及计算机设备 | |
CN111597243A (zh) | 基于数据仓库抽象数据加载的方法及系统 | |
CN107977504B (zh) | 一种非对称堆芯燃料管理计算方法、装置及终端设备 | |
US11386053B2 (en) | Automatic generation of a data model from a structured query language (SQL) statement | |
JP6244274B2 (ja) | 相関ルール分析装置および相関ルール分析方法 | |
CN110908978B (zh) | 数据库数据结构验证方法及装置 | |
CN110888909B (zh) | 一种评估内容的数据统计处理方法及装置 | |
CN111177119A (zh) | 基于数据库的全量数据比对方法、装置、设备及存储介质 | |
CN114329116B (zh) | 基于人工智能的智慧园区资源匹配度分析方法及系统 | |
CN110851437A (zh) | 一种存储方法、装置及设备 | |
CN115757174A (zh) | 一种数据库的差异检测方法及装置 | |
CN113001538B (zh) | 一种命令解析方法及系统 | |
CN111143356B (zh) | 报表检索方法及装置 | |
US20080005159A1 (en) | Method and computer program product for collection-based iterative refinement of semantic associations according to granularity | |
CN116955415B (zh) | 基于设计层级的数据搜索系统 | |
CN113138987B (zh) | 基于内存数据的数据处理方法和相关设备 | |
CN117573199B (zh) | 一种模型差异对比分析方法、装置、设备及介质 | |
CN113760489B (zh) | 一种资源配置方法和装置 | |
CN109558303B (zh) | 一种应用行为分析方法、装置及电子设备 | |
CN115080293A (zh) | 一种系统重跑的方法及装置 | |
CN116737769A (zh) | 一种数据倾斜点查找方法、装置、计算机设备及存储介质 | |
CN117632544A (zh) | 一种基于存量数据调用的任务处理方法、装置及设备 | |
CN114911878A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |