一种查询语句公共部分的提取方法及装置制造方法

文档序号:6511513阅读:150来源:国知局
一种查询语句公共部分的提取方法及装置制造方法
【专利摘要】一种查询语句公共部分的提取方法及装置;所述方法包括:将查询语句划分为一个或多个查询层次,一个查询层次为进行一次查询操作的查询子句;分别根据各所述查询层次中查询对象的过滤特征和流向特征抽象出各所述查询层次的特征向量;采用预定算法分别对各所述查询层次的所述特征向量进行计算,得到各所述查询层次的特征值;统计各所述特征值的重复次数,选取重复次数符合预定条件的所述特征值作为公共部分。本申请能给有效检测不定时增长的海量查询语句中的公共部分。
【专利说明】一种查询语句公共部分的提取方法及装置

【技术领域】
[0001] 本发明涉及网络领域,尤其涉及一种查询语句公共部分的提取方法及装置。

【背景技术】
[0002] 近年来由于互联网、云计算、移动和物联网的迅猛发展,大数据技术(Big Data)逐 渐成为学术界和工业界共同关注的研究热点。几乎无所不在的移动设备、RFID、无线传感器 等每分每秒都在产生数据,而数以亿计的互联网服务也时时刻刻在产生巨量的交互信息。 因之而生的业务需求和竞争压力对数据处理的实时性、有效性提出了更高的要求。
[0003] 当今越来越多的互联网公司采用大集群来进行海量数据分析。这些任务通常被写 成类SQL (Structured Query Language,结构化查询语言)的语句,并通过类Hive (-种数 据仓库工具)的数据分析工具翻译为MapReduce (-种编程模型)作业,最终被分布式集群 处理和执行。由于业务需要,诸多公司通常维护一批数量巨大、结构复杂、运行耗时的类SQL 查询语句来完成大数据分析任务从而生成例行报表。这个集合是参数化(parameteric)和 回归化(recurring)的,并且不定时地会有新的语句加入到该集合中,最终被周期性地运 行。这样的语句集合称为回归查询集(recurring query set)。
[0004] 回归查询集中大量存在结构相似,数据共享的公共部分。数据库领域中传统的多 重查询优化MQO (Multiple Query Optimization)问题通过复用多重语句间的公共部分来 提高查询效率。但此类解决办法(主要是启发式和遗传算法)并不适用于回归查询集这种 "大量"语句并"不定时"增长的情况。
[0005] 随着云计算的日渐流行,云系统中的MQO逐渐成为学术及工业界的研究热点。当 前在企业级离线数据处理中,每天需要完成大量的SQL语句作业,以一大型网站离线数据 处理ODPS (Open Data Processing Service,开放数据处理服务)部门为例,其支持的生产 集群上,每天大约有30, 000条SQL语句需要执行。值得注意的是,这些SQL语句所构成的 集合具有数量多、结构复杂、语句变动小的特点。即符合上文所说的回归查询集的特点。如 何在海量查询语句中检测、共享和重用公共部分极具挑战性。
[0006] 目前多重语句优化问题的解决办法(主要是启发式和遗传算法)并不适用于回归 查询集这种"大量"语句并"不定时"增长的情况。


【发明内容】

