CN115443456A - 关系数据库中的迭代查询构造处理 - Google Patents
关系数据库中的迭代查询构造处理 Download PDFInfo
- Publication number
- CN115443456A CN115443456A CN202080100163.0A CN202080100163A CN115443456A CN 115443456 A CN115443456 A CN 115443456A CN 202080100163 A CN202080100163 A CN 202080100163A CN 115443456 A CN115443456 A CN 115443456A
- Authority
- CN
- China
- Prior art keywords
- iteration
- iterative
- termination condition
- rows
- satisfied
- 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/24—Querying
- G06F16/242—Query formulation
- G06F16/2425—Iterative querying; Query formulation based on the results of a preceding query
-
- 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
- G06F16/24534—Query rewriting; Transformation
- G06F16/24542—Plan optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3409—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment
-
- 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/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
- G06F16/24534—Query rewriting; Transformation
- G06F16/24542—Plan optimisation
- G06F16/24544—Join order optimisation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Computational Linguistics (AREA)
- Mathematical Physics (AREA)
- Operations Research (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
提供了一种用于在功能上重写关系数据库管理系统(RDBMS)的迭代查询的方法。该方法包括接收第一迭代查询,第一迭代查询具有定义第一主表的第一非迭代部分和基于第一主表的行中的值生成第一工作表的行中的值的第一迭代部分,确定第一迭代部分修改了第一工作表的所有行,以及重写第一迭代部分,包括:添加重命名操作,以将第一工作表重命名为新的第一主表,并将第一主表重命名为新的第一工作表;添加第一删除操作,以删除新的第一工作表的每一行;以及添加第一循环操作,以重复第一迭代部分直到满足第一终止条件。
Description
技术领域
本公开涉及用于关系数据库的迭代查询构造(construct)的技术和用于在关系数据库系统内处理迭代查询构造的方法。
背景技术
关系数据库管理系统(relational database management system,RDBMS)将数据存储为元组(行),这些元组(行)被分组为具有不同属性(列)的关系(表)。关系模型的主要目标是隐藏应如何处理数据的复杂性,而关注应将哪些数据返回给用户。为了实现这一点,绝大多数RDBMS使用结构化查询语言(Structured Query Language,SQL)访问RDBMS中的数据。RDBMS解析、分析和优化SQL语句以生成执行计划。最后,RDBMS执行该计划并将作为结果的元组返回给用户以回答查询。
发明内容
现在描述各种示例,以便以简化的形式介绍将在下面的具体实施方式中进一步描述的一些节选的构思。本发明内容不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。
关系数据库管理系统(RDBMS)通过更改RDBMS的功能重写过程来处理迭代查询,例如迭代公共表表达式(Common Table Expression,CTE)或迭代视图。功能重写在查询的第一迭代部分结束时添加重命名操作或更新操作。添加的重命名操作将主表使用的存储器与工作表使用的存储器交换,并在迭代部分修改工作表的所有行时使用。当只修改了工作表的某些行并将这些行传输到主表时,使用更新操作。在重命名或更新操作之后,功能重写还在迭代部分结束时添加操作,以便当不满足终止条件时有条件地分支回迭代部分中的第一操作,并且当满足终止条件时终止迭代部分。
根据第一方面,一种用于在功能上重写关系数据库管理系统(RDBMS)的迭代查询的方法在功能上重写第一查询,第一查询对由第一迭代查询的第一非迭代部分定义的第一主表和由第一查询的第一迭代部分定义的第一工作表进行操作。该查询的重写确定迭代部分修改了第一工作表的所有行,并添加重命名操作,以将第一工作表重命名为新的第一主表,并将第一主表重命名为新的第一工作表。功能重写还添加第一删除操作以删除新的第一工作表的每一行,并添加循环操作以重复迭代部分直到满足第一终止条件。
根据第一方面的第一实施方式,循环操作添加第一比较操作和第一分支操作作为第一迭代部分中的最后操作。第一比较操作测试第一终止条件,当不满足第一终止条件时,第一分支操作分支到第一迭代部分中的第一操作。当满足第一终止条件时,第一比较操作终止第一迭代部分。
根据第一方面的第二实施方式,第一迭代部分的重写包括在紧邻第一比较操作之前添加第一重命名操作和第一删除操作。
根据第一方面的第三实施方式,该方法在功能上重写第二迭代查询,第二迭代查询包括定义第二主表的第二非迭代部分和基于第二主表的行中的值生成第二工作表的行中的值的第二迭代部分。功能重写确定第二迭代部分修改的行少于第二工作表的所有行,并添加更新操作,以将第二主表中的对应行替换为来自第二工作表的经修改的行。该重写还添加第二删除操作以删除第二工作表的每个经修改的行。
根据第一方面的第四实施方式,功能重写添加第二比较操作和第二分支操作作为第二迭代部分中的最后操作。第二比较操作测试第二终止条件,当第二比较操作确定满足终止条件时,第二分支操作有条件地分支到第二迭代部分中的第一操作,并且当不满足终止条件时终止第二迭代部分。功能重写在紧邻第二比较操作之前添加更新操作和第二删除操作。
根据第一方面的第五实施方式,第一终止条件包括由第一迭代部分执行的迭代次数。功能重写初始化计数器,第一比较操作将计数器的值与迭代次数进行比较。
根据第一方面的第六实施方式,第一终止条件包括由第一迭代部分评估的表达式。第一比较操作评估表达式,以确定是否满足第一终止条件。
根据第一方面的第七实施方式,第一终止条件包括前一次迭代的来自第一主表的目标条目的第一值与当前迭代的来自第一主表的目标条目的第二值之间的差值测量。功能重写添加操作符,以将来自第一主表的目标条目的第一值存储为第一迭代部分的第一操作。第一比较操作确定来自第一主表的目标条目的第二值与存储的目标条目的第一值之间的差值是否小于差值测量,其中第一比较操作确定是否满足终止条件。
根据第二方面,一种用于在功能上重写关系数据库管理系统(RDBMS)的迭代查询的装置包括:存储器,包括程序指令;以及与存储器通信的一个或多个处理器,其中程序指令使一个或多个处理器在功能上重写第一查询,第一查询对由第一查询的第一非迭代部分定义的第一主表和由第一查询的第一迭代部分定义的第一工作表进行操作。程序指令进一步使一个或多个处理器确定第一迭代部分修改了第一工作表的所有行,并添加重命名操作,以将第一工作表重命名为新的第一主表,并将第一主表重命名为新的第一工作表。程序指令还使一个或多个处理器添加第一删除操作以删除新的第一工作表的每一行,并添加循环操作以重复迭代部分直到满足第一终止条件。
根据第二方面的第一实施方式,添加循环操作的程序指令添加第一比较操作和第一分支操作作为第一迭代部分中的最后操作。第一比较操作和第一分支操作被配置为使得一个或多个处理器测试第一终止条件,当满足第一终止条件时,分支到第一迭代部分中的第一操作,以及当满足第一终止条件时,终止第一迭代部分。
根据第二方面的第二实施方式,程序指令在紧邻第一比较操作之前添加第一重命名操作和第一删除操作。
根据第二方面的第三实施方式,操作还包括重写第二迭代查询,第二迭代查询具有定义第二主表的第二非迭代部分和基于第二主表的行中的值生成第二工作表的行中的值的第二迭代部分。程序指令进一步使一个或多个处理器确定第二迭代部分修改的行少于第二工作表的所有行。操作进一步包括向第一迭代部分添加更新操作,以将第二主表中的对应行替换为来自第二工作表的经修改的行,以及添加第二删除操作以删除第二工作表的每个经修改的行。
根据第二方面的第四实施方式,程序指令使一个或多个处理器添加第二比较操作和第二分支操作作为第二迭代部分中的最后操作。第二比较操作测试第二终止条件,当不满足终止条件时,第二分支操作分支到第二迭代部分中的第一操作,并且当第二比较操作确定满足终止条件时,终止第二迭代部分。程序指令使一个或多个处理器在紧邻第二比较操作之前添加更新操作和第二,并将删除操作添加为第二迭代部分中的第一操作。
根据第二方面的第五实施方式,第一终止条件包括由迭代部分执行的迭代次数,并且操作包括重写第一迭代部分以添加初始化计数器的操作。添加第一比较操作的操作包括添加将计数器的值与迭代次数进行比较的操作。
根据第二方面的第六实施方式,第一终止条件包括由迭代部分评估的表达式,添加第一比较操作的操作包括添加评估表达式以确定是否满足第一终止条件的操作。
根据第二方面的第七实施方式,第一终止条件包括前一次迭代的来自第一主表的目标条目的第一值与当前迭代的来自第一主表的目标条目的第二值之间的差值测量,并且操作进一步包括重写第一迭代部分以添加操作符,以将来自第一主表的目标条目的第一值存储为第一迭代部分的第一操作。添加比较操作的操作包括添加操作符,以确定来自第一主表的目标条目的第二值与存储的目标条目的第一值之间的差值是否小于差值测量,其中比较操作确定是否满足终止条件。
根据第三方面,一种计算机可读存储介质,其存储用于在功能上重写关系数据库管理系统(RDBMS)的迭代查询的计算机指令。当由一个或多个处理器执行时,计算机指令使得一个或多个处理器在功能上重写第一查询,第一查询对由第一查询的第一非迭代部分定义的第一主表和由第一查询的第一迭代部分定义的第一工作表进行操作。程序指令进一步使一个或多个处理器确定第一迭代部分修改了第一工作表的所有行,并添加重命名操作,以将第一工作表重命名为新的第一主表,并将第一主表重命名为新的第一工作表。程序指令还使一个或多个处理器添加第一删除操作以删除新的第一工作表的每一行,并添加循环操作以重复迭代部分直到满足第一终止条件。
根据第三方面的第一实施方式,循环操作添加第一比较操作和第一分支操作作为第一迭代部分中的最后操作。第一比较操作和第一分支操作被配置为使得一个或多个处理器测试第一终止条件,当满足第一终止条件时,分支到第一迭代部分中的第一操作,以及当满足第一终止条件时,终止第一迭代部分。
根据第三方面的第二实施方式,操作进一步包括重写第二迭代查询,第二迭代查询具有定义第二主表的第二非迭代部分和基于第二主表的行中的值生成第二工作表的行中的值的第二迭代部分。程序指令进一步使一个或多个处理器确定第二迭代部分修改的行少于第二工作表的所有行。操作进一步包括向第一迭代部分添加更新操作,以将第二主表中的对应行替换为第二工作表的经修改的行,以及添加第二删除操作以删除第二工作表的每个经修改的行。
根据第三方面的第三实施方式,操作进一步包括添加第二比较操作和第二分支操作作为第二迭代部分中的最后操作。第二比较操作被配置为使得一个或多个处理器测试第二终止条件,第二分支操作被配置为当第二比较操作确定不满足终止条件时,使得一个或多个处理器有条件地分支到第二迭代部分中的第一操作,并且当第二个比较操作确定满足终止条件时,终止第二迭代部分。第二迭代部分的重写操作包括在紧邻第二比较操作之前添加更新操作和第二删除操作。
根据第三方面的第四实施方式,第一终止条件包括由第一迭代部分执行的迭代次数,并且操作进一步包括向第一非迭代部分添加操作以初始化计数器。添加第一比较操作的操作包括添加将计数器的值与迭代次数进行比较的操作。
根据第三方面的第五实施方式,第一终止条件包括由第一迭代部分评估的表达式,添加第一比较操作的操作包括添加评估表达式以确定是否满足第一终止条件的操作。
根据第三方面的第六实施方式,第一终止条件包括前一次迭代的来自第一主表的目标条目的第一值与当前迭代的来自第一主表的目标条目的第二值之间的差值测量,重写第一迭代部分的操作进一步包括添加操作符,以将来自第一主表的目标条目的第一值存储为第一迭代部分的第一操作。添加第一比较操作的操作包括添加操作符,以确定来自第一主表的目标条目的第二值与存储的目标条目的第一值之间的差值是否小于差值测量,其中第一比较操作确定是否满足终止条件。
上述示例中的任何一个可以与上述其他示例中的任何一个或多个组合,以在本公开的范围内创建新的实施例。
附图说明
在不一定按比例绘制的附图中,相似的数字可以在不同的视图中描述相似的组件。附图通过示例而非限制的方式概括说明本文档中讨论的各种实施例。
图1是示出根据示例实施例的迭代数据库构造的数据流的示图。
图2是根据示例实施例的大规模并行处理数据库(MPPDB)的框图。
图3是示出根据示例实施例的协调器模块的细节的框图。
图4是示出根据示例实施例的页面排序查询的查询树的树图。
图5是示出根据示例实施例在功能上重写的页面排序查询的查询树的树图。
图6是示出根据示例实施例的在功能上重写的迭代数据库构造的操作的流程图。
图7是根据示例实施例的处理系统的框图。
具体实施方式
首先应该理解,尽管下面提供了一个或多个实施例的说明性实施方式,但关于图1-7描述的所公开的系统、方法和/或装置可以使用任何数量的技术来实现,无论当前已知还是尚未存在。本公开不应以任何方式限制于以下所示的说明性实施方式、附图和技术(包括本文所示和描述的示例性设计和实施方式),而是可以在所附权利要求及其全部等效范围内进行修改。
在下面的描述中,参考了构成本文一部分的附图,其中以说明的方式示出了可以实践的具体实施例。对这些实施例进行了足够详细的描述,以使本领域技术人员能够实践本发明主题,并且应当理解,可以使用其他实施例,并且可以在不脱离本发明范围的情况下进行结构、逻辑和电气修改。因此,下面对示例实施例的描述不应被理解为限制意义,本公开的范围由所附权利要求书定义。
虽然SQL已经使用了几十年,并且是一种行业标准,但它仍然有一些局限性。例如,SQL查询不能有效地表达迭代计算。这些计算通常用于算法中,其中一次迭代接收来自前一次迭代的输出数据作为输入数据。使用迭代处理的查询通常在每次迭代中使用不同的数据,或者尝试通过多次执行同一查询来估计特定值。两个具有代表性的例子是与图相关的问题:计算两点之间最短路径的单源最短路径(Single Source Shortest Path)查询和查找图中最重要节点的页面排序(PageRank)查询。当前的SQL标准支持通过视图或CTE进行递归处理,但不能适应纯粹的迭代处理。主要限制是假设递归查询需要到达一个固定点:满足递归关系的一组特定行。因此,在查询的递归部分不允许使用对一组值执行计算并返回单值结果的聚合函数。递归查询的终止条件是隐含的,元组只能附加到结果中,而不能更新。目前,希望执行迭代查询的用户从RDBMS切换到支持自定义的基于顶点的API的专用图形处理引擎或可以更有效地优化递归查询的数据日志(Datalog)系统。
下面的示例描述了大规模并行处理数据库(massively parallel processingdatabase,MPPDB)系统中迭代CTE的本机(native)实现。本机实现提供了优于MPPDB外部实现的优势。特别是,本机实现确保系统处理原子性、一致性、隔离性和耐久性(Atomiticity,Consistency,Isolation,and Durability,ACID)属性,而无需创建长事务。此外,本机实现允许工作负载管理器以与其他本机数据库操作和查询相同的方式调度迭代CTE,因为它生成了可以作为一个处理单元进行检查的单个执行计划。此外,本机实现避免了外部实现的数据定义语言(Data Definition Language,DDL)和DML操作带来的不必要开销。最后,规划器可以将现有的查询优化和成本估计应用于整个迭代CTE,而不仅仅是中间件从CTE派生的单独SQL语句。
自1999年以来,CTE已成为SQL标准的一部分,并用于SQL编程以简化复杂的查询。通常,CTE是用户可以在SQL语句内引用的临时命名的结果集。CTE还支持递归评估,使用户能够表达分层查询或路径遍历算法。
最近的研究工作探索了扩展递归CTE以允许聚合函数的可能性,并提出了可以适应对关系数据的迭代查询的新的SQL结构和操作符。一种修改提出了生成存储过程并在RDBMS中执行它们的实施方式,而另一种修改实现了用户和目标数据库引擎之间的中间件。然而,这两个提议的框架都涉及在SQL系统之外实现的外部解决方案。
虽然外部方法是灵活的,因为用户可以选择自己喜欢的数据库引擎,避免数据转换和加载步骤,但它有一些局限性。首先,外部解决方案很难为长时间的查询执行维护ACID属性。此外,由于这些构造是SQL外部的,因此在输入到RDBMS的工作负载管理器之前,它们会被转换为一系列基本SQL操作。然后,工作负载管理器将这些基本操作中的每一个都视为自己的查询。因此,如果工作负载管理器将查询作为一个整体进行处理,RDBMS无法达到可能可用的效率。此外,发送到RDBMS的基本操作有额外的开销。例如,中间结果通常被明确定义为施加元数据开销的临时表。外部方法中用于初始化和更新这些中间结果的数据操纵语言(Data Manipulation Language,DML)也可能会增加处理开销,因为它可能使用与这些操作相关的锁定和其他事务,而这些事务不会在内部实现中使用。最后,这些基于外部的扩展无法实现许多系统特定的优化。
以下示例描述了解决外部实现的这些问题和限制的解决方案。示例实施例通过扩展数据库内核的所有组件,包括解析器、重写子系统、规划器和执行引擎,扩展RDBMS以支持迭代CTE。尽管下面描述的实施例是在SQL中实现的迭代CTE,但可以设想,它们可以在其他迭代数据库构造(例如迭代视图)中实现,和/或可以用SQL以外的其他查询语言实现。一个实施例使用MPPDB作为RDBMS。这些示例使用MPPDB(其是一种在线分析处理(OnlineAnalytica1 Processing,OLAP)解决方案)而不是传统的RDBMS,因为迭代查询通常用于特别适合在MPPDB中实现的分析环境。然而,可以设想,以下描述的实施例可以在传统RDBMS中实现。
示例MPPDB解析器扩展实现了迭代CTE的语法,并生成了类似于常规和递归CTE的解析树的解析树。示例实施例将迭代CTE规范转换为逻辑查询树,其仍然是解析树。这种转换是通过新的重写规则来完成的,该规则将迭代CTE转换为现有的RDBMS操作符,如扫描、连接和聚合。示例更新逻辑实现可以包括从一个临时表扫描到另一个临时表。为了实现迭代逻辑,所描述的示例添加了新的简单操作符,该操作符允许有条件地重定向到执行计划中的前一个步骤。查询规划器与其他查询一样优化经重写的查询。
Sofoklis Floratos等人在题为“SQLoop:数据管理中的高性能迭代处理(HighPerformance Iterative Processing in Data Management)”(2018年IEEE第38届分布式计算系统国际会议(International Conference on Distributed Computing Systems,ICDCS),IEEE,1039-1051)的论文中描述了与示例实施例类似的SQL扩展。虽然此扩展的语法相同,但该论文中描述的系统明显不同,因为它是在SQL外部实现的,并且具有上述中间件方法的缺点。
以下材料描述了作为迭代CTE示例的页面排序(Page Rank,PR)查询的实施方式。对于该计算,图的所有边都存储在名为“边(Edges)”的关系中,该关系具有三个属性:源(source,SRC)、目的地(destination,DST)和权重。该关系中的每个元组都可以映射到图,作为从节点SRC到节点DST的边,并且具有指定的权重数。由于递归查询不允许在递归部分进行聚合操作,因此递归视图和递归CTE不能用于表示通用迭代计算,例如PR查询。所描述的迭代CTE的示例实施例避免了这个问题,因为它们实现了由用户明确定义的终止条件。因此,迭代CTE可以支持更通用的迭代计算,并且可以在查询的迭代部分使用聚合操作。
在描述迭代CTE之前,使用自定义的基于SQL的应用来描述PR查询的实施方式是有用的,如表1所示。
表1
此PR查询包括多个SQL语句。第1-5行创建主表和工作表。第7-11行执行非迭代部分,第14-34行执行一次查询的迭代部分。然后,需要通过将第14-34行复制N次,再次执行迭代部分N次迭代。迭代计算的一部分是第29-34行的更新页面排序结果。如果N已知,则该解决方案有效,但情况并非总是如此。
示例实施例通过允许SQL程序员描述迭代计算并明确定义其终止条件来实现解决上述问题的迭代CTE。示例CTE,R包括非迭代部分R0和迭代部分RI。与递归CTE一样,R0只执行一次,而RI执行多次。这两种SQL结构之间的主要区别在于迭代CTE更新工作表,而不是添加新表。此外,当满足终止条件TC时,查询终止。这为用户提供了定义显式终止条件的灵活性,并消除了对定点语义的假设。因此,聚合函数可以用于RI。迭代CTE的一般形式为:
WITH ITERATIVE R AS(R0 ITERATE RI UNTIL TC)QF
实现关系数据库管理系统(RDBMS)的迭代查询,通过在查询的迭代部分结束时添加重命名操作或更新(Update)操作来修改RDBMS的功能重写过程。重命名操作将主表使用的存储器与工作表使用的存储器交换,并在迭代部分修改了工作表的所有行时使用。当迭代部分修改的行少于工作表的所有行,并将这些行传输到主表时,使用更新操作。功能重写还添加操作以在不满足终止条件时再次执行迭代部分并在满足终止条件时终止迭代部分。
图1示出了一般形式的迭代CTE的示例执行流程100。开始时,迭代CTE执行R0并将结果存储到主CTE表102。然后,对于CTE的每次迭代,流程100:a)执行RI并将结果存储在工作表104中,b)使用工作表中存在的行更新主CTE表102,和c)确定是否满足TC,以确定是否执行另一次迭代。流程100使用唯一的行键/标识符来确保正确更新主CTE表102。如果用户指定了主键,则流程100使用它来执行更新,否则流程100创建唯一的行ID。此外,如果用户定义了CTE,其中迭代部分导致工作表104具有单行的重复项,则流程100生成运行时错误(未示出)。生成此错误消息是因为流程100可能无法处理主CTE表102中同一行的两次(或更多)更新。在这种实例中,用户可以重写查询以重新定义迭代部分,并明确指定如何使用聚合操作、分组(Group By)操作或其他SQL操作来解析重复项。在迭代部分的最后一次迭代RI完成后(例如,当满足终止条件TC时),系统执行查询QF,并将最终结果返回给客户端计算机。
表2示出了针对所有页面实现PR的示例迭代CTE,PageRank(页面排序)。
表2
在表2所示的示例中,第2-4行对应于非迭代部分R0,第5-17行对应于迭代部分RI。第17行对应于终止条件TC,它在10次迭代后终止迭代部分RI。PageRank是主CTE表102,IncomingEdges(输入边)是工作表104。在最后一次迭代后,结果以元组(节点,排序)的形式返回,如第18行所示。
表3和图3-6描述了在MPPDB上下文中迭代CTE的本机实现。MPPDB内部的示例实现应用与外部解决方案使用的流类似的执行流,但不使用添加创建(Create)、插入(Insert)和更新(Update)的DDL和DML操作。插入逻辑是通过中间结果的物化来实现的。中间结果的物化是许多RDBMS中常见的执行操作符,用于存储中间连接和聚合操作的结果。从中间表更新主表也可以通过适当选择新旧值的另一种物化来实现。
表3示出了表2中所示的PageRank CTE的逻辑计划的抽象描述。规划器使用此逻辑计划为执行引擎生成实际物理计划,类似于其他更传统的SQL结构。
表3
在该逻辑计划中,步骤1将非迭代部分插入称为PageRank的临时结果中。这可以通过使用常规WITH SQL对象来完成。步骤2将计数器初始化为零。步骤3执行迭代部分,该部分使用来自相邻页面的排序和来自边表(edges table)的连接来计算页面排序。注意,主表PageRank既是输入表又是输出表。因此,表3中所示的实现使用中间表Intermediate_Results来保存值。如果查询更新了整个数据集,那么示例实现的步骤4将Intermediate_Results表重命名为PageRank,即主表的名称,以避免不必要的数据移动。重命名(Rename)操作是添加到MPPDB以实现迭代CTE新操作。步骤5将计数器加1。步骤2和5是添加到执行引擎以实现循环功能的新语句。这些语句由系统的其他部分支持。在MPPDB中支持通用迭代处理涉及对解析器、重写子系统、规划器和执行引擎的扩展。
图2示出了处理客户端202的SQL查询的示例MPPDB 200。如图所示,MPPDB 200包括通信耦合到客户端202和多个数据节点206A-206N的协调器204。尽管图2示出了三个数据节点,但MPPDB通常包括更多的数据节点。协调器204(下面参考图3描述了其示例)可以是配置为代表客户端202处理和执行查询的任何设备。执行此类查询可以涉及开发包括一个或多个本地计划段的执行计划,计划段概述了数据节点206A-206N的处理流。数据节点206A-206N可以是对MPPDB 200的分区具有访问权(例如,独占访问权)的任何组件。数据节点206A-206N可以被配置为优化执行计划和/或执行计划的相应段,然后使用其数据存储212A-212N中的数据执行相应的计划段以产生查询结果。
数据节点206A、206B和206N包括各自的中央处理器(central processing unit,CPU)210A、210B和210N。每个CPU耦合到各自的存储器208A、208B和208N。数据节点206A-206N还包括数据存储212A、212B和212N,其保存由各个数据节点206A、206B和206N处理的查询的相应部分所访问的数据。CPU 210A、210B和210N可以在各自的存储器208A、208B和208N中存储用于处理本地计划段的指令,以使用分配给各个CPU 210A、210B和210N的数据存储212A、212B和212N的段中的数据来实现查询。这些指令可以进一步重写和/或优化本地计划段,例如,响应于每个数据存储212A、212B和212N中的表的基数。
图3示出了示例协调器204,其阐述了系统中SQL查询的整体处理流程。如图2所示,协调器204从客户端202接收查询,并向客户端202提供查询执行结果。示例协调器204包括解析器302、规划器模块304和执行引擎316。规划器模块304依次包括重写模块306以及连接和聚合规划器314。重写模块306实现由重写模块306的不同部分分别实现的三种类型的重写操作。这些部分包括功能重写部分308、基于规则的优化部分310和基于成本的优化部分312。执行引擎316使用数据存储212A、212B和212N中的数据执行规划器模块304提供的物理计划。
解析器302处理SQL查询的语法、语义和访问权限。解析器302以解析树格式输出逻辑查询树,并将逻辑查询树传递给规划器模块304的重写模块306。重写模块306对查询树执行功能重写和优化重写。功能重写部分308将执行引擎不支持的一些操作符转换为其他低级操作符。常见的示例是视图引用扩展(将视图定义插入查询树)和将复杂的OLAP函数(如Cube(多维数据集)或Rollup(汇总)转换为简单聚合查询的联合。在下面描述的示例中,功能重写部分308添加操作符以实现迭代CTE的终止和循环操作。重写模块306的基于规则的优化部分310和基于成本的优化部分312对由功能重写部分308生成的修改后的逻辑计划进行操作,以生成优化的查询计划树。优化重写的示例包括谓词下推(Predicate PushDown)、联合简化(Union simplification)和连接消除(Join elimination)等。
连接和聚合规划器314将重写模块306提供的逻辑树转换为包括连接排序和实现、聚合方法和数据混洗决策的物理树。连接和聚合规划器314使用LLVM优化生成执行计划,并将生成的执行计划传递给执行引擎316。LLVM优化将连接和聚合规划器314提供的查询计划转换为与体系结构无关的中间代码,优化执行引擎316的中间代码,并编译优化的代码以生成执行引擎316的执行计划。缩写“LLVM”最初代表低级虚拟机(Low-Level VirtualMachine)。然而,LLVM已经发展到这样的程度:这一含义不再合适。
在查询处理的最后一步中,执行引擎316执行实际查询执行,并将结果返回给客户端202。示例实施例扩展了MPPDB的组件以处理迭代CTE。然而,这些修改不会对代码库引入重大更改,从而使修改后的MPPDB与现有SQL程序向后兼容。
改变解析器302以适应由迭代CTE引入的新语法,生成新的解析树节点(其包括执行查询的迭代和非迭代部分的信息),并提取有关终止条件的信息(例如,循环类型(Type)和任何待针对终止条件进行评估的表达式)。解析器302执行与S.Lloratos等人在上述参考文章中的解析器类似的操作。
修改重写模块306的功能重写部分308以添加重写规则,将迭代CTE转换为较低级别的操作。该规则转换类似于参照表2的步骤2、4、5和6所描述的功能。下面将更详细地描述这些修改。对重写模块306的基于规则的优化部分310和基于成本的优化部分312的更改实现了基于规则和成本的优化,这些优化可以在无需进一步修改由重写模块306的功能重写部分308生成的逻辑查询树的情况下应用。
连接和聚合规划器314具有较小修改以识别适应循环和重命名功能的两个执行操作符(如下所述)并将其传递给物理计划。执行引擎316被扩展以实现这些执行操作符。这些修改相对较小,不会显著影响执行引擎316,因为重写的查询计划基于现有的RDBMS操作符。
重写模块306的功能重写部分308将解析器302生成的解析树扩展到涵盖非迭代部分、迭代部分和循环逻辑的一系列SQL操作符。循环逻辑重复查询的迭代部分,直到满足终止条件TC。
图4示出了由解析器302生成的表2中迭代CTE PageRank查询的解析树400。图4未显示完整详细的树,而是关注实现操作符的主要节点。解析树400的根是为迭代CTEPageRank选择行的选择(Select)操作402。解析树400的节点404将CTE标记为“迭代”以将其与常规和递归CTE区分开。解析器302为非迭代部分、迭代部分和循环部分生成单独的子树,包括终止条件。非迭代子树的根是两个选择操作408和412的联合(Union)操作406。选择操作408从边表410提取SRC节点,选择操作412从边表410选择DST节点。迭代子树的根节点是分组(Group By)操作416。分组操作416对第一左外连接(Left Outer Join)操作418的结果进行操作,第一左外连接操作418将PageRank(页面排序)表420与第二左外连接操作422的结果连接起来,第二左外连接操作422将PageRank表420和边表410的SRC节点连接起来。循环子树428描述了基于表2第17行中“UNTIL 10ITERATIONS(直到10次迭代)”的终止条件。对该语句进行解析以指示循环类型为“元数据”,其中条件(condition,CON)为“迭代”,迭代次数为10。
重写模块306的功能重写部分308将解析树400扩展到一系列常规SQL操作,这些操作实现了表2和图4所示的迭代CTE。图5示出了重写的结果,即逻辑计划树500,其表示在处理图4所示的解析树400之后由MPPDB 200的规划器模块304生成的逻辑查询计划。注意,图5所示的逻辑计划是简化版本,用于演示目的。该重写将图4所示的节点404转换为两个物化操作502和504以及重命名操作506。第一物化操作502物化PageRank表420,并实现图4所示解析树400的非迭代子树,其初始化PageRank表以包括边表410的SRC和DST节点。该子树包括联合操作406,以及选择操作408和412,其从边表410中选择SRC和DST节点,如上文参考图4所述。第二物化操作504物化中间表,并包括分组操作416和左外连接操作418和422,其对PageRank表420和边表410进行操作,如上文参考图4所述。扩展节点404的最后操作是重命名操作506,该操作将中间表重命名为主PageRank表420。如下所述,对于不更新整个数据集的查询,该步骤可以由更新操作代替,该更新操作使用用作唯一行标识符的列从PageRank表420中选择旧值并从中间表中选择新值。
逻辑计划树500的节点508实现迭代CTE的循环操作。该实现的一个要素是确定何时满足终止条件。如上所述,终止条件可以基于数据、元数据或增量值。基于数据的终止条件包括可以使用SQL实现的表达式。例如,MPPDB可以在更新主CTE表或将中间表重命名为主CTE表后,确定主CTE表中满足表达式的元组数量,并基于该确定终止循环。基于元数据的终止可以基于应用于主CTE表的迭代次数或更新次数,直到并包括最近的迭代。增量(Delta)的循环类型可以基于增量值(例如,来自当前迭代的值与来自前一次迭代的值相比较)。增量类型的循环基于使用用户指定的SQL表达式将当前迭代的结果与前一次迭代的结果进行比较来终止查询。
功能重写中迭代部分的实现取决于图4和图5所示的解析器变量Type(类型)所标识的循环类型。Type变量的值通过新的迭代CTE对象传递给规划器模块304。实现终止逻辑有两个选项。首先,MPPDB中已经存在基础结构,以指示执行流程中给定查询计划节点的下一个操作符。第一选项将此基础结构扩展为有条件的,以便可以从循环开始或查询结束时选择下一个操作符。该选项不会引入新的操作符,但可能会使一般情况下的执行流程复杂化,因为逻辑的执行将被修改为始终检查下一个操作符是否是有条件的。
实现迭代CTE的一种干扰较小的方法是引入显式处理条件执行流程的循环操作符。当重写模块306的功能重写部分308确定解析树是迭代CTE时,它在逻辑计划树中添加循环操作符,如图5的节点508所示。接下来,重写模块306的功能重写部分308从解析树提供指定循环类型所使用的信息。新操作符捕获三条信息:1)循环类型(元数据、数据或增量),2)迭代选项中的迭代次数或更新选项中的表达式更新,并带有区分这两个选项的指示符,以及3)用于数据和增量循环类型的SQL表达式。如S.Floratos等人在上述参考文章中所述,新操作符还捕获了额外的指示符,该指示符容纳任意关键字。对于图5中所示的PageRank CTE计划树,查询明确使用10次迭代,因此终止条件基于元数据。逻辑查询计划树中的循环操作符填充有<<类型:元数据,N:10,表达式:无>>,如节点508所示。
重写模块306的功能重写部分308实现的最后一次更改是添加操作,以在执行非迭代部分之后立即初始化循环操作符,并在每次迭代结束时更新循环操作符。对于PageRank迭代CTE的简单情况,MPPDB在执行RI之前启动新计数器(表3中的步骤ID 2),然后在检查是否需要另一次迭代(表3的步骤ID 6)之前递增计数器(表3中的步骤ID 5)。
图6示出了MPPDB的规划器使用的通用算法600,其阐述了迭代CTE的功能重写。该算法不限于PR计算,并为使用迭代CTE实现的任何查询提供了重写计划树的框架。操作602将CTE的非迭代部分R0物化到主表中。操作604初始化循环操作符。根据循环操作符的类型,此操作具有不同的功能。当类型为“元数据”时,操作604初始化计数器以计算迭代次数。当类型为“数据”时,操作604使用待评估的函数初始化循环操作符,以确定是否满足终止条件TC。
操作606从工作表的所有行中删除数据,操作608将工作表物化为RI,即CTE的迭代部分。此操作可以包括SQL删除操作。操作610在每次迭代结束时执行,并确定如何发生对主表的更新。如上所述,当操作608更新整个工作表时,通过切换主表和临时表来更新主表,这可以通过在临时表和主表之间交换存储空间(例如,内存和磁盘存储)的操作612来实现。此操作有效地将临时表重命名为主表,并将主表重命名为临时表。操作612还可以从工作表的行中删除任何数据。在这种实例中,在将数据第一次物化到工作表中之前,可以省略操作606或只执行一次操作606。可替代地,当操作610确定操作608仅修改工作表的行的子集时,操作614执行多个更新操作以将行从工作表复制到主表,其中复制的行由工作表键标识。例如,当操作610检测到RI中的WHERE子句时,操作610确定操作608仅更改工作表的子集。
在操作612或操作614之后,操作616使用来自当前迭代的数据更新循环操作符。与操作604一样,操作616基于循环的类型执行不同的功能。当类型为元数据时,操作616将计数器递增;当类型为数据时,操作616评估函数;当类型为增量时,操作616根据用户指定的SQL表达式,基于当前迭代的结果与上一次迭代的结果之间的差来更新循环操作符。
当循环类型为增量时,上一次迭代的结果可以存储在增量表中。根据上一次迭代执行的是操作612还是操作614,在增量表中存储先前结果的方式有所不同。当上一次迭代的操作612交换了主表和工作表时,当前迭代在当前迭代开始或上一次迭代结束时将重命名的主表存储在增量表中。当上一次迭代的操作614从工作表更新主表时,主表和工作表的内容在当前迭代的操作606之前是相同的。在这种实例中,算法600将工作表重命名为增量表,并且操作606生成新的空工作表。可替代地,在操作612中将主表与工作表交换或在操作614中从工作表更新主表之前,当前迭代可以比较主表和工作表以更新循环操作符(操作616)。这避免了存储单独的增量表。
在操作616之后,操作618确定是否满足终止条件TC。当不满足TC时,操作618分支到操作606以开始下一次迭代。当满足TC时,操作620返回迭代CTE的结果QF。作为图6所示方法的替代方法,循环操作616、618和620可以移动到操作606之前,以便操作616使用来自前一次迭代的数据更新循环操作符,并且当不满足TC时,继续操作606。在该替代方法中,在操作612和614之后插入到移动后的操作616的无条件分支操作(未示出)。
图7是根据实施例的计算设备700的框图。类似组件可用于本文所述的示例计算设备中。例如,客户端、服务器和网络资源可以各自使用图7所示组件的不同集合和/或图7中未示出的计算组件。可以使用类似于计算设备700的计算设备实现图2所示的客户端202、协调器204和数据节点206A-206N;图3所示的协调器;实现图6所示的方法;并处理表2和表3中描述的查询,以生成图4和图5所示的流树。
一个示例计算设备700可以包括通过总线701通信耦合的处理单元(例如,一个或多个处理器和/或CPU)702、存储器703、可移动存储710和不可移动存储712。尽管各种数据存储元件被示为计算设备700的一部分,但可移动存储710还可以或可替代地包括数据存储212A-212N之一中的存储器,如图2所示,通过高速数据接口(未示出)耦合到处理单元702。
存储器703可以包括易失性存储器714和非易失性存储器708。存储器703还可以包括应用718,例如上面参考图2和3所述的协调器204。计算设备700可以包括或访问包括各种计算机可读介质(例如易失性存储器714和非易失性存储器708、可移动存储710和不可移动存储712)的计算环境。计算机存储包括随机存取存储器(random access memory,RAM)、只读存储器(read only memory,ROM)、可擦除可编程只读存储器(erasable programmableread-only memory,EPROM)、电可擦除可编程只读存储器(electrically erasableprogrammable read-only memory,EEPROM)、闪存或其他存储技术、只读光盘存储器(compact disc read-only memory,CD-ROM)、数字多功能磁盘(digital versatile disk,DVD)或其他光盘存储设备、盒式磁带、磁带、磁盘存储器或其他磁存储设备,或任何其他能够存储计算机可读指令的介质。
计算设备700可以包括或可以访问包括输入接口706、输出接口704和通信接口716的计算环境。输出接口704可以提供到显示设备例如触摸屏(其也可以用作输入设备)的接口。输入接口706可以向触摸屏、触摸板、鼠标、键盘、摄像头、一个或多个设备专用按钮、集成在服务器计算设备700内或通过有线或无线数据连接耦合到服务器计算设备700的一个或多个传感器,和/或其他输入设备中的一个或多个提供接口。计算设备700可以使用通信接口716在网络环境中操作。通信接口可以包括到局域网(1oca1 area network,LAN)、广域网(wide area network,WAN)、蜂窝网络、WLAN网络和/或蓝牙网络的一个或多个接口。
在示例实施例中,计算设备700包括:查询接收模块,接收第一迭代查询,该第一迭代查询具有定义第一主表的第一非迭代部分和基于第一主表的行中的值生成第一工作表的行中的值的第一迭代部分;修改确定模块,确定第一迭代部分修改了第一工作表的所有行;重命名模块,添加重命名操作,以将第一工作表重命名为第一主表的名称以产生新的第一主表,并将第一主表重命名为第一工作表的名称以产生新的第一工作表;删除模块,添加第一删除操作以删除新的第一工作表的每一行;以及循环模块,添加第一循环操作以重复第一迭代部分直到满足第一终止条件。在一些实施例中,计算设备700可以包括用于执行实施例中描述的步骤的任何一个或组合的其他或附加模块。此外,如任何附图所示或任何权利要求中所述,该方法的任何附加或替代实施例或方面也预期包括类似模块。
本文所述的任何一个或多个模块可以使用硬件(例如,机器的处理器、专用集成电路(application-specific integrated circuit,ASIC)、现场可编程门阵列(field-programmable gate array,FPGA)或其任何适当组合)实现。此外,这些模块中的任何两个或多个可以组合成单个模块,并且本文针对单个模块描述的功能可以在多个模块中细分。此外,根据各种示例实施例,本文描述的在单个机器、数据库或设备内实现的模块可以分布在多个机器、数据库或设备上。如本文所述,模块可以包括设计用于执行一个或多个功能的硬件或软件中的一者或两者(例如,本文所述的与提供安全可靠的数据访问相关的一个或多个功能)。
尽管上面详细描述了一些实施例,但是其他修改也是可能的。例如,图中描述的逻辑流不需要所示的特定顺序或按照顺序来实现期望的结果。可以从所描述的流程中提供或消除其他步骤,并且可以将其他组件添加到所描述的系统中或从所描述的系统中移除。其他实施例可以在以下权利要求的范围内。
应当进一步理解,包括一个或多个计算机可执行指令的软件可以安装在与本公开一致的一个或多个计算设备中并随其一起提供,这些计算机可执行指令有助于上述参考本公开的任何一个或所有步骤的处理和操作。可替代地,可以获取软件并将其加载到一个或多个计算设备中,包括通过物理介质或分发系统获取软件,包括例如从软件创建者拥有的服务器或从软件创建者不拥有但使用的服务器获取软件。例如,软件可以存储在服务器上,以便在互联网上分发。
此外,本领域技术人员将理解,本公开不限于其应用到说明书中所述或附图所示出的构造和组件布置的细节。本文中的实施例能够采用其他实施例,并且能够以各种方式实践或执行。此外,应当理解,本文使用的措辞和术语是出于描述的目的,不应被视为限制性的。本文使用的“包括”、“包含”或“具有”及其变体意在涵盖其后列出的项目及其等同物以及附加项目。除非另有限制,本文中的术语“连接”、“耦合”和“安装”及其变体被广义使用,并且包括直接和间接连接、耦合和安装。此外,术语“连接”和“耦合”及其变体不限于物理或机械连接或耦合。
根据所示实施例使用的说明性设备、系统和方法的组件可以至少部分地在数字电子电路或计算机硬件、固件、软件或其组合中实现。例如,这些组件可以实现为计算机程序产品,例如有形地体现在信息载体或机器可读存储设备中的计算机程序、程序代码或计算机指令,用于由数据处理装置,例如可编程处理器、计算机或多台计算机执行或控制其操作。
计算机程序可以用任何形式的编程语言编写,包括编译或解释语言,并且可以以任何形式部署,包括作为独立程序或作为模块、组件、子程序、方法、对象或适合在计算环境中使用的其他单元。计算机程序可以部署为在一台计算机上或一个站点的多台计算机上执行,也可以分布在多个站点上,并通过通信网络互连。与说明性实施例相关联的方法步骤可以由一个或多个执行计算机程序、代码或指令以执行功能(例如,通过对输入数据进行操作和/或生成输出)的可编程处理器来执行。方法步骤也可以由专用逻辑电路执行,并且用于执行该些方法的装置可以实现为专用逻辑电路,例如FPGA(现场可编程门阵列)或ASIC(专用集成电路)。
结合本文公开的实施例描述的各种说明性逻辑块、模块和电路可以用设计成执行本文描述的功能的通用处理器、数字信号处理器(digital signal processor,DSP)、ASIC、FPGA或其他可编程逻辑器件、分立门或晶体管逻辑、分立硬件组件或其任何组合来实现或执行。通用处理器可以是单核或多核微处理器,但在替代方案中,处理器可以是任何常规处理器、控制器、微控制器或状态机。处理器还可以实现为计算设备的组合,例如,DSP和微处理器的组合、多个微处理器、一个或多个微处理器与DSP核心相结合,或任何其他此类配置。
例如,适用于执行计算机程序的处理器包括通用和专用微处理器,以及任何类型的数字计算机的任何一个或多个处理器。通常,处理器将从只读存储器或随机存取存储器或两者中接收指令和数据。计算机的元件包括用于执行指令的处理器和用于存储指令和数据的一个或多个存储设备。通常,计算机还将包括用于存储数据的一个或多个大容量存储设备,例如,磁盘、磁光盘或光盘,或可操作地耦合以从一个或多个大容量存储设备接收数据或向其传输数据或两者。适于体现计算机程序指令和数据的信息载体包括所有形式的非易失性存储器,例如,半导体存储器设备,例如,电可编程只读存储器或ROM(EPROM)、电可擦可编程ROM(EEPROM)、闪存设备,和数据存储磁盘(例如,磁盘、内部硬盘或可移动磁盘、磁光盘以及CD-ROM和DVD-ROM磁盘)。处理器和存储器可以由专用逻辑电路补充或结合到专用逻辑电路中。
本领域技术人员理解,可以使用各种不同技术和科技中的任何一种来表示信息和信号。例如,在整个上述描述中引用的数据、指令、命令、信息、信号、位、符号和芯片可以由电压、电流、电磁波、磁场或粒子、光场或粒子或其任何组合表示。
如本文所用,“机器可读介质”(或“计算机可读存储介质”)是指能够临时或永久存储指令和数据的设备,可以包括但不限于随机存取存储器(RAM)、只读存储器(ROM)、缓冲存储器、闪存、光介质、磁介质、高速缓冲存储器、其他类型的存储器(例如,可擦除可编程只读存储器(EEPROM))和/或其任何合适的组合。术语“机器可读介质”应理解为包括能够存储处理器指令的单个介质或多个介质(例如,集中式或分布式数据库,或相关缓存和服务器)。机器可读介质或计算机可读存储介质还应理解为包括能够存储指令以供一个或多个处理器执行的任何介质(或多种介质的组合),使得指令在由一个或多个处理器执行时,使一个或多个处理器执行本文所述的任何一种或多种方法。因此,机器可读介质或计算机可读存储介质是指单个存储装置或设备,以及包括多个存储装置或设备的“基于云”的存储系统或存储网络。本文使用的术语“机器可读介质”和“计算机可读存储介质”不包括信号本身。
此外,在各种实施例中描述和说明为离散或独立的技术、系统、子系统和方法可以与其他系统、模块、技术或方法组合或集成,而不脱离本公开的范围。显示或讨论为相互耦合或直接耦合或通信的其他示例可以通过一些接口、设备或中间组件间接耦合或通信,无论是电气、机械还是其他方式。本领域技术人员可以确定改变、替换和变更的其他示例,并且可以在不脱离本文公开的范围的情况下进行。
尽管本公开已参考其具体特征和实施例进行了描述,但显而易见,在不脱离本公开范围的情况下,可以对其进行各种修改和组合。例如,可以将其他组件添加到所描述的方法、模块、设备和/或系统中或从中移除。因此,说明书和附图被简单地视为由所附权利要求书定义的本公开的说明,并且预期涵盖落入本公开范围内的任何和所有修改、变化、组合或等同物。其他方面可以在以下权利要求的范围内。
Claims (20)
1.一种用于在功能上重写关系数据库管理系统RDBMS的迭代查询的方法,包括:
接收第一迭代查询,所述第一迭代查询具有定义第一主表的第一非迭代部分和基于所述第一主表的行中的值生成第一工作表的行中的值的第一迭代部分;
确定所述第一迭代部分修改了所述第一工作表的所有行;以及
重写所述第一迭代部分,包括:
添加重命名操作,以将所述第一工作表重命名为新的第一主表,并将所述第一主表重命名为新的第一工作表;
添加第一删除操作,以删除所述新的第一工作表的每一行;以及
添加第一循环操作,以重复所述第一迭代部分直到满足第一终止条件。
2.根据权利要求1所述的方法,其中:
所述第一循环操作的添加包括添加第一比较操作和第一分支操作作为所述第一迭代部分中的最后操作;
所述第一比较操作被配置为测试所述第一终止条件;以及
所述第一分支操作被配置为:
当所述第一比较操作确定不满足所述第一终止条件时,有条件地分支到所述第一迭代部分中的第一操作;以及
当所述第一比较操作确定满足所述第一终止条件时,终止所述第一迭代部分。
3.根据权利要求2所述的方法,其中所述第一迭代部分的重写包括在紧邻所述第一比较操作之前添加所述第一重命名操作和所述第一删除操作。
4.根据权利要求1所述的方法,还包括:
接收第二迭代查询,所述第二迭代查询包括定义第二主表的第二非迭代部分和基于所述第二主表的行中的值生成第二工作表的行中的值的第二迭代部分;
确定所述第二迭代部分修改的行少于所述第二工作表的所有行;以及
重写所述第二迭代部分,包括:
添加更新操作,以将所述第二主表中的对应行替换为来自所述第二工作表的经修改的行;以及
添加第二删除操作,以删除所述第二工作表的每个经修改的行。
5.根据权利要求4所述的方法,还包括:
添加第二比较操作和第二分支操作作为所述第二迭代部分中的最后操作,其中:
所述第二比较操作被配置为测试第二终止条件;
所述第二分支操作被配置为:
当所述第二比较操作确定不满足所述第二终止条件时,有条件地分支到所述第二迭代部分中的第一操作;以及
当所述第二比较操作确定满足所述第二终止条件时,终止所述第二迭代部分;以及
所述第二迭代部分的重写包括在紧邻所述第二比较操作之前添加所述更新操作和所述第二删除操作。
6.根据权利要求2至5中任一项所述的方法,其中:
所述第一终止条件包括由所述第一迭代部分执行的迭代次数;
所述方法还包括重写所述第一非迭代部分以添加初始化计数器的操作;以及
所述第一比较操作的添加包括添加将所述计数器的值与所述迭代次数进行比较的操作。
7.根据权利要求2至5中任一项所述的方法,其中:
所述第一终止条件包括由所述第一迭代部分评估的表达式;以及
所述第一比较操作的添加包括添加用于评估所述表达式以确定是否满足所述第一终止条件的操作。
8.根据权利要求2至5中任一项所述的方法,其中:
所述第一终止条件包括前一次迭代的来自所述第一主表的目标条目的第一值与当前迭代的来自所述第一主表的目标条目的第二值之间的差值测量;
所述第一迭代部分的重写还包括添加操作符,以将来自所述第一主表的所述目标条目的所述第一值存储为所述第一迭代部分的第一操作;以及
所述第一比较操作的添加包括添加操作符,以确定来自所述第一主表的所述目标条目的所述第二值与存储的所述目标条目的所述第一值之间的差值是否小于所述差值测量,其中所述第一比较操作确定是否满足所述第一终止条件。
9.一种用于在功能上重写关系数据库管理系统RDBMS的迭代查询的装置,包括:
存储器,包括指令;以及
与所述存储器通信的一个或多个处理器,其中所述一个或多个处理器执行所述指令以执行操作,包括:
接收第一迭代查询,所述第一迭代查询具有定义第一主表的第一非迭代部分和基于所述第一主表的行中的值生成第一工作表的行中的值的第一迭代部分;
确定所述第一迭代部分修改了所述第一工作表的所有行;以及
重写所述第一迭代部分,包括:
添加重命名操作,以重命名所述第一工作表以产生新的第一主表,并重命名所述第一主表以产生新的第一工作表;
添加第一删除操作,以删除所述新的第一工作表的每一行;以及
添加第一循环操作,以重复所述第一迭代部分直到满足第一终止条件。
10.根据权利要求9所述的装置,其中所述第一循环操作的添加包括添加第一比较操作和第一分支操作作为所述第一迭代部分中的最后操作,其中:
所述第一比较操作被配置为测试所述第一终止条件;以及
所述第一分支操作被配置为:
当所述第一比较操作确定不满足所述第一终止条件时,有条件地分支到所述第一迭代部分中的第一操作;以及
当所述第一比较操作确定满足所述第一终止条件时,终止所述第一迭代部分。
11.根据权利要求10所述的装置,其中重写所述第一迭代部分的操作包括在紧邻所述第一比较操作之前添加所述第一重命名操作和所述第一删除操作。
12.根据权利要求9所述的装置,其中所述操作还包括:
接收第二迭代查询,所述第二迭代查询包括定义第二主表的第二非迭代部分和基于所述第二主表的行中的值生成第二工作表的行中的值的第二迭代部分;
确定所述第二迭代部分修改的行少于所述第二工作表的所有行;以及
重写所述第二迭代部分,包括:
添加更新操作,以将所述第二主表中的对应行替换为来自所述第二工作表的经修改的行;以及
添加第二删除操作,以删除所述第二工作表的每个经修改的行。
13.根据权利要求12所述的装置,其中:
所述操作还包括添加第二循环操作,以重复所述第二迭代部分直到满足第二终止条件;以及
所述第二迭代部分的重写包括在紧邻所述第二循环操作之前添加所述更新操作和所述第二删除操作。
14.根据权利要求10至13中任一项所述的装置,其中:
所述第一终止条件包括由所述第一迭代部分执行的迭代次数,并且所述操作还包括重写所述第一非迭代部分以添加初始化计数器的操作;以及
所述第一比较操作的添加包括添加将所述计数器的值与所述迭代次数进行比较的操作。
15.根据权利要求10至13中任一项所述的装置,其中:
所述第一终止条件包括由所述第一迭代部分评估的表达式;以及
所述第一比较操作的添加包括添加用于评估所述表达式以确定是否满足所述第一终止条件的操作。
16.根据权利要求10至13中任一项所述的装置,其中:
第一终止条件包括前一次迭代的所述第一主表中的目标条目的第一值与当前迭代的来自所述第一主表的目标条目的第二值之间的差值测量;
所述第一迭代部分的重写还包括添加操作符,以将来自所述第一主表的所述目标条目的所述第一值存储为所述第一迭代部分的第一操作;以及
所述第一比较操作的添加包括添加操作符,以确定来自所述第一主表的所述目标条目的所述第二值与存储的所述目标条目的所述第一值之间的差值是否小于所述差值测量,其中所述第一比较操作确定是否满足所述第一终止条件。
17.一种计算机可读存储介质,存储用于在功能上重写关系数据库管理系统RDBMS的迭代查询的计算机指令,所述计算机指令在由一个或多个处理器执行时,使得所述一个或多个处理器执行操作,包括:
接收第一迭代查询,所述第一迭代查询具有定义第一主表的第一非迭代部分和基于所述第一主表的行中的值生成第一工作表的行中的值的第一迭代部分;
确定所述第一迭代部分修改了所述第一工作表的所有行;以及
重写所述第一迭代部分,包括:
添加重命名操作,以重命名所述第一工作表以产生新的第一主表,并重命名所述第一主表以产生新的第一工作表;
添加第一删除操作,以删除所述新的第一工作表的每一行;以及
添加第一循环操作,以重复所述第一迭代部分直到满足第一终止条件。
18.根据权利要求17所述的计算机可读存储介质,其中:
所述第一循环操作的添加包括添加第一比较操作和第一分支操作作为所述第一迭代部分中的最后操作;以及
所述第一比较操作被配置为:
测试所述第一终止条件;以及
所述第一分支操作被配置为:
当所述第一比较操作确定不满足所述第一终止条件时,有条件地分支到所述第一迭代部分中的第一操作;以及
当所述第一比较操作确定满足所述第一终止条件时,终止所述第一迭代部分。
19.根据权利要求17所述的计算机可读存储介质,其中所述操作还包括:
接收第二迭代查询,所述第二迭代查询包括定义第二主表的第二非迭代部分和基于所述第二主表的行中的值生成第二工作表的行中的值的第二迭代部分;
确定所述第二迭代部分修改的行少于所述第二工作表的所有行;以及
重写所述第二迭代部分,包括:
添加更新操作,以将所述第二主表中的对应行替换为来自所述第二工作表的经修改的行;以及
添加第二删除操作,以删除所述第二工作表的每个经修改的行。
20.根据权利要求19所述的计算机可读存储介质,其中所述操作还包括:
添加第二比较操作和第二分支操作作为所述第二迭代部分中的最后操作,其中:
所述第二比较操作被配置为测试第二终止条件;
所述第二分支操作被配置为:
当所述第二比较操作确定不满足所述第二终止条件时,有条件地分支到所述第二迭代部分中的第一操作;以及
当所述第二比较操作确定满足所述第二终止条件时,终止所述第二迭代部分;以及
所述第二迭代部分的重写包括在紧邻所述第二比较操作之前添加所述更新操作和所述第二删除操作。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/US2020/070011 WO2021067977A1 (en) | 2020-04-30 | 2020-04-30 | Processing iterative query constructs in relational databases |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115443456A true CN115443456A (zh) | 2022-12-06 |
Family
ID=70775611
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202080100163.0A Pending CN115443456A (zh) | 2020-04-30 | 2020-04-30 | 关系数据库中的迭代查询构造处理 |
Country Status (3)
Country | Link |
---|---|
US (1) | US11960479B2 (zh) |
CN (1) | CN115443456A (zh) |
WO (1) | WO2021067977A1 (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115443456A (zh) | 2020-04-30 | 2022-12-06 | 华为技术有限公司 | 关系数据库中的迭代查询构造处理 |
US11481390B2 (en) * | 2020-07-24 | 2022-10-25 | Microsoft Technology Licensing, Llc | Optimizing cursor loops in relational database systems using custom aggregates |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5897632A (en) * | 1996-08-27 | 1999-04-27 | At&T Corp | Method and system for using materialized views to evaluate queries involving aggregation |
US9720966B2 (en) * | 2012-12-20 | 2017-08-01 | Teradata Us, Inc. | Cardinality estimation for optimization of recursive or iterative database queries by databases |
US9152670B2 (en) * | 2012-12-20 | 2015-10-06 | Teradata Us, Inc. | Estimating number of iterations or self joins required to evaluate iterative or recursive database queries |
US9146960B2 (en) * | 2012-12-20 | 2015-09-29 | Teradata Us, Inc. | Adaptive optimization of iterative or recursive query execution by database systems |
US10642831B2 (en) * | 2015-10-23 | 2020-05-05 | Oracle International Corporation | Static data caching for queries with a clause that requires multiple iterations to execute |
US11829363B2 (en) * | 2018-10-06 | 2023-11-28 | Microsoft Technology Licensing, Llc | Multi-step query execution in SQL server |
CN115443456A (zh) | 2020-04-30 | 2022-12-06 | 华为技术有限公司 | 关系数据库中的迭代查询构造处理 |
-
2020
- 2020-04-30 CN CN202080100163.0A patent/CN115443456A/zh active Pending
- 2020-04-30 WO PCT/US2020/070011 patent/WO2021067977A1/en active Application Filing
-
2022
- 2022-10-28 US US18/050,913 patent/US11960479B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
US11960479B2 (en) | 2024-04-16 |
US20230083420A1 (en) | 2023-03-16 |
WO2021067977A1 (en) | 2021-04-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110109940B (zh) | 将函数式的图遍历语言转换成扩展的结构化查询语言 | |
Scholz et al. | On fast large-scale program analysis in datalog | |
Fan et al. | The Case Against Specialized Graph Analytics Engines. | |
JP4465147B2 (ja) | データベースシステムにおいてスプレッドシートの算出を行なう方法 | |
US11630864B2 (en) | Vectorized queues for shortest-path graph searches | |
US8156145B2 (en) | Analytic enhancements to model clause in structured query language (SQL) | |
US11960479B2 (en) | Processing iterative query constructs in relational databases | |
US20070078826A1 (en) | Analytic enhancements to model clause in structured query language (SQL) | |
US11397732B2 (en) | Hybrid in-memory BFS-DFS approach for computing graph queries involving complex path patterns including trees and cycles inside relational database systems | |
US11392624B2 (en) | Hybrid in-memory BFS-DFS approach for computing graph queries against homogeneous graphs inside relational database systems | |
US11222070B2 (en) | Vectorized hash tables | |
EP3293645A1 (en) | Iterative evaluation of data through simd processor registers | |
Chen et al. | A workload-driven method for designing aggregate-oriented NoSQL databases | |
Imran et al. | Fast datalog evaluation for batch and stream graph processing | |
Rietveld et al. | Reducing layered database applications to their essence through vertical integration | |
Ferrera et al. | Tuple MapReduce and Pangool: an associated implementation | |
Bhuiyan et al. | MIRAGE: An Iterative MapReduce based FrequentSubgraph Mining Algorithm | |
Werner et al. | Automated composition and execution of hardware-accelerated operator graphs | |
Pivarski et al. | Fast access to columnar, hierarchically nested data via code transformation | |
Idreos et al. | The internals of the data calculator | |
Smith et al. | The design, implementation and evaluation of an odmg compliant, parallel object database server | |
Hauck et al. | Highspeed graph processing exploiting main-memory column stores | |
ten Wolde | Integrating SQL/PGQ into DuckDB | |
Shekita | High Performance Implementation Techniques for Next Generation Database Systems | |
Cheung | Rethinking the application-database interface |
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 |