[0007] 本申请要解决的技术问题是如何有效检测不定时增长的海量查询语句中的公共 部分。
[0008] 为了解决上述问题,本申请提供了一种查询语句公共部分的提取方法,包括:
[0009] 将查询语句划分为一个或多个查询层次,一个查询层次为进行一次查询操作的查 询子句;
[0010] 分别根据各所述查询层次中查询对象的过滤特征和流向特征抽象出各所述查询 层次的特征向量; toon] 采用预定算法分别对各所述查询层次的所述特征向量进行计算,得到各所述查询 层次的特征值;
[0012] 统计各所述特征值的重复次数,选取重复次数符合预定条件的所述特征值作为公 共部分。
[0013] 进一步地,所述查询对象为查询语句中的行变换和源追溯操作;
[0014] 所述过滤特征是针对一个所述查询层次的行相关的所有过滤操作特征;所述流向 特征是针对一个所述查询层次的所有数据流向特征。
[0015] 进一步地,所述统计各特征值的重复次数,选取重复次数符合预定条件的特征值 作为公共部分的步骤包括:
[0016] 统计已有的查询语句中各所述查询层次的所述特征值,得到各所述特征值的重复 次数作为统计结果;
[0017] 当加入新的查询语句时,将所述新的查询语句中各所述查询层次的所述特征值的 重复次数与所述统计结果中相应特征值的重复次数相加,用相加后的重复次数更新所述统 计结果;在所述统计结果中,选取重复次数符合预定条件的特征值作为公共部分的特征值。
[0018] 进一步地,所述重复次数符合预定条件的特征值是指所述重复次数最高的N个所 述特征值,或是指所述重复次数大于预定阈值的一个或多个所述特征值;其中N为正整数, 表示公共部分的特征值的预定个数。
[0019] 进一步地,所述分别根据各所述查询层次中查询对象的过滤特征和流向特征抽象 出各所述查询层次的特征向量的步骤包括:
[0020] 分别抽取出各所述查询层次中查询对象的过滤特征和流向特征;
[0021] 分别将各所述查询层次的过滤特征及流向特征的表达式格式化得到析取范式,对 所述析取范式进行逻辑关系的合并及数值计算,得到各所述查询层次的特征向量。
[0022] 进一步地,所述过滤特征包括WHERE、ORDER BY、LIMIT语句;
[0023] 所述流向特征包括 TABREF、JOIN、SUBQUERY、UNION_SUBQUERY 语句。
[0024] 本申请还提供了一种查询语句公共部分的提取装置,包括:
[0025] 划分单元,用于将查询语句划分为一个或多个查询层次,一个查询层次为进行一 次查询操作的查询子句;
[0026] 抽取单元,用于分别根据各所述查询层次中查询对象的过滤特征和流向特征抽象 出各所述查询层次的特征向量;
[0027] 计算单元,用于采用预定算法分别对各所述查询层次的特征向量进行计算,得到 各所述查询层次的特征值;
[0028] 筛选单元,用于统计各所述特征值的重复次数,选取重复次数符合预定条件的所 述特征值作为公共部分。
[0029] 进一步地,所述查询对象为查询语句中的行变换和源追溯操作;
[0030] 所述过滤特征是针对一个所述查询层次的行相关的所有过滤操作特征;所述流向 特征是针对一个所述查询层次的所有数据流向特征。
[0031] 进一步地,所述筛选单元统计各特征值的重复次数,选取重复次数符合预定条件 的特征值作为公共部分是指 :
[0032] 所述筛选单元统计已有的查询语句中各所述查询层次的所述特征值,得到各所述 特征值的重复次数作为统计结果;当加入新的查询语句时,将所述新的查询语句中各查询 层次的所述特征值的重复次数与所述统计结果中相应特征值的重复次数相加,用相加后的 重复次数更新所述统计结果;在所述统计结果中,选取重复次数符合预定条件的所述特征 值作为公共部分的特征值。
[0033] 进一步地,所述重复次数符合预定条件的特征值是指所述重复次数最高的N个所 述特征值,或是指所述重复次数大于一预定阈值的一个或多个所述特征值;其中N为正整 数,表示公共部分的特征值的预定个数。
[0034] 进一步地,所述抽取单元分别根据各所述查询层次中查询对象的过滤特征和流向 特征抽象出各所述查询层次的特征向量是指:
[0035] 所述抽取单元分别抽取出各所述查询层次中查询对象的过滤特征和流向特征;分 别将各所述查询层次的过滤特征及流向特征的表达式格式化得到析取范式,对所述析取范 式进行逻辑关系的合并及数值计算,得到各所述查询层次的特征向量。
[0036] 进一步地,所述过滤特征包括WHERE、ORDER BY、LIMIT语句;
[0037] 所述流向特征包括 TABREF、JOIN、SUBQUERY、UNION_SUBQUERY 语句。
[0038] 本申请的至少一个实施例基于SQL文本进行特征值的提取,从而可对查询语句, 包括新加入的查询语句中的公共部分进行有效检测;根据该实施例得到的公共部分,在进 行大批量查询时就可以有效避免在海量查询语句中公共部分的重复运行,从而最大限度提 升系统整体的查询性能。本申请的又一个实施例适合在不定时增长的海量查询语句环境下 使用,当加入新的查询语句时可以自动对各查询语句的统计结果进行更新,从而对公共部 分进行更新。当然,实施本申请的任一产品必不一定需要同时达到以上所述的所有优点。

【专利附图】

【附图说明】
[0039] 图1为实施例一查询语句公共部分的提取方法的流程示意图;
[0040] 图2为实施例一的例子的抽象语法树结构示意图;
[0041] 图3为实施例一的例子的基于SQL文本的结构特征示意图;
[0042] 图4为实施例一中针对查询对象的解析示意图。

【具体实施方式】
[0043] 下面将结合附图及实施例对本申请的技术方案进行更详细的说明。
[0044] 需要说明的是,如果不冲突,本申请实施例以及实施例中的各个特征可以相互结 合,均在本申请的保护范围之内。另外,虽然在流程图中示出了逻辑顺序,但是在某些情况 下,可以以不同于此处的顺序执行所示出或描述的步骤。
[0045] 在一个典型的配置中,进行查询语句公共部分提取的机器可包括多个处理器 (CPU)、一个或多个输入/输出接口、网络接口和内存。
[0046] 内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/ 或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质 的示例。
[0047] 计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法 或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。 计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、 动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电 可擦除可编程只读存储器(EEPROM),快闪记忆体或其他内存技术、只读光盘只读存储器 (CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁 性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中 的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据 信号和载波。
[0048] 实施例一、一种查询语句公共部分的提取方法,如图1所示,包括:
[0049] S101、将查询语句划分为一个或多个查询层次,一个查询层次为进行一次查询操 作的查询子句;
[0050] S102、分别根据各所述查询层次中查询对象的过滤特征和流向特征抽象出各所述 查询层次的特征向量;
[0051] S103、采用预定算法分别对各所述查询层次的特征向量进行计算,得到各所述查 询层次的特征值;
[0052] S104、统计各所述特征值的重复次数,选取重复次数符合预定条件的所述特征值 作为公共部分。本实施例中,针对查询作业的数据分布及语句结构的特点,可以但不限于基 于SQL文本划分查询层次;在一个SQL语句的抽象语法树AST中,一个QUERY或者SUBQUERY 所领起的一棵子树即为一个查询子句。本文中,当一个查询是另一个查询的条件时,称之为 子查询,其中外层查询称之为主查询,子查询优于主查询先执行,子查询的执行结果用于主 查询;子查询与主查询统称为查询子句。
[0053] 所述查询子句有确定的输入集Pin与输出集Pout,以及完成输入到 输出转换的操作指令集^operator三部分组成,称之为查询子句三元组,记为 £ = {Pin,Pout, Ooperator}。一个查询子句的输入来源,要么是另外一个查询子句,要么就 是来自表或者表分区,记为Pin={ £,Table, Partition}。本实施例中针对每个查询子句计 算一个特征值作为查询语句中公共部分的定义依据。
[0054] 每个查询子句都构成一个查询层次,一个SQL语句基于SQL文本的抽象语法树结 构可以划分为不同的查询层次。例如,对于下述SQL语句:
[0055] SELECT id
[0056] , SUM (value) AS cnt
[0057] FROM (
[0058] SELECT*
[0059] FROM src
[0060] ) a
[0061] WHERE id>10
[0062] GROUP BY id;
[0063] 其抽象语法树结构如图2所示,包含了两个查询层次,外层语句为主查询(即图2 中T0K_QUERY领起的子树),内层语句为子查询(即图2中T0K_SUBQUERY领起的子树),其中 子查询是主查询的一部分。
[0064] 本实施例中,所述查询对象可以但不限于为查询语句中的行变换和源追溯操作, 过滤特征可以但不限于为针对一个查询层次的所有行相关的过滤操作特征,流向特征可以 但不限于为针对一个查询层次的所有数据流向特征。每个查询层次都包含查询参数(Query Argument)和查询对象(Query Object)。其中查询参数(Query Argument)是对查询对象的 列抽取和列计算参数;查询对象定义为数据的过滤特征(Filter Signature)以及数据的流 向特征(Flow Signature),查询对象包含了数据操作的全部信息并对最终数据结果有直接 影响。例如下述SQL语句:
[0065] SELECT sum(value)
[0066] FROM src
[0067] GROUP BY KEY;
[0068] 其基于SQL文本的结构特征如图3所示,该SQL语句只有一层结构。其中 "sum(value)"为查询参数,表示对"value"列抽取并对结果进行聚合运算。"src group by key"为查询对象,其中数据源为直接物理表"src",并在此基础上进行"group by"的行计 算。查询对象包含了整个数据查询的所有信息,而查询参数只是在此信息上的进一步筛选 和加工。通过修改查询参数,可以获得查询对象的不同结果,因而查询参数在整个查询层次 的特征定义中并不重要。本实施例以查询对象为基础来进行公共部分特征的提取。
[0069] 本实施例中,可以通过定义过滤特征来保证行信息在数据流过程中的完整性。 本实施例的一个备选方案中,所述过滤特征包括:"WHERE"条件语句,主要用于删除行; "ORDER BY"语句,用于行排序;"LIMIT"语句,用于删除行。凡此种种,都作为数据流的过滤 特征信息。其它备选方案中,也可以根据需要定义其它语句作为过滤特征。
[0070] 流向特征则描述了数据的分支和来源结构。本实施例的一个备选方案中,所述流 向特征包括TABREF、J0IN、UNI0N、SUBQUERY语句。这些语句描述了数据的走向问题,这里使 用流向来进行定义。比如对于JOIN语句,其结果虽然是列的增加,但是体现了数据溯源到 这里结构上发生了分叉,可能来自不同的JOIN分支表。而对于UNION语句,其结果虽然表 现为行的增加,但也明显体现了数据溯源到这里结构上发生了分叉,来自不同的UNION分 支表。
[0071] 一个查询层次的特征向量是一个查询层次的过滤特征和流向特征等完整信息的 抽象表示。特征向量包含了一个查询层次中数据过滤操作及数据流向溯源的完整信息,其 可作为之后公共部分检测与识别的依据。
[0072] 本实施例的一种备选方案中,所述步骤S102具体可以包括:
[0073] 分别抽取出各所述查询层次中查询对象的过滤特征和流向特征;
[0074] 分别将各所述查询层次的过滤特征及流向特征的表达式格式化得到析取范式 DNF ;对DNF进行逻辑关系的合并和数值计算,得到各所述查询层次的特征向量。
[0075] 基于SQL文本的AST树结构将一个查询语句解析为查询参数和查询对象。针对查 询对象,如图4所示,抽取出其中的过滤特征和流向特征,其中的每一个特征的表达式都需 要进行格式化和优化。对表达式格式化的主要目的是将其表示为析取范式DNF ;对表达式 优化的主要目的是对其进行逻辑关系的合并和简单的数值计算。
[0076] 该备选方案中,所述流向特征包括TABREF、JOIN、SUBQUERY、UNI0N_SUBQUERY四类 语句。
[0077] 这四类分别表示数据来源于直接物理表、查询子句、UNION子句和JOIN子句。对 于其中涉及到的子句,递归地计算其特征值。
[0078] 更具体地,对于SUBQUERY,表示一个查询子句,只需针对其递归产生的特征向量计 算其特征值即可。
[0079] 对于UNION_SUBQUERY,表示是由多个子句UNION操作的结果,因此递归地计算每 个子句的特征值,并依顺序记录在数组中。
[0080] JOIN子句比较特殊,一个JOIN子句结构上是两表JOIN或是多表JOIN的结果。对 于一次JOIN操作,区分其左表、右表、JOIN操作类型以及J0IN_0N条件属性,并将诸多信息 进行整合,构成JOIN操作的结构特征。
[0081] 具体实现中,可以简单地使用JSON字符串将上述特定结构和顺序所构成的信息 作为该查询层次的流向特征的特征向量。
[0082] 本实施例的一种备选方案中,所述步骤S103中,可以但不限于使用MD5方式计算 特征向量的特征值,即将任意长度的〃字节串〃变换成一个128bit的大整数。
[0083] 本实施例的一种备选方案中,可使用MapReduce编程模型来实现当前查询语句集 合的特征值计算,并将结果持久化在表中,可以通过SQL语句的方式反馈给用户。
[0084] 以如下的查询语句为例:
[0085]

【权利要求】
1. 一种查询语句公共部分的提取方法,包括: 将查询语句划分为一个或多个查询层次,一个查询层次为进行一次查询操作的查询子 句; 分别根据各所述查询层次中查询对象的过滤特征和流向特征抽象出各所述查询层次 的特征向量; 采用预定算法分别对各所述查询层次的所述特征向量进行计算,得到各所述查询层次 的特征值; 统计各所述特征值的重复次数,选取重复次数符合预定条件的所述特征值作为公共部 分。
2. 如权利要求1所述的方法,其特征在于: 所述查询对象为查询语句中的行变换和源追溯操作; 所述过滤特征是针对一个所述查询层次的行相关的所有过滤操作特征;所述流向特征 是针对一个所述查询层次的所有数据流向特征。
3. 如权利要求1所述的方法,其特征在于,所述统计各特征值的重复次数,选取重复次 数符合预定条件的特征值作为公共部分的步骤包括: 统计已有的查询语句中各所述查询层次的所述特征值,得到各所述特征值的重复次数 作为统计结果; 当加入新的查询语句时,将所述新的查询语句中各所述查询层次的所述特征值的重复 次数与所述统计结果中相应特征值的重复次数相加,用相加后的重复次数更新所述统计结 果;在所述统计结果中,选取重复次数符合预定条件的特征值作为公共部分的特征值。
4. 如权利要求1到3中任一项所述的方法,其特征在于: 所述重复次数符合预定条件的特征值是指所述重复次数最高的N个所述特征值,或是 指所述重复次数大于预定阔值的一个或多个所述特征值;其中N为正整数,表示公共部分 的特征值的预定个数。
5. 如权利要求2所述的方法,其特征在于,所述分别根据各所述查询层次中查询对象 的过滤特征和流向特征抽象出各所述查询层次的特征向量的步骤包括: 分别抽取出各所述查询层次中查询对象的过滤特征和流向特征; 分别将各所述查询层次的过滤特征及流向特征的表达式格式化得到析取范式,对所述 析取范式进行逻辑关系的合并及数值计算,得到各所述查询层次的特征向量。
6. 如权利要求2所述的方法,其特征在于: 所述过滤特征包括W肥RE、0畑邸BY、LIM口语句; 所述流向特征包括TABREF、JOIN、SUBQ肥RY、UNION_SUBQ肥RY语句。
7. -种查询语句公共部分的提取装置,其特征在于,包括: 划分单元,用于将查询语句划分为一个或多个查询层次,一个查询层次为进行一次查 询操作的查询子句; 抽取单元,用于分别根据各所述查询层次中查询对象的过滤特征和流向特征抽象出各 所述查询层次的特征向量; 计算单元,用于采用预定算法分别对各所述查询层次的特征向量进行计算,得到各所 述查询层次的特征值; 筛选单元,用于统计各所述特征值的重复次数,选取重复次数符合预定条件的所述特 征值作为公共部分。
8. 如权利要求7所述的装置,其特征在于: 所述查询对象为查询语句中的行变换和源追溯操作; 所述过滤特征是针对一个所述查询层次的行相关的所有过滤操作特征;所述流向特征 是针对一个所述查询层次的所有数据流向特征。
9. 如权利要求7所述的装置,其特征在于,所述筛选单元统计各特征值的重复次数,选 取重复次数符合预定条件的特征值作为公共部分是指: 所述筛选单元统计已有的查询语句中各所述查询层次的所述特征值,得到各所述特征 值的重复次数作为统计结果;当加入新的查询语句时,将所述新的查询语句中各查询层次 的所述特征值的重复次数与所述统计结果中相应特征值的重复次数相加,用相加后的重复 次数更新所述统计结果;在所述统计结果中,选取重复次数符合预定条件的所述特征值作 为公共部分的特征值。
10. 如权利要求7所述的装置,其特征在于: 所述重复次数符合预定条件的特征值是指所述重复次数最高的N个所述特征值,或是 指所述重复次数大于一预定阔值的一个或多个所述特征值;其中N为正整数,表示公共部 分的特征值的预定个数。
11. 如权利要求8所述的装置,其特征在于,所述抽取单元分别根据各所述查询层次中 查询对象的过滤特征和流向特征抽象出各所述查询层次的特征向量是指: 所述抽取单元分别抽取出各所述查询层次中查询对象的过滤特征和流向特征;分别将 各所述查询层次的过滤特征及流向特征的表达式格式化得到析取范式,对所述析取范式进 行逻辑关系的合并及数值计算,得到各所述查询层次的特征向量。
12. 如权利要求8所述的装置,其特征在于: 所述过滤特征包括W肥RE、0畑邸BY、LIM口语句; 所述流向特征包括TABREF、JOIN、SUBQ肥RY、UNION_SUBQ肥RY语句。
【文档编号】G06F17/30GK104462095SQ201310418634
【公开日】2015年3月25日 申请日期:2013年9月13日 优先权日:2013年9月13日
【发明者】葛星, 徐常亮, 傅跃兵, 姚斌 申请人:阿里巴巴集团控股有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1