查询计划中自适应聚合操作符和属性的放置的制作方法

文档序号:27611789发布日期:2021-11-27 03:01阅读:129来源:国知局
查询计划中自适应聚合操作符和属性的放置的制作方法
查询计划中自适应聚合操作符和属性的放置
1.优先权声明
2.本技术要求2020年4月24日提交的序列号为16/857,790的美国专利申请的优先权,该申请要求2019年9月25日提交的序列号为62/905,920的美国临时专利申请的优先权,出于所有目的,在此通过引用将其全部并入。
技术领域
3.本公开涉及数据库,更具体地,涉及数据库环境中的查询计划增强和自适应聚合评估(adaptive aggregation

evaluation)技术。
4.背景
5.数据库广泛用于计算应用中的数据存储和数据访问。举例来说,数据库实现的目标是组织大量的信息,以便可以访问、管理和更新这些信息。在数据库中,数据可以组织成行、列和表。如此处所使用的,数据库表是记录(例如,行)的集合。每个记录都包含表属性(例如,列)的值的集合。数据库表通常物理存储在多个较小的(可变大小或固定大小)存储单元中,例如文件或块。这种文件或块在这里有时被称为微分区。在一些实现中,微分区不是就地更新的,而是生成和存储新的微分区以反映数据库数据的变化。
6.数据库存储系统可用于存储不同类型的内容,例如书目内容、全文内容、数字内容、字母数字内容、图像内容、视频内容和/或类似内容。此外,数据库系统可以根据数据库的组织方法进行分类。有许多不同类型的数据库,包括关系数据库、分布式数据库、基于云的数据库、面向对象的数据库等。
7.各种实体(例如公司)经常使用数据库来存储可能需要访问和/或分析的信息。在一个示例中,零售公司可以将销售交易的清单存储在数据库中。对于给定的交易,数据库可以包括关于交易发生的时间、交易发生的地点、交易的总成本、交易中购买的物品的标识符和/或描述等的信息。例如,在同一个数据库中,公司还可以存储(作为例子)员工信息,这些信息可能包括员工姓名、员工联系信息、员工工作历史、员工薪酬等。根据公司的需要,交易相关信息和员工相关信息可以存储在数据库的不同表中。公司可能会不时查询其数据库,以获取存储在数据库中的信息。
8.公司可能想要定位关于例如在某个商店工作的所有雇员的姓名、在某个日期工作的所有雇员、在某个时间范围内涉及购买某个产品的所有交易等的数据。当公司希望查询其数据库以从数据库中提取某些有组织的信息时,可以对数据库执行查询语句。查询可以根据一个或更多个查询谓词返回某些数据,这些谓词指示查询应该返回什么信息。查询的执行可以包括从数据库中提取特定数据,并将提取的数据格式化为可读的形式。查询可以用数据库理解的语言编写,如结构化查询语言(sql),以便数据库可以确定应该定位哪些数据以及应该如何返回这些数据。该查询可以请求存储在数据库内的任何相关信息。如果可以找到适当的数据来响应查询,则数据库有可能揭示复杂的趋势和活动。可以通过使用成功执行的查询来利用此功能。
9.附图简述
10.从下面的描述中可以得到更详细的理解,下面的描述是结合附图以举例的方式给出的,其中在附图中,相同的参考数字与相同的元件一起使用。
11.图1示出了根据至少一个实施例的示例聚合放置。
12.图2示出了根据至少一个实施例的示例增强查询计划。
13.图3示出了根据至少一个实施例的示例过程流程。
14.图4示出了根据至少一个实施例的示例增强查询计划。
15.图5示出了根据至少一个实施例的示例数据处理平台。
16.图6示出了根据至少一个实施例的示例资源管理器架构。
17.图7示出了根据至少一个实施例的示例方法。
18.图8示出了根据至少一个实施例的示例方法。
19.图9示出了根据至少一个实施例的示例方法。
20.图10示出了根据至少一个实施例的示例查询计划。
21.图11示出了根据至少一个实施例的示例增强查询计划。
22.图12示出了根据至少一个实施例的示例方法。
23.图13示出了根据一个实施例的示例查询计划。
24.图14是根据本主题技术的一些实施例的查询执行计划的尝试去重复优化(try

deduplication optimization)的示意图。
25.图15是根据本主题技术的一些实施例的查询执行计划的局部广义优化的示意图。
26.图16是根据本主题技术的一些实施例的查询执行计划的全局广义优化的示意图。
27.图17是根据本主题技术的一些实施例的聚合实例化视图(mv)重写优化的示意图。
28.图18是根据本主题技术的一些实施例的查询执行计划的聚合框架扩展的示意图。
29.图19示出了根据至少一个实施例的示例计算设备。
30.详细描述
31.例如,就时间、处理资源和存储器资源而言,某些查询的执行成本可能很高。昂贵的查询会占用计算资源并降低数据库操作速度。因此,希望增强查询计划并降低查询执行的总体成本。鉴于前述内容,本文公开了用于自适应增强查询计划的系统和方法。本文还公开了用于有条件地继续执行查询计划的一部分的系统和方法。
32.一个示例实施例采取用于自适应增强查询计划的方法的形式。该方法包括获得对应于查询的查询计划。该方法还包括识别查询计划中的一个或更多个连接聚合(join

aggregation)序列。每个识别的连接聚合序列包括位于聚合操作符下方的连接操作符。该方法还包括至少部分地通过以下操作来生成修改的查询计划:对于每个识别的连接聚合序列,确定连接聚合序列中的聚合操作符是否是重复不敏感的聚合操作符,并且如果是,则在相应的连接操作符的至少一个输入下方插入自适应重复移除操作符。该方法还包括执行修改的查询计划以获得查询结果。对于每个插入的自适应重复移除操作符,执行修改后的查询计划包括:最初在插入的自适应重复移除操作符活动的情况下操作;监控所插入的自适应重复移除操作符和相应的连接操作符中的至少一个的至少一个运行时成本效率度量;以及如果至少一个被监控的运行时成本效率度量指示阈值低效率状况,则去激活所插入的自适应重复移除操作符。
33.另一示例实施例采取有条件地继续执行查询计划的一部分的方法的形式。该方法
包括执行对应于查询的查询计划。查询计划包括位于连接操作符下方的聚合操作符。该方法还包括,在执行查询计划时:监控执行查询计划的至少一个运行时成本效率度量;以及至少部分地基于至少一个被监控的运行时成本效率度量来去激活聚合操作符。
34.另一个实施例采取系统的形式,该系统包括至少一个处理器,并且还包括一个或更多个包含可由至少一个处理器执行的指令的非暂时性计算机可读存储介质,该指令用于使至少一个处理器至少执行在前面两段中的任一段或两段中列出的操作。又一个实施例采取一个或更多个非暂时性计算机可读存储介质(crm)的形式,该介质包含可由至少一个处理器执行的指令,用于使至少一个处理器至少执行在前面两段中的任一段或两段中列出的操作。
35.此外,本文描述了上述实施例的多种变化和置换,并且明确指出,本公开中描述的任何变化或置换可以针对任何类型的实施例来实现。例如,主要在本公开中结合方法实施例描述的变化或置换也可以结合系统实施例、crm实施例和/或一个或更多个其他类型的实施例来实现。此外,尽管用于描述和/或表征这些实施例和/或其任何元素的语言(例如,过程、方法、方法论、步骤、操作、功能等)略有不同,但是实施例的这种灵活性和交叉适用性仍然存在。
36.自适应聚合和查询增强
37.本公开的实施例将自适应聚合应用于查询计划。在一个实施例中,自适应聚合操作符被配置为移除数据集中的重复值。在至少一个实施例中,自适应聚合操作符移除对于特定属性(例如,自适应聚合操作符的聚合关键字)具有重复值的数据库记录(例如,行)。在至少一些实施例中,自适应聚合操作符在查询执行期间基于运行时观察到的信息(例如,由操作符本身观察到的信息)选择性地和自适应地打开和关闭,这种观察到的信息包括聚合操作符的缩减率、相关联的连接操作符的选择性、相关联的连接操作符的爆炸性(explosiveness)等。在一个实施例中,自适应聚合操作符被插入到查询计划中一个或更多个连接操作的任一侧或两侧的下方。在此公开的系统和方法的实施例提供了改进的查询计划,该查询计划是成本有效的,并且在运行时适于降低整体查询执行成本。
38.注意,在本公开中,关于给定的查询计划,“在
……
下方(below)”意味着“顺序地在前面”、“计划顺序地在前面发生”等,而“在
……
上方(above)”相反地意味着“顺序地在后面”、“计划顺序地在后面发生”等。此外,在本公开中,短语“查询计划”和“查询执行计划”可互换使用。此外,术语“操作符”和“操作”也可以互换使用。例如,术语“连接操作符”和“连接操作”应该被认为是等价的,并且有时这样的操作符或操作被简单地称为“连接”。术语“聚合操作符”、“聚合操作”和简单的“聚合”在本公开中类似地可互换使用。相关领域的技术人员熟悉术语中的这些微小变化。
39.在另一个实施例中,公开了一种用于增强查询计划的方法。该方法包括为查询定义查询计划,其中查询计划包括连接操作,连接操作本身具有构建侧(build side)和探查侧(probe side)。该方法包括通过在查询计划中的连接操作符的探查侧下方插入聚合操作符来增强查询计划。该方法还包括使连接操作符的构建侧(i)从构建侧散列表生成布隆过滤器,以及(ii)从构建侧向布隆过滤器提供连接关键字的不同值的数量。由于布隆过滤器位于查询计划中插入的聚合操作符的下方,因此插入的聚合操作符将能够结合布隆过滤器的选择性使用连接关键字的不同值的数量来估计连接操作符的属性(例如,连接基数)。在
一些实施例中,至少部分基于本地观察到的缩减率,聚合操作符可以自适应地切换到直通模式(pass through mode),以避免招致额外的开销。
40.在一个实施例中,积极的自适应聚合被实现为在查询计划的每个节点位置插入自适应聚合操作符,这样做将保持查询的语义等价。这种插入的聚合操作符可以在查询执行期间被适配(例如,选择性地打开和关闭)。在一个实施例中,至少一个插入的聚合操作符没有被完全评估:部分评估仍然是有益的。在一个示例中,至少一个插入的重复移除聚合操作符未被完全评估,也就是说,它不会移除其权限内所有可能的重复项。在至少一个实施例中,基于运行时观察到的信息,可以在查询计划的执行期间禁用和重新启用插入的聚合操作。
41.在一个实施例中,通过尝试去重复放置来实现自适应聚合。在本公开中,“尝试去重复放置”指的是一种技术,根据该技术,在查询计划中的每个可允许的连接聚合序列的下方插入自适应去重复(聚合)操作符。每个连接聚合序列包括位于聚合操作符下方(即之前)的连接操作符,并且在至少一个实施例中,每个可允许的连接聚合序列是连接聚合序列,对于该连接聚合序列,聚合操作符是重复不敏感的(也称为重复不可知的)。重复不敏感的聚合操作符是那些主题数据集中的重复项不会影响聚合操作符提供的答案的操作符。重复不敏感的聚合操作符的例子包括找到数据集中的最大值、找到数据集中的最小值、计算数据集中不同值的数量等。尝试去重复放置在某些情况下还适用于半连接和反连接。在双表连接的上下文中,半连接是返回第一个表中每一行的一个副本的连接,在第二个表中找到该行的至少一个匹配,而反连接返回第一个表中每一行的一个副本,在第二个表中找不到该行的匹配。
42.这里描述的系统和方法的实施例具有几个优点。一个优点是,由于目前公开的运行时适配,初始查询计划不需要是完美的。另一个优点是,与初始查询计划(即,如果没有启用根据本公开的自适应聚合)的执行相比,查询性能缩减的可能性降低。因此,在至少一个实施例中,这里公开的系统和方法产生严格改进的查询性能。另一个优点是,与仅在一个位置放置聚合操作符相比,在整个查询执行计划中在多个位置放置聚合操作符可能会提高性能。
43.各种实施例涉及连接操作符和聚合操作符。下面通过进一步介绍的方式依次讨论这些问题。
44.连接操作符
45.连接是查询处理中的一种操作,包括识别两个输入流中关于其属性中的至少一些匹配的行,这些属性被称为连接关键字。在查询执行过程中,连接操作通常(或者至少可能)是非常耗时的操作。连接操作的一个已知实施例包括sql连接语句,用于组合关系数据库中一个或更多个(例如,两个)表中的列。连接语句是一种通过使用一个或更多个表中每个表的公共值来组合一个或更多个表中的列的方法。
46.散列连接是可以在关系数据库管理系统(rdbms)的实现中使用的连接操作的一个例子。数据库系统中通常使用各种形式的散列连接来计算连接的结果。散列连接用其中一个称为“构建侧”输入的输入(通常是较小的输入)的行构建一个或更多个散列表。这些行从称为“探查侧”输入的另一个输入(通常是较大的输入)被探查到散列表中。在具有n个服务器的大规模并行数据库系统中,通常区分两种分发策略:广播连接和散列

散列连接(后者
通常也称为混洗连接(shuffle join))。下面介绍这两种分发策略。
47.广播连接是连接操作的一个例子,其中要连接的数据的单侧被发送到多个服务器(或其他工作器(例如,处理器、线程等))中的每一个。当构建侧输入适合单个这样的服务器的主存储器时,广播连接是有效的。广播连接将构建侧输入的所有行分发到所有(n)个服务器,然后在n个服务器上对探查侧输入进行散列分区,使得n个服务器中的每一个仅接收探查侧输入的一部分。n个服务器中的每一个都将其探查侧输入的分区探查到散列表的副本中,如上所述,散列表包括来自构建侧输入的所有数据。
48.当构建侧输入不适合单个服务器的主存储器时,通常使用散列

散列连接。散列

散列连接被配置为跨所有n个服务器对构建侧输入进行散列分区,然后用相同的分区函数对探查侧输入进行散列分区。在散列

散列连接中,n个服务器中的每一个服务器都将其探查侧输入的分区探查到其构建侧输入的分区中。分区函数确保,如果来自第i个探查分区pp
i
的行在构建侧有匹配项,则这些匹配项在构建分区bp
i
中,这两个匹配项将被分配给同一个服务器i。当且仅当分区函数将探查侧输入划分为n个大小相等的分区时,这种方法会导致在散列

散列连接的探查阶段所有n个参与服务器的利用率相等。特别是,如果一台服务器接收到不成比例的大量探查侧数据,该服务器将比其他服务器花费更长的时间来处理它的那部分探查侧输入。这可能会延迟查询的剩余执行。这通常是由探查侧的一些频繁出现的连接关键字引起的,使得构建侧输入的一些行匹配探查侧输入的许多行。这被称为探查侧倾斜。
49.这里公开的查询优化技术可以应用于包括任何上述连接操作的查询。在一个实施例中,聚合操作符在连接操作下方被插入到查询计划中,以在执行连接操作之前移除数据集中的重复值。这可以在时间、处理资源和存储器资源方面降低查询执行的总体成本。
50.聚合操作
51.聚合操作是一种有效的工具,可以提供关于数据库数据的有用度量,增强查询计划,提高数据库性能等。聚合操作对跨行的值进行操作,以执行数学计算,例如计算数据集中的不同值、识别最小值、识别最大值、计算平均值、值排序、计算标准偏差和估计值。聚合操作也可以执行非数学运算。在一个示例中,聚合操作将零行、一行或多行作为输入,并根据分组关键字为每个组生成一行。如这里所提到的,短语“分组关键字”指的是一组标识符,下面将进一步讨论,用于在给定的组中聚合数据。相比之下,标量运算将一行作为输入,并将一行作为输出。
52.注意,本公开包括这里有时称为聚合操作符(例如自适应聚合(at)操作符)的示例,该操作符不产生单个输出。在at操作符的情况下,输入是记录流,输出也是记录流。当去激活时(例如,当设置为在直通模式下操作时,在该模式下,不评估记录与其他记录的潜在重复),输入流和输出流匹配。当活动时,在at操作符识别并移除至少一个重复记录(例如,至少对于重复移除关键字是另一个记录的重复项的记录)的情况下,输出流不同于输入流。在一个示例中,该属性(例如,潜在地为同一组产生多行)适用于所有自适应聚合操作,并且不限于这里提到的自适应聚合操作。
53.更一般地,聚合操作有两个部分,即聚合关键字和聚合函数。聚合关键字(例如,分组关键字)定义了要聚合或选择的特定数据的标识符。聚合函数定义了要对满足聚合关键字的数据执行的数学或非数学运算。在一个示例中,执行聚合操作来计算加利福尼亚州在4
月和5月销售的产品总数。在此示例聚合操作中,聚合关键字包括加利福尼亚州、月份四月和月份五月。本例中的聚合函数是求和函数。
54.一些聚合函数忽略null值。例如,用于平均数据的聚合函数可以基于公式计算值的平均值。对于平均公式,分子和分母中只能使用非null值。如果传递给聚合函数的所有值都是null,那么聚合函数可能返回null。
55.聚合操作有许多属性,这些属性使聚合成为查询优化的一个重要方面。聚合操作可以具有可拆分性、可分解性和重复敏感性,这将在下面进一步讨论。
56.聚合操作可以具有可拆分性(即,它们可以被拆分)。如果每个聚合操作仅访问来自两个互斥输入属性子集之一的属性,则聚合操作向量可以分为两部分。对于聚合放置,对于属性仅来自连接一侧的聚合操作子集,可以将聚合下推到(例如,插入)连接的下方。两个子集中的一个可以是空的,这可能意味着所有聚合操作都可以被下推到连接的一侧(例如,插入到连接的下方)。
57.应当理解,在本公开中,动词“插入”和动词短语“下推到”以及它们在其他时态中的等价形式在本文中可以互换使用。在给定的聚合操作符已经存在于给定的查询计划中,然后该给定的聚合操作符相对于例如连接操作符的位置被改变的情况下,短语“下推”或“上拉”可以用于指示将该聚合操作符在查询计划中的位置分别改变为更低或更高。在给定的聚合操作符还没有出现在给定的查询计划中的情况下,动词“插入”可以用于指示通过将给定的聚合操作符放置到查询计划中来修改(例如,增强)给定的查询计划。然而,在某些情况下,将聚合操作符“下推到”“连接下方”的措辞可用于指代这样的修改——即,指代或描述将聚合操作符插入给定聚合操作符尚不存在的查询计划中。本领域技术人员熟悉这种语言在这种情况下的使用。
58.至少某些聚合操作具有可分解性。如果存在聚合操作“agg1”和“agg2”,使得对于值x、y和z的集合,agg(z)=agg2(agg1(x)、agg1(y)),其中z等于x u y,则聚合操作“agg”是可分解的。在聚合评估框架内,如果聚合操作具有子和父聚合实现,则可能暗示聚合操作是可分解的。
59.聚合操作具有重复敏感性:它们可以是重复不敏感或重复敏感的。重复不敏感(即,重复不可知)的聚合操作是这样的操作,其中结果不依赖于参数中是否有重复值。重复敏感的聚合操作是指结果对参数中是否存在重复值敏感的操作。在一些实施例中,重复不敏感/敏感属性影响如何处理聚合以及在何处或何时插入聚合操作。对于重复不敏感的聚合操作,对于较低的聚合(即,在给定查询计划中较早调度的那些聚合)来说,移除至少一些重复项在语义上是等价的(并且是有益的)。对于对重复敏感的操作,最好确定要移除的重复项的数量,并在连接之前为聚合中的每个组维护一个单独的计数列。在计算其自己的聚合时,重复敏感操作可能会将每个组的基数作为输入。
60.广义地说,沿着查询计划放置聚合有两种一般策略:急切聚合和懒惰聚合。急切聚合插入将聚合推送到(例如,插入)相应连接操作符下方。懒惰聚合是反向转换,并将聚合拉至(例如,插入)相应连接操作符上方。聚合的急切应用可以减少连接的处理时间。因此,在一个示例中,可以理解的是,如果连接是爆炸性的,并且聚合是更缩减的,则急切聚合更有益。在一个示例中,懒惰聚合在相反的场景中更为有益,在这种场景中,连接本身具有很强的选择性和/或聚合不是很缩减的。在一个实施例中,自适应聚合修改方案寻求在连接下方
插入聚合,然后在运行时进行适配(例如,基于这里描述的一个或更多个监控的度量)。在某些情况下,可以将聚合尽可能远地沿着多个连接向下推(例如,在语义上允许的情况下),并推送到连接的两侧(构建侧和探查侧)。本主题技术提供了将聚合操作放置在连接操作符上方和下方相结合的技术,并且因此有利地实现了运行时(例如,查询计划的执行)期间的适配。
61.查询计划的聚合

放置增强
62.在某些情况下,在执行查询期间的特定时间执行聚合操作是有益的。因此,在查询计划(例如,查询树)内的某些点插入(例如,推送)聚合操作可能是有益的。聚合放置是查询增强的一个重要方面,有时也称为“分组放置(group

by placement)”。聚合放置会对完全执行查询所需的时间和计算资源的量产生重大影响。例如,通过在执行连接操作之前应用给定的聚合操作,由于执行了给定的聚合操作,任何后续的连接操作的成本都可以降低。例如,这可以为查询计划带来好处,在该查询计划中,聚合操作最初位于昂贵的连接上方(即,被安排在昂贵的连接之后发生),而被置于这种连接下方(即,被安排在这种连接之前发生)。在各种实施例中,验证了具有和不具有任何放置的聚合操作的查询计划之间的语义等价。
63.聚合放置是查询修改(例如,增强),根据该修改,与查询的sql中指定的一个或更多个聚合操作的初始位置相比,一个或更多个聚合操作被放置在查询计划中的不同位置,该查询计划可以包括连接树。聚合放置方案包括在连接树中的原始聚合上方或下方放置额外的聚合操作,或者在某些情况下,直接拉或推原始聚合操作通过连接(例如,到连接上方或到连接下方)。在一个实施例中,如果一个连接正在爆炸,如果聚合操作具有相对较低的组计数,则在该连接的输入上评估给定的聚合操作可能成本较低。此外,在一个实施例中,如果包含在视图或子查询中的给定聚合操作在过滤连接下方被评估,则如果聚合被拉到连接上方并因此在连接之后被评估,则查询执行的成本可能更低。在一些实施例中,这种优化可以在查询运行时产生几个数量级的改进(即缩减)。
64.传统上,聚合放置增强是由基于成本的查询优化器通过对具有不同聚合放置方案的计划进行成本计算(例如,建模、预测和/或估计一个或更多个成本)并根据成本模型选择被认为是最佳的方案来执行的。这种方法有许多缺点。一个缺点是查询优化器经常出错并执行一个或更多个不必要的聚合。如果执行不必要的聚合,查询会变得不必要的昂贵。与未进行修改的计划相比,这可能会导致性能倒退。此外,现有的分组聚合放置通常仅限于简单聚合函数的子集,并且仅适用于内部连接。
65.本公开的实施例解决了传统方法的前述缺点,以及其他方法的其他缺点。在一个实施例中,聚合被机会性地应用于查询执行计划中,并且在执行运行时期间被适配。在各种不同的实施例中,自适应聚合增强适用于多种类型的聚合函数。自适应聚合的实现不是专门针对聚合类型的小子集,可以扩展到现有的聚合框架,以支持聚合放置。此外,本自适应聚合增强的实施例适用于多种连接类型,包括外部连接和半连接。
66.在一个实施例中,执行聚合放置以缩减执行查询的成本。这可以通过在可能时(例如,当语义允许时)在查询计划中应用急切聚合放置并在执行期间进行适配(例如,基于一个或更多个监控的成本效率度量)来实现。在一个实施例中,执行自适应聚合放置,使得较低的聚合能够适应输入,并且如果证明没有益处,则提前停止。在至少一个实施例中,自适
应聚合具有低开销,因为应用聚合放置的查询不比不应用聚合放置的查询更昂贵。在一个实施例中,聚合放置被应用于所有连接类型,包括外部连接和半连接。
67.在一些实施例中,自适应聚合可用于满足某些属性的所有聚合函数。在一个实施例中,自适应聚合不限于聚合的子集,而是可以集成到现有的查询优化和聚合框架中。
68.在一个实施例中,聚合放置被实现为查询优化器中的重写规则。在一些实施例中,每当是允许的(例如,语义上允许的)转换时,聚合总是被下推(例如,插入)到连接下方。特定的聚合操作可以是顶部/底部聚合或中间聚合。聚合可以被下推到多个连接下方。当并行化下推聚合时,可以为连接创建中间聚合操作符。在一些实施例中,查询优化器可以创建附加的伪列来传递中间聚合结果和附加的所需列,例如由下推聚合产生的计数表达式。
69.如上所述,在一些实现中,聚合放置作为查询优化器中的重写规则来实现。在其他实施例中,对聚合框架进行改变。在一些实施例中,当可能实现如本文所公开的聚合放置时,认为在查询优化器中使用重写规则是合乎需要的。
70.在各种实施例中,查询重写可以发生在两个阶段:上拉阶段和下推阶段。上拉阶段可以沿着查询树传播不同的属性,并可以消除不必要的聚合。上拉阶段可以考虑约束属性和较低聚合的存在。在一个实施例中,在自适应聚合方法中,上部聚合从未被完全消除。上拉阶段可能发生在连接和分组的物理扩展之前。下推阶段可能发生在连接、布隆过滤器和聚合的物理扩展之后。下推阶段可以首先用可以消除的不同关键字和表达式来注释聚合下方的计划节点。
71.在一个实施例中,对于推送到连接下方的聚合,在与连接相同的线程中创建并本地评估急切聚合。聚合下推的好处可能取决于上方的连接的属性。在做出执行时决策时,急切聚合可能需要检查连接的属性。在至少一个实施例中,无论急切聚合是在连接的探查侧还是构建侧,急切聚合都在本地适配。
72.在至少一个实施例中,在连接的探查侧,急切聚合可以做出进一步的判定,因为当聚合在同一流水线中时,对连接结果有更多的可见性。在探查侧,下推聚合可能以直通模式开始。在上方的连接处理了一定数量的行之后,下推聚合可以检查连接的各种属性,以确定打开聚合是否有益。如果没有,操作符可以在查询执行期间保持直通模式。如果查询优化器确定评估聚合是有益的,则查询操作符可以缓冲并评估一个样本行上的聚合,以确定聚合的选择性。如果选择性足够低,聚合操作符可以在查询执行的剩余时间内保持打开。
73.在连接的构建侧,在一些实施例中,可能无法适配于连接的给定属性(例如爆炸性)。在一些实施例中,优化仍然可以用构建侧的本地信息来执行。一种这样的优化可以针对不同的下推来执行。不同的下推操作本身可以作为连接构建的一部分进行评估。在一个实施例中,不同下推操作包括为由附加不同关键字作为关键字的每个散列条目维护二级散列表。同样,这可用于评估重复密集聚合,例如识别最小值和最大值。
74.下面结合附图描述本公开实施例的其他方面。也就是说,本文提供了本公开的实施例的详细描述,包括以下结合附图的描述。虽然本文描述了几个实施例,包括下文,但是应当理解,本公开不限于任何一个实施例,而是包括许多替代、修改和等同物。此外,尽管在本公开中阐述了许多具体细节以提供对这里公开的实施例的透彻理解,但是一些实施例可以在没有这些细节中的一些或全部的情况下实施。此外,为了清楚起见,没有详细描述相关领域中已知的某些技术材料,以避免不必要地模糊本公开。
75.一般而言,应当理解,本公开不限于这里公开的配置、工艺步骤和材料,因为这样的配置、工艺步骤和材料可以有所不同。还应当理解,这里使用的术语仅用于描述示例性实施方式,并不旨在进行限制。
76.现在参考图1和图2,图1示出了根据至少一个实施例的示例聚合放置100,而图2示出了根据至少一个实施例的示例增强查询计划200。特别地,图1描绘了两个潜在查询计划的示意图。在图1的左侧,描绘了查询计划102,而在右侧,描绘了增强的查询计划104。还应注意,图2中描绘了增强的查询计划200。这三个示出的查询计划中的每一个都包括连接第一侧表t1 110和第二侧表t2 112的连接108。表的使用是为了说明;在其他实施例中,给定连接操作的一侧或两侧可以采取或包括输入记录流的形式,或者采取另一种形式。在所描绘的实施例中,当连接108是爆炸式连接时,与查询计划102相比,增强查询计划104和增强查询计划200在时间、存储器和处理资源方面提供了显著的成本节约。爆炸式连接的一个例子是,连接的一侧比连接的另一侧有更多的行。爆炸式连接的另一个例子是当连接不是很有选择性时,结果相应地接近笛卡尔乘积。爆炸式连接会生成一个大的中间数据集,并且在时间、存储器和处理资源方面执行起来很昂贵。
77.注意,在本公开中,假设存在不同类型的连接,以给定方式对给定连接的描述不应被视为限制。例如,没有明确描述为具有构建侧和探查侧的连接也可以这样描述。作为示例,图1的连接108以及图4的连接构建404和连接探查406的组合可以简单地是相同类型的连接操作的不同类型的描述,或者它们可以是不同类型的连接操作的描述。
78.在增强查询计划104中,在执行连接108之前,在连接108的一侧执行附加的(与查询计划102相比)聚合操作,即连接前聚合(pre

join aggregation)114。这种聚合可以被推到连接108的任一侧或两侧。在图1所示的示例增强查询计划104中,在执行连接108之前,在相对于表t2 112的第二侧(即,右侧)执行连接前聚合114。在其他实施例中,在执行连接108之前,可以在第一侧或第一侧和第二侧中的每一侧执行聚合。
79.许多查询类似于查询计划102,并且计算成本高。如果如图所示执行额外的聚合功能,则增强的查询计划104可能变得比查询计划102更昂贵。因此,期望确定查询计划102或增强查询计划104对于某个查询和某个数据集来说是否是最具成本效益的查询计划。本公开的实施例有利地解决了这个和其他情况。具体而言,本公开的实施例尝试增强的查询计划104,监控执行如何进行,并且如果增强的查询计划104在运行时没有从包含连接前聚合114的效率方面获益,则本质上转换回查询计划102。
80.传统的查询优化器根据成本计算如何尝试优化查询。传统的查询优化器可以比较查询计划102和增强的查询计划104,以确定执行哪个最便宜。传统的查询优化器通常会在这个判定猜测。当确定查询计划102或增强的查询计划104是否是最具成本效益的时,传统的查询优化器通常是不正确的。传统系统中经常使用的基于成本的模型有许多缺点,并且经常从成本效率的角度选择不正确的查询计划。先前的实现做出这样的选择,并且不灵活地坚持那个选择;本公开的实施例在运行时进行适配。
81.这里公开的一种查询优化技术可以被称为重复不敏感技术,并且也被称为尝试去重复放置。当诸如聚合106的聚合操作对重复不敏感时,可以应用重复不敏感技术。重复不敏感技术可能是成本有效的。在一个实施例中,重复不敏感技术包括将自适应重复移除聚合操作插入查询计划。在一个实施例中,重复不敏感技术包括观察这些插入的聚合操作,以
确定数据(例如,行数)是否被每个这样的聚合操作充分缩减(例如,超过阈值)。在一些实施方式中,如果数据量没有被充分缩减,则聚合操作关闭(例如,去激活、停止操作等)。在一些实施例中,重复不敏感技术的至少监控和条件去激活方面可以由插入的聚合操作在本地执行。
82.在一些实施例中,插入的聚合操作观察连接108的选择性。如果连接108是非常有选择性的,那么以聚合操作(例如处于活动状态的连接前聚合114)开始查询的处理可能不是有利的,并且连接前聚合114可能关闭。在一个实施例中,连接108的选择性在连接108的构建阶段由布隆过滤器确定。
83.当查询功能(例如,聚合106)对重复不敏感时,可以执行增强查询计划104和增强查询计划200。增强的查询计划200包括将自适应重复移除操作202和204推到连接108的两侧下方。可以分别在第一侧(在表t1 110之上)和/或第二侧(在表t2 112之上)将重复移除操作202或重复移除操作204推到连接下方。在一个实施例中,在连接108的第一侧和第二侧,重复移除操作符都被推到连接108下方。在一个实施例中,重复移除操作仅在连接108的第一侧和第二侧之一上被推到连接108下方。在一个实施例中,给定的重复移除操作扫描原本为连接108的给定侧所绑定的输入,并基于提供给重复移除操作的特定重复移除关键字移除给定侧上的所有或至少一些重复值。重复移除操作可以在连接108之前执行,以减少执行连接108所需的处理量、存储器量和时间。在一个实施例中,重复移除操作被插入查询计划中,并且仅当查询的聚合106对重复不敏感时被推到连接108下方。增强的查询计划200表示用于查询修改(例如,增强)和自适应聚合的重复不敏感技术的实现。
84.当查询请求表的最小值和/或最大值时,应用重复不敏感技术的示例实现。在一个例子中,接收到一个查询,该查询请求一组雇员中的最大工资和该组雇员中的最小工资。该查询重复不敏感,因为无论有多少人拥有相同的工资,最大和最小的工资都是相同的。在一个示例实现中,可能由于表的结构和组织,使用连接操作来执行该查询。例如,同一表和/或不同表中的不同列可以被连接,从而可以分析雇员的整个清单以识别最大和最小的工资。在一个示例中,来自第一微分区(或其他存储单元)的列与第二微分区中的列连接。在一个示例中,两列中的一列可能比另一列大得多,这意味着连接操作是一个爆炸式连接。因为该示例中的连接操作是爆炸式连接,所以通过在执行连接108之前在连接108的至少一侧执行连接前聚合114,根据增强查询计划104执行查询可能是有利的。这可以减少对连接108的输入,从而使得连接108的执行成本更低。在连接108被执行之后,聚合106可以被完成以识别雇员组中最大和最小的工资。
85.图3示出了根据至少一个实施例的用于修改查询计划并分配用于执行修改后的查询计划的任务的示例性过程流程300。在至少一个实施例中,过程流程300由图5中描绘的数据处理平台500的一个或更多个实体来执行,其可以在诸如图19中描绘的示例计算设备1900的计算设备上执行。
86.在过程流程300中,资源管理器302在操作304接收查询。该查询可以从与数据库平台通信的客户账户接收。资源管理器302在操作306识别要被读取以响应查询的一个或更多个文件。一个或更多个文件中的每一个可以是与表相关联的微分区。资源管理器302可以通过扫描元数据储存器中的元数据来识别一个或更多个文件,其中元数据储存器独立于存储文件的数据库数据。资源管理器302可以在操作308确定执行查询所需的一个或更多个函数
是否是重复不敏感的。在所描绘的实施例中,资源管理器302在操作310确定查询的执行是否需要连接操作。资源管理器302响应于查询函数对重复不敏感和连接操作包括查询计划,在操作312,在连接操作之前在查询计划中插入重复移除操作(例如,如本文所述的自适应聚合操作符),以增强(例如,优化)查询计划。
87.在一个实施例中,在连接操作的至少一侧上执行重复移除操作,并移除连接操作的该侧(或两侧)上的所有或大部分(或仅仅一些)重复值。重复移除操作可以在连接操作两侧在连接操作下方插入到增强查询计划中。重复移除操作减少了连接的一个或更多个输入的大小,因此使连接在时间、处理和存储器资源方面更加高效。修改后的查询计划然后可以看起来类似于图1所示的增强查询计划104。如果在连接操作的两侧都插入了重复移除操作,则修改后的查询计划可能看起来类似于图2所示的增强查询计划200。资源管理器302可以确定要执行查询的多个任务,并在操作314将多个任务中的每一个分配给执行平台316的执行节点,然后执行平台316可以根据修改的查询计划执行查询。
88.过程流程300的实施例以尽力方式(best

effort)执行。可以尽力方式执行给定的重复移除操作,使得从插入了重复移除操作的查询侧移除一些(例如,大多数)但可能不是所有的重复值。这里公开的查询增强技术的一个目标是通过引入不增加执行查询的总成本的附加任务,例如一个或更多个重复移除操作,来降低执行查询的成本。可以执行给定的重复移除操作,从而移除大量的重复值,因此后续的连接操作在处理、存储器和/或时间方面花费较少。给定的重复移除操作可能无法执行到完成,因此会保留一些重复值。这可能不会显著增加执行连接的成本。但是,使重复移除操作完美地移除所有重复值可能会大大增加重复移除操作的成本,并可能进一步增加执行查询的总体成本。
89.在一个实施例中,重复移除操作(例如,自适应聚合操作)由执行平台的多个执行节点执行。这种执行节点也可以被称为工作器、服务器、线程等。在这样的实施例中,如果多个执行节点要确保重复移除操作完美地移除所有重复值,则它们可以彼此通信。在某些实现中,这将是昂贵且不可取的。因此,在一个实施例中,执行重复移除操作,使得多个执行节点中的每一个移除该执行节点的数据部分中的重复值。多个执行节点不需要相互通信来确保在多个执行节点之间移除所有重复的值。在这样的实施例中,多个执行节点中的每一个可以完美地或可以不完美地移除该执行节点的数据部分中的所有重复值。然而,多个执行节点不需要彼此通信来确保在数据的所有部分移除所有重复的值。这是以尽力方式执行重复移除操作的一个实施例。
90.在一个实施例中,重复移除操作被配置为移除输入流中的重复值,该输入流受分配给重复移除操作的存储器量的限制。重复移除操作可以从摄取记录(例如,行)开始。重复移除操作可以识别缩减率,该缩减率可以被定义为(i)重复移除操作已经移除的记录的数量与(ii)重复移除操作已经摄取的记录的数量的比率。在一个实施例中,如果重复移除操作移除的值的比率小于预定阈值,则重复移除操作相应地关闭。例如,重复移除操作可以确定它已经摄取了一千条记录,并且所有这些摄取的记录对于重复移除操作的特定关键字都是唯一的。重复移除操作可以被配置为随后自动关闭,因为它没有移除阈值率的重复记录。在另一个例子中,重复移除操作可以确定它已经移除了它所摄取的记录的90%,这表明数据是高度重复的。然后,重复移除操作可以继续运行,因为它移除了大量记录,并且重复移除操作的结果可能会降低执行后续连接操作的成本。
91.在一个实施例中,重复移除操作被配置为以尽力方式移除重复值。重复移除操作可能会受到已分配的高速缓存存储器量的限制。可能不允许重复移除操作使用比已分配存储器更多的存储器,因此可能无法成功移除所有重复值。在这样的实施例中,重复移除操作可以摄取数据集中的行,并且在高速缓存存储器中存储唯一(例如,关于一个或更多个关键字)行的日志,直到重复移除操作已经使用了所有分配的高速缓存存储器。在重复移除操作使用了所有分配的高速缓存存储器后,重复移除操作可以从日志(高速缓存存储器中)中移除那些在数据集中不常看到的唯一值。因为重复移除操作在使用分配的缓存存储器后会从日志中移除一些唯一值,所以重复移除操作可能无法识别数据集中的所有重复项。因此,这是重复移除操作的一个示例,该操作被配置为以尽力方式移除重复值,在这种情况下是由于存储器限制。
92.这里公开的一种查询修改技术可以被称为连接观察技术。在一个实施例中,连接观察技术包括在执行给定的连接操作时观察连接探查。连接观察技术可以从聚合操作关闭开始。当聚合操作关闭时,连接探查可以开始执行连接操作。连接观察技术可以包括确定如果启用聚合操作,查询执行是否会更具成本效益。聚合操作可以被配置为当数据没有被充分缩减(例如,缩减超过阈值量)时关闭自身。
93.这里公开的一种查询优化技术可以被称为自适应聚合技术。在一个实施例中,自适应聚合技术包括在整个查询计划中放置聚合操作。聚合操作可以放置在一个或更多个连接操作的构建侧和/或探查侧。在一个实施例中,聚合操作被放置在连接操作的构建侧,并且在该连接操作的探查侧被执行之前被执行。自适应聚合技术可以包括构建具有多个不同值的散列表。可以执行聚合,并且可以将信息与布隆过滤器活动一起传递到构建侧。聚合操作可以开始执行常规聚合,并监控缩减率。基于缩减率,可以确定连接操作的属性。该信息可以被提供给连接操作的探查侧。在自适应聚合技术中,聚合操作本身可以在构建侧和探查侧之间移位。聚合操作可以具有从布隆过滤器容易获得的聚合信息,并且可以在不去探查侧的情况下做出判定。
94.在至少一个实施例中,自适应聚合技术在运行时是自适应的。在一个实施例中,聚合操作基于来自一个或更多个布隆过滤器的数据做出判定,并且当聚合操作确定聚合是无益的(例如,关于处理相应查询所需的时间和/或资源)时,其自身关闭。在一个实施例中,聚合操作确定连接是非常有选择性的(例如,超过选择性阈值),并且聚合本身不够缩减(例如,缩减率小于阈值缩减率)。在一个实施例中,聚合操作确定连接的爆炸性,并且可以进一步确定连接的构建侧的爆炸性和探查侧的爆炸性。基于这种成本效率度量的任何一个或任何组合,聚合操作可以确定是活动的还是不活动的(例如,在直通模式下)。
95.在一个实施例中,自适应聚合和查询修改是在运行时执行的,因此在第一种情况下不依赖于查询优化器来设计最优查询计划。在这样的实施例中,聚合操作和/或重复移除操作被放置在整个查询计划中,并且被配置为响应于确定它们各自的操作对该数据集(或数据集/查询组合)无效而自动关闭。这可以提高查询的效率,并增加实际使用的且未去激活的查询修改技术对于该数据集和该查询是有利技术的可能性。这与传统的查询优化器不同,传统的查询优化器经常选择(并坚持)低效的查询优化技术。根据本公开的实施例,查询修改技术在运行时是自适应的,以增加以更有效的方式执行查询的可能性。
96.在一个实施例中,查询修改实例包括重复不敏感技术、连接观察技术和自适应聚
合技术中的一个或更多个。这些技术的每一个和/或任何组合可以结合处理给定的查询来使用。
97.图4示出了根据至少一个实施例的示例增强查询计划400。在至少一个实施例中,增强的查询计划400可以在聚合402不是重复不敏感的情况下实现。重复不敏感的聚合操作的一个示例是利用计数、求和或其他聚合函数,其最终结果取决于相应数据集中的每个值(包括重复值的每个实例)。增强的查询计划400包括连接操作。在一个实施例中,连接操作是散列连接,并且包括连接构建404和连接探查406。在增强的查询计划400中,聚合408被下推(例如,插入)到连接探查406下方。在一个实施例中,聚合408利用布隆过滤器410来识别数据集中的不同值,并确定聚合408的缩减率。连接构建404可以基于数据集中的不同值生成散列表。
98.在散列连接中,可以首先在较小的关系上准备散列表。散列表可以包括连接关键字及其行。因为散列表可以通过对连接关键字应用散列函数来访问,所以使用散列表查找给定连接关键字的行比扫描原始关系更有效。在建立散列表之后,然后可以扫描较大的关系,以通过参考散列表在较小的关系中找到相关的(例如,匹配的)行。第一阶段称为连接构建404,第二阶段称为连接探查406。构建散列表的连接关系可以被称为构建(或构建侧)输入,而另一个输入可以被称为探查(或探查侧)输入。增强的查询计划400可以用不同的连接操作来实现,并且不必使用散列连接来实现。
99.在执行增强查询计划400的示例实例中,左侧的连接构建404在右侧的聚合408开始之前完成其操作。聚合408然后基于布隆过滤器410的输出414开始执行聚合,布隆过滤器410在来自连接构建404的信息转移412接收信息。聚合408可以执行其特定的聚合功能,并且基于来自布隆过滤器410的输出414来监控其聚合功能的缩减率。在一个实施例中,聚合408是自适应的,例如,它被配置为如果其相关联的缩减率不满足预定义的阈值缩减率和/或如果连接的爆炸性超过预定义的爆炸性阈值,则关闭它自己。
100.图5示出了根据至少一个实施例的示例数据处理平台500。在各种实施例中,数据处理平台500可用于执行本文公开的一种或更多种方法(包括过程等)的一种或更多种操作。如图5所示,数据处理平台500包括数据库管理器502,数据库管理器502本身包括资源管理器302和执行平台316,其中执行平台316可以包括一个或更多个执行节点(例如,服务器、工作器、线程等)。数据库管理器502不需要是定义的物理设备,尽管它可以是,但是通常在这里被用作指代资源管理器302和执行平台316的组合的简写。
101.资源管理器302可以被配置成管理从例如客户账户接收的“外部”数据库任务,例如查询请求。资源管理器302可以耦合到任意数量的多个用户,例如用户1 504、用户2 506和/或直到用户n 508。在特定实现中,资源管理器302可以支持期望访问数据处理平台500的任意数量n的用户。在至少一个实施例中,用户1 504、用户2 506、直至用户n 508不被认为是数据处理平台500的一部分,而是他们与数据处理平台500交互。用户1 504、用户2 506和/或直至用户n 508可以包括例如提供数据存储和/或数据检索请求的终端用户、管理这里描述的系统、方法和设备的系统管理员、和/或与资源管理器302交互的一个或更多个其他用户、部件、设备等。用户1 504、用户2 506和/或直至用户n 508在本文中可以被称为(例如,可以包括)客户端、客户等,并且可以具有(例如,直接)到本文公开的一个或更多个部署的连接。作为一个示例架构,用户1 504、用户2 506直至用户n 508中的每一个可以连接到
主要部署,并且具有将连接从主要部署转换到次要部署的能力。
102.资源管理器302可以耦合到元数据518的储存器,在一个实施例中,元数据518储存器与存储在整个数据处理平台500中的全部数据相关联。在一些实施例中,元数据518包括存储在远程数据存储系统中的数据以及可从本地高速缓存获得的数据的概要。另外,元数据518可以包括有关在远程数据存储系统和在本地高速缓存中如何组织数据的信息。元数据518可以允许系统和服务确定一条数据是否需要被处理(例如,结合给定的查询),而无需从存储设备加载或访问实际数据。
103.资源管理器302可以进一步耦合到执行平台316,执行平台316可以提供执行各种数据存储和数据检索任务的多个计算资源。在一个实施例中,存在执行平台316的一个或更多个实例,用于执行客户端任务,例如数据库查询和/或“内部”数据库任务,例如更新元数据、聚类表、生成实例化视图等。在这样的实施例中,还可以存在用于增量特征开发和/或测试的执行平台316的一个或更多个实例,并且执行平台316的每个这样的实例可以与执行平台316的每个客户端实例分离,使得客户端处理不受特征开发任务的影响。执行平台316可以耦合到作为存储平台510的一部分的多个数据存储设备,例如数据存储设备512、数据存储设备514和数据存储设备516中的一个或更多个。尽管图5中示出了三个数据存储设备,但是执行平台316可以能够与任何数量的数据存储设备通信。在一些实施例中,数据存储设备512、数据存储设备514和数据存储设备516中的一个或更多个是位于一个或更多个地理位置的基于云的存储设备。例如,数据存储设备512、数据存储设备514和数据存储设备516中的一个或更多个可以是公共云架构或私有云架构的一部分。数据存储设备512、数据存储设备514和数据存储设备516中的一个或更多个可以是或包括硬盘驱动器(hdd)、固态驱动器(ssd)、存储集群或任何其他数据存储技术。另外,储存平台510可以包括分布式文件系统(例如hadoop分布式文件系统(hdfs))、对象储存系统等等。
104.在特定实施例中,图5中描绘的任何一个或更多个通信链路可以经由一个或更多个数据通信网络来实现,该数据通信网络可以利用任何通信协议和任何类型的通信介质。在一些实施例中,数据通信网络是彼此耦合的两个或更多个数据通信网络(或子网络)的组合。在可替代的实施例中,这些通信链路被使用任何类型的通信介质和任何通信协议来实现。
105.如图5所示,数据存储设备512、数据存储设备514和数据存储设备516通常与执行平台316、资源管理器302和数据库管理器502相关联的计算资源解耦。在一个实施例中,多个数据库部署中的每一个都包括各自的存储平台510,存储平台510具有其各自的多个数据存储设备。该架构支持基于变化的数据存储/检索需求以及访问数据处理平台500的用户和系统的变化需求对数据处理平台500进行动态改变。对动态变化的支持允许数据处理平台500响应于对数据处理平台500内的系统和部件的不断变化的需求而快速扩展。计算资源与数据存储设备的分离支持大量数据的存储,而无需相应的大量计算资源。类似地,计算资源的这种分离支持在特定时间使用的计算资源的显著增加,而无需相应增加可用数据存储资源。
106.数据库管理器502、资源管理器302、元数据518、执行平台316和存储平台510在图5中显示为部件。然而,资源管理器302、元数据518、执行平台316和存储平台510中的每一个可以被实现为分布式系统(例如,分布在多个地理位置的多个系统/平台上)。此外,数据库
管理器502、资源管理器302、元数据518、执行平台316和存储平台510中的每一个都可以根据从用户接收的请求的变化和数据处理平台500的需求的变化而按比例放大或缩小(彼此独立)。因此,数据处理平台500是动态的,并且支持定期变化以满足变化的数据处理需求。
107.图6示出了根据至少一个实施例的示例资源管理器架构600。如图6所示,资源管理器302包括耦合到数据存储器606的访问管理器602和密钥管理器604。访问管理器602为本文描述的系统处理认证任务和授权任务。密钥管理器604管理在认证任务和授权任务期间使用的密钥的储存和认证。例如,访问管理器602和密钥管理器604可以管理用于访问存储在远程存储设备(例如,存储平台510中的数据存储设备)中的数据的密钥。如本文所用,远程存储设备也可以被称为“永久存储设备”或“共享存储设备”。请求处理服务608管理接收到的数据存储请求和数据检索请求(例如,将对数据库数据执行的作业)。例如,请求处理服务608可以确定处理给定的接收数据存储请求或数据检索请求所需的数据。必要的数据可以存储在执行平台316内的高速缓存内(如本文更详细讨论的),也可以存储在存储平台510中的数据存储设备中。管理控制台服务610支持管理员和其他系统管理员对各种系统和进程的访问。另外,管理控制台服务610可以接收执行作业并监视系统上的工作负荷的请求。
108.在所描绘的实施例中,资源管理器302还包括作业编译器612、作业优化器614和作业执行器616。作业编译器612可以将作业解析成多个离散任务,并为多个离散任务中的每一个生成执行代码。作业优化器614可以基于要处理的数据选择执行多个离散任务的方法。作业优化器614还可处理各种数据修剪操作和其他数据优化技术,以提高执行作业的速度和效率。作业执行器616可以为接收到的作业(接收到的查询)或由资源管理器302确定的作业执行执行代码。
109.此外,在所描绘的实施例中,作业调度器和协调器618将接收到的作业发送到适当的服务或系统,用于编译、优化和分派到执行平台316。例如,可以按该优先顺序对作业进行优先考虑和处理。在一个实施例中,作业调度器和协调器618确定由资源管理器302调度的内部作业与其他“外部”作业(例如可以由其他系统调度但可以利用执行平台316中相同处理资源的用户查询)的优先级。在一些实施例中,作业调度器和协调器618识别或分配执行平台316中的特定节点以处理特定任务。虚拟仓库管理器620可管理在执行平台316中实现的多个虚拟仓库的操作。如下所述,在至少一个实施例中,每个虚拟仓库包括多个执行节点,每个执行节点包括高速缓存和处理器。
110.另外,在所描绘的实施例中,资源管理器302包括配置和元数据管理器622,其可以管理与存储在远程数据存储设备和本地高速缓存(即,执行平台316中的高速缓存)中的数据相关的信息。在一些实施例中,配置和元数据管理器622使用元数据518来确定需要访问哪些数据文件来检索用于处理特定任务或作业的数据。监视器和工作负荷分析器624可以监督由资源管理器302执行的过程,并管理任务(例如,工作负荷)在执行平台316中的虚拟仓库和执行节点之间的分发。监视器和工作负荷分析器624还可根据需要基于整个数据处理平台500的变化的工作负荷重新分配任务并基于也可以由执行平台316处理的用户(即“外部”)查询工作负荷进一步重新分配任务。配置和元数据管理器622以及监视器和工作负荷分析器624耦合到数据储存器626。图6中的数据储存器606和数据储存器626可以表示数据处理平台500内的任何数据存储设备。例如,数据储存器606和数据储存器626可以表示执行平台316中的高速缓存、存储平台510中的任何数据存储设备512、数据存储设备514和/或
数据存储设备516和/或任何其他存储设备。
111.在所描绘的实施例中,资源管理器302还包括事务管理和访问控制模块628,其可以管理与数据存储请求和数据访问请求的处理相关联的各种任务和其他活动。例如,事务管理和访问控制模块628可以提供多个用户和/或系统对数据的一致和同步的访问。由于多个用户和/或系统可以同时访问相同的数据,因此对数据的更改必须同步,以确保每个用户和/或系统都在使用数据的当前版本。事务管理和访问控制模块628可以在资源管理器302中的单个集中位置提供对各种数据处理活动的控制。在一些实施例中,事务管理和访问控制模块628与作业执行器616交互,以支持由作业执行器616执行的各种任务的管理。
112.图7示出了根据至少一个实施例的示例方法700。方法700是修改查询的方法。方法700可以由任何合适的计算资源(例如,设备)来执行,例如数据库管理器502、资源管理器302或作业优化器614。
113.方法700开始,并且计算资源在操作702评估查询以确定该查询是否对重复不敏感。如果查询结果不取决于数据集中存在多少重复值和/或数据集中重复值的每个实例,则查询重复不敏感。重复不敏感的示例查询包括一个用于确定数据集中最小值和最大值的查询函数。方法700继续,并且计算资源在操作704确定该查询的查询计划是否包括连接操作。方法700继续,并且计算资源响应于查询是重复不敏感的并且查询计划包括连接操作,在操作706将重复移除操作(例如,自适应聚合操作符)推到查询计划中的连接操作下方。方法700继续,并且计算资源在操作708确定重复移除操作的阈值缩减率,使得重复移除操作响应于未能满足阈值缩减率而关闭。计算资源可以基于用户定义的参数、基于查询的sql文本、基于查询结果的参数等来确定阈值缩减率。
114.图8示出了根据至少一个实施例的示例方法800。方法800是增强查询的方法。方法800可以由例如数据库管理器502、资源管理器302或作业优化器614的任何合适的计算资源(例如,设备)来执行。
115.方法800开始,并且计算资源在操作802定义查询的查询计划,其中查询计划包括连接操作。在操作804,计算资源通过将聚合操作符下推到连接操作的探查侧下方来增强查询计划。计算资源在操作806使连接操作的构建侧生成散列表,并向布隆过滤器提供多个不同值的值。在操作808,计算资源使聚合操作符基于布隆过滤器来确定连接操作的属性。在操作810,计算资源为聚合操作符定义阈值缩减率,使得如果聚合操作符未能满足阈值缩减率,则聚合操作符关闭。计算资源在操作812定义聚合操作符的阈值爆炸性,使得如果连接操作超过阈值爆炸性,则聚合操作符关闭。
116.图9示出了根据至少一个实施例的示例方法900。方法900是自适应增强查询计划的方法。在各种不同的实施例中,方法900可以由任何计算和通信设备或这种设备的系统来执行,该计算和通信设备或这种设备的系统被适当地装备、编程和配置以执行这里描述的操作。作为示例而非限制,方法900在下面被描述为由数据库管理器502执行,这可以涉及方法900的一个或更多个方面由资源管理器302执行,方法900的一个或更多个方面由执行平台316执行,和/或方法900的一个或更多个方面由数据库管理器502的一个或更多个其他功能部件执行。
117.在深入研究方法900的具体描述的操作之前,注意,在一些实施例中,方法900包括将一个或更多个这里称为自适应聚合(ad)操作符的操作符“散布(sprinkling)”到查询计
划中。散布可以包括在一个或更多个节点(例如,在每个节点)的聚合操作符下方的连接下方插入at操作符,这样做在语义上是允许的,因为它保留了查询的语义。一旦散布完成,执行(修改的)查询计划,散布的at操作符初始设置为活动状态(如下所述)。在每个插入的at操作符的情况下,监控一个或更多个这里称为成本效率度量的度量,并且如果一个或更多个监控的度量指示阈值低效率条件(例如,根据被监控的度量的性质,高于或低于给定的阈值),则关闭给定的at操作符。在一个示例中,专用类型的at操作符是自适应尝试去重复操作符,不同之处在于给定的尝试去重复操作符仅执行不同的(去重复)操作,而自适应聚合操作符也执行聚合。
118.因此,at操作符被插入允许的地方,被激活,然后如果他们没有帮助(例如,帮助不够)则被选择性地去激活。如上所述,传统的查询优化器在涉及聚合放置时可能“猜错”,因此本公开的实施例消除了猜测,并且不依赖于查询优化器来制定最终的“完美”计划:插入at操作符,然后选择性地保持活动或去激活,目的是提高相关查询处理的整体效率。因此,本公开的实施例涉及下推(例如,插入)at操作符和/或其他聚合,其中本公开的实施例的运行时自适应性消除或至少大大降低了整体性能降级的风险。作为这种运行时自适应策略的一部分,如下文和本文其他地方所讨论的,认识到被处理的数据不需要完全无重复就能有效地缩减。换句话说,部分去重复仍然比没有好,事实上相当有帮助。
119.关于方法900,在操作902,数据库管理器502获得对应于查询的查询计划。在一个实施例中,这可以包括接收查询,至少部分地通过解析查询来生成解析的查询,以及至少部分地基于解析的查询来编译查询计划。作为数据库管理器502可以在操作902获得的查询计划的示例,注意力转向图10,图10示出了根据至少一个实施例的示例查询计划1000。
120.从顶部向下开始,查询计划1000以表示为“agg1”的聚合结束。在agg1之前是一个连接,表示为“join1”。join1的左输入是由函数scan1表示的第一个表t1。join1的右输入是第二个连接,标记为“join2”。join2的左输入是标记为“join3”的第三个连接,而右输入是来自表t3(表示为“scan3”)的数据。join3的左输入是表t2(表示为“scan2”)的数据,join3的右输入是第二聚合(表示为“agg2”)的输出。agg2的输入是第四连接,表示为“join4”,其左右输入是来自表t4和t5(分别表示为“scan4”和“scan5”)的数据。
121.返回图9,在操作904,数据库管理器502识别查询计划1000中的一个或更多个连接聚合序列,其中每个识别的连接聚合序列包括位于聚合操作符下方的连接操作符。在查询计划1000中,有两个连接聚合序列:join1

agg1和join4

agg2。在这两种情况下,相应的连接被定位在查询计划1000中的相应聚合的正下方。然而,也可能是这样的情况,即多连接聚合序列被识别,其中一系列的多个连接位于给定的聚合下方。这样的例子是join3

join2

join1

agg1。为简单起见,本文讨论了连接聚合序列join1

agg1和join4

agg2。
122.在操作906,数据库管理器502至少部分地通过对于在操作904识别的每个连接聚合序列,确定连接聚合序列中的聚合操作符是否是对重复不敏感的聚合操作符,并且如果是,则在相应的连接操作符的至少一个输入下方插入自适应重复移除操作符(例如,at操作符),来生成修改的查询计划。重复不敏感的聚合操作符的示例包括查找最大值聚合操作符、查找最小值聚合操作符和查找不同值的数量聚合操作符。其他例子也可以在这里列出。如上所述,单连接聚合序列join1

agg1和join4

agg2在这里是作为例子讨论的,但是在一些实施例中,操作906涉及在查询计划中的聚合之前的一系列多个连接下方插入自适应
重复移除操作符。
123.在执行操作906时,数据库管理器502可以在查询计划1000的每个节点处进行自顶向下的评估,以识别可以在每个这样的节点处插入的语义上允许的聚合操作符,从而保留查询计划的整体语义。在一些实施例中,在给定连接聚合序列的给定连接上方进行语义允许性的这种评估,然后将所确定的属性基本上推到给定连接下方,作为确定用于插入给定连接下方的语义允许聚合操作符列表的至少一部分。如本文所述,自适应重复移除操作符(例如,at操作符)在本公开的实施例中被视为聚合操作符的特殊情况,因为它不产生奇异结果(例如,所识别的最大值)。
124.在执行操作906之后,数据库管理器502可能已经生成了修改的(例如,增强的)查询计划,例如图11中描绘的示例修改的查询计划1100。从图11中可以看出,两个at操作符已经被插入到查询计划1000中,以得到修改的查询计划1100:at1 1102和at2 1104。在所描述的实施例中,at1 1102和at2 1104已经分别插入join1和join4的右侧下方。在其他实施例中,at1 1102和at2 1104中的一个或两个可以插入到相应连接的左侧下方。在一些实施例中,在join1和join4中的一个或两个的情况下,at可以插入两侧下方。此外,尽管在图11中没有明确描述,join1和join4中的一个或两个可以包括各自的构建侧和探查侧。
125.返回图9并继续方法900,在操作908,数据库管理器502执行修改后的查询计划1100以获得查询结果,其中执行修改后的查询计划1100包括针对每个插入的自适应重复移除操作符(即,针对at1 1102和at2 1104中的每一个):(i)最初以活动的插入的自适应重复移除操作符操作;(ii)监控所插入的自适应重复移除操作符和相应的连接操作符中的至少一个的至少一个运行时成本效率度量;以及(iii)如果所述至少一个被监控的运行时成本效率度量指示阈值低效率条件,则去激活所插入的自适应重复移除操作符。
126.现在描述at1 1102的一些示例性特征,应当理解,这些特征也可以以相等的力应用于at2 1104,或者相反,和/或通常应用于根据本公开的任何插入的自适应重复移除操作符。在至少一个实施例中,当活动时,at1 1102操作以移除对于至少一个重复移除操作符关键字具有重复值的至少一些记录。在一些实施例中,at1 1102使用布隆过滤器或其他类似机制来跟踪观察到的关键字值。
127.注意,在某些情况下,如果相关连接(例如join1)的关键字不同于at1 1102的重复移除操作符关键字,则at1 1102可以被适配为使用连接关键字和它自己的关键字的集合合并。通常,at1 1102的重复移除操作符关键字是at1 1102在其中寻找重复并基于这样的重复移除行的属性(例如,列)。在许多情况下,at1 1102的重复移除操作符关键字至少在1102被插入的连接的一侧与连接关键字相同。在某些情况下,重复移除操作符关键字匹配位于连接(例如join1)上方的聚合(例如agg1)的聚合关键字,插入的at1 1102位于该连接下方。因此,如果agg1正在寻找列c1的最小值和列c2的最大值,c1和c2可以被设置为at1 1102的重复移除操作符关键字。
128.如上所述,在一些实施例中,当活动时,at1 1102的操作受存储器预算的限制。因此,at1 1102可以摄取达到其存储器预算的行,查找并移除具有其关键字重复项的记录,并且如下面更全面描述的,如果它没有导致输出到join1的右输入的行数的至少阈值缩减,则关闭它自己(例如,进入直通模式)。用存储器预算限制at1 1102的操作减少了由插入的重复移除操作引起的性能退化的可能性。在至少一个实施例中,at1 1102将仅使用其已经被
实例化的工作器(例如,线程、执行节点等)的主存储器。在这样的实施例中,at1 1102不溢出任何数据(到例如本地磁盘或远程储存器)。在这样的实施例中,作为该属性的结果,at1 1102不保证总是对其输入记录流相对于其重复移除操作符关键字(也可称为其重复移除关键字)进行完全去重复。相反,在至少一些实施例中,at1 1102简单地尝试对输入记录进行去重复,直到达到其配置的存储器容量。
129.关于去激活,在至少一些实施例中,去激活at1 1102包括将at1 1102置于直通模式,在该模式中,不评估记录是否与其他记录重复。因此,在一些实施例中,at1 1102观察它自己的输入和输出记录,并且如果它检测到它不是足够有效(例如,阈值有效)和/或有益的,则切换到直通模式。
130.如上所述,在至少一个实施例中,如果至少一个监控的运行时间成本效率度量指示阈值低效率条件,则at1 1102去激活。作为指示阈值低效率条件的至少一个监控的运行时成本效率度量的一个例子,至少一个监控的运行时成本效率度量可以小于相应的阈值。例如,至少一个监控的运行时成本效率度量可以是或包括缩减率,并且监控的运行时成本效率度量指示阈值低效率条件可以包括监控的缩减率小于缩减率阈值。
131.作为至少一个监控的运行时成本效率度量指示阈值低效率条件的另一个例子,至少一个监控的运行时成本效率度量可以大于相应的阈值。例如,至少一个监控的运行时成本效率度量可以是或包括连接操作符的爆炸因子,并且监控的运行时成本效率度量指示阈值低效率条件可以包括监控的爆炸因子大于爆炸因子阈值。
132.在一个示例中,连接的爆炸因子是相对于其输入之一(例如,构建侧或探查侧)定义的。因此,在本例中,爆炸因子定义为观察到的连接输出行数除以连接任一侧的输入行数。在一些实施例中,一旦修改的查询计划1100已经被完全处理,数据库管理器502向请求实体(例如,用户)输出获得的查询结果。这种输出可以采取或包括保存实例化视图、显示报告、向请求实体传输结果数据集等形式。
133.图12示出了根据至少一个实施例的示例方法1200。方法1200是有条件地继续执行查询计划的一部分的方法。在各种不同的实施例中,方法1200可以由任何计算和通信设备或这种设备的系统来执行,该计算和通信设备或这种设备的系统被适当地配备、编程和配置以执行这里描述的操作。作为示例而非限制,方法1200在下面被描述为由数据库管理器502执行,这可以涉及方法1200的一个或更多个方面由资源管理器302执行,方法1200的一个或更多个方面由执行平台316执行,和/或方法1200的一个或更多个方面由数据库管理器502的一个或更多个其他功能部件执行。
134.图12的方法1200在某些方面类似于图9的方法900,因此不再详细描述。一个相似之处在于,在至少一些实施例中,两种方法都涉及监控位于查询计划中的连接操作符下方的给定聚合操作符的一个或更多个运行时成本效率度量。一个不同之处在于,在方法1200中监控的连接下方的聚合操作符不一定是如在方法900的所述实施例中的情况那样的自适应重复移除操作符。方法900和方法1200都涉及基于一个或更多个监控的成本效率度量来选择性地关闭连接下方的聚合操作符。方法900和方法1200之间的进一步相似和不同将从图12的描述的平衡中变得明显。
135.现在转到方法1200,在操作1202,数据库管理器502执行对应于查询的查询计划,其中查询计划包括位于连接操作符下方的聚合操作符。作为示例,结合方法1200的所述实
施例执行的查询计划可以是图13中描绘的示例查询计划1300。在1300中,从顶部向下开始并从左到右工作,查询计划1300以表示为agg1 1306的聚合结束,该聚合从表示为join1 1304的连接接收输出。join1 1304的左输入是表示为scan1的输入表t1的数据,而join1 1304的右输入是表示为agg2 1302的聚合的输出。agg2 1302的输入是输入表t2(表示为scan2)的数据。
136.如上所述,查询计划1300与查询相关联。在一个实施例中,数据库管理器502接收查询,并根据接收到的查询生成查询计划1300。在至少一个这样的实施例中,数据库管理器502首先生成不包括聚合操作符agg2 1302的初始查询计划(未示出),然后将agg2 1302插入到该初始查询计划中以生成查询计划1300。在各种不同的实施例中,也可以使用生成查询计划1300的其他序列。
137.如图13所示,除了agg2 1302之外,查询计划1300还包括agg1 1306,其位于join1 1304上方。在至少一个实施例中,agg2 1302和agg1 1306是彼此相同的聚合操作符类型(例如,求和、平均、标准偏差等)。不管agg2 1302是什么类型的聚合,在各种不同的实施例中,agg1 1306可以是重复不敏感聚合操作符或重复敏感聚合操作符。
138.现在回到图12,当执行查询计划1300时,数据库管理器502监控(在操作1204)执行查询计划1300的至少一个运行时成本效率度量。在至少一个实施例中,至少一个监控的运行时成本效率度量包括agg2 1302的缩减率。该至少一个被监控的运行时成本效率度量还可以或替代地包括join1 1304的爆炸因子。至少一个被监控的运行时成本效率度量可以包括的另一个选项是查询计划1300的执行时间;也就是说,在一些实施例中,数据库管理器502可以在确定是将agg2 1302保持在活动状态还是去激活它时考虑整体执行时间。在一个实施例中,数据库管理器502可以至少部分地通过将总执行时间(在执行期间到目前为止)与预期时间、平均时间等进行比较来这样做。此外,方法1200当然适用于比查询计划1300更复杂的查询计划,因为该计划是作为简单示例而不是作为限制来提供的。
139.在操作1206,同样在执行查询计划1300的同时,数据库管理器502至少部分地基于在操作1204被监控(例如,被监控)的至少一个运行时成本效率度量来去激活agg2 1302。在至少一个实施例中,去激活agg2 1302包括将agg2 1302置于直通模式,在该模式中,所摄取的记录被简单地输出,而不被分析或以其他方式处理成给定的聚合函数。
140.在一个实施例中,数据库管理器502响应于至少一个监控的运行时成本效率度量指示阈值低效率条件来执行操作1206。作为示例,至少一个运行时成本效率度量中的给定运行时成本效率度量可以大于或小于给定阈值,这取决于度量的类型。作为示例,阈值低效率条件可以包括缩减速率小于缩减速率阈值和/或爆炸因子大于爆炸因子阈值。
141.在一些实施例中,一旦查询计划1300已经被完全处理,数据库管理器502从执行查询计划1300获得对查询的查询结果,并将获得的查询结果输出到请求实体(例如,用户)。这种输出可以采取或包括保存实例化视图、显示报告、向请求实体传输结果数据集等形式。
142.图14是根据本主题技术的一些实施例的查询执行计划的尝试去重复优化的示意图。图14示出了尝试去重复查询优化技术。左侧的图1400示出了原始查询执行计划片段,其中聚合操作在连接操作上方。右侧的图1450示出了在将尝试去重复操作推到计划两侧的连接操作下方之后的查询执行计划。注意,这仅在聚合函数(在图10中表示为fl和fr)是重复不可知的时才是可能的。这种优化也是可选的,因为尝试去重复操作可以推送到任一侧,而
不需要总是推送到连接操作的两侧。右侧的图1450还示出了尝试去重复操作中的不同关键字来自哪里。在一个实施例中,如果连接关键字不同于不同的关键字,这些关键字可能需要与连接关键字组合。这种优化是局部的,并行工作器和线程之间不需要相互通信。
143.尝试去重复操作是空间使用量有限的操作符。这意味着尝试去重复操作将仅使用主存储器,不会将数据溢出到本地磁盘或远程储存器。因此,尝试去重复操作符无法保证总是通过计算输入记录的不同值来进行去重复。相反,尝试去重复操作符尝试对输入记录进行去重复,直至达到配置的存储器容量。尝试去重复操作符可以观察它自己的输入和输出记录,如果尝试去重复操作符检测到它不够缩减,则切换到直通模式。
144.图15是根据本主题技术的一些实施例的查询执行计划的局部广义优化的示意图。与图14所示的尝试去重复优化相比,局部广义优化是通用的,可以应用于任何聚合函数。局部广义优化对并行执行查询的每个线程是局部的,不需要全局通信。左侧示出了图1500,该图1500包括在连接顶部的聚合,在连接探查下方具有布隆过滤器。在转换之后,如图表1550所示,自适应聚合操作符被推到连接的探查侧下方,布隆过滤器位于连接下方。第一条虚线说明连接构建操作符将布隆过滤器作为构建过程的一部分进行构建,并与布隆过滤器一起传递构建侧的信息,包括构建侧连接关键字基数和不同值的数量。第二条虚线说明了从布隆过滤器传递到下推聚合的附加信息。这里,布隆过滤器传递它从构建侧接收到的信息以及布隆过滤器本身的选择性到下推聚合。在一个实施例中,这是通过将聚合操作与为连接构建操作符构建散列表相结合来评估的。在一个实施例中,该优化与其他步骤互不相关,并且可以独立应用。图15中的图表进一步说明了下推聚合中的本地决策过程。如图所示,下推聚合“agg_p”将从连接的构建侧接收的信息作为连接爆炸性的代理,并进一步查看观察到的缩减率,以确定继续评估聚合是否是有益的或切换到直通模式。
145.局部广义优化有许多优点。一个优点是,与非优化查询计划相比,聚合下推是自适应的,并且避免了性能缩减。另一个优点是局部广义优化简单,不容易出错,因为优化技术是在一个小线程中局部执行的。另一个优点是本地广义优化器是通用的,适用于所有类型的聚合函数。
146.图16是根据本主题技术的一些实施例的用于查询执行计划的全局广义优化的示意图。全局广义优化是一种健壮而精确的优化,代价是需要在执行查询的线程和节点之间进行全局通信。图16顶部的图1600对应于由图1650表示的变换,具有与关于图15描述的计划相同的形状。图1650中的第一条虚线表示从连接探查之后返回到下面的下推聚合的信息反馈。在开始时,可以关闭下推聚合,并且在观察连接信息之后,可以重新打开下推聚合。如果认为连接具有足够的爆炸性,则可以重新打开下推聚合。在评估下推聚合一段时间之后,如果缩减率不满足阈值,则可以关闭下推聚合操作。
147.图16底部的图1670示出了当多个线程和服务器并行执行计划时反馈过程如何工作。来自每个工作的连接探查操作符的信息,如连接基数、爆炸性和倾斜,通过全局通信消息通道广播给所有工作器。每个工作器的聚合操作接收全局信息,用观察到的局部信息评估全局信息,并确定是否在局部级别切换到直通模式。
148.全局广义优化是准确的,因为在执行时观察和评估了连接探查的确切属性。此外,优化具有全局信息,因此可以检测连接操作中的倾斜。在一个实施例中,这意味着下推聚合有更大的机会做出打开或关闭的正确判定。
149.图17是根据本主题技术的一些实施例的聚合实例化视图(mv)重写优化的示意图。图17左侧的图1700示出了在连接操作顶部具有聚合操作的原始计划,其中连接操作直接在两个表之上。当只有连接的一侧是基表扫描而连接的另一侧也可能是连接时,可以应用聚合mv重写优化。图17右侧的图1750示出了在聚合mv重写优化进行转换之后的查询执行计划。在一个实施例中,假设聚合mv是在基表上创建的,并且mv中的聚合关键字是下推聚合的超集,则查询计划可以在任意一侧的连接下方被重写,以在mv上进行查询。在一个实施例中,在mv扫描的顶部仍然会有补偿聚合,即使mv本身包括该聚合。
150.聚合mv重写优化实现了许多优点。一个优点是,优化可以利用mv来加速查询处理,特别是在聚合是缩减的,并且表扫描很昂贵的情况下。另一个优点是,通过将聚合下推到连接下方,可以利用和增量维护mv。这确保了良好的查询性能,而不会产生昂贵的mv维护成本。
151.图18是根据本主题技术的一些实施例的查询执行计划的聚合框架扩展的示意图。图1800中所示的查询执行计划使用现有的聚合框架,该框架通常包括最多两个聚合,包括父聚合和子聚合。在每个线程和/或节点上评估子聚合。父聚合使用每个子聚合的结果,并执行最终的全局聚合操作。通常,在查询计划树中,父聚合会直接出现在子聚合的顶部,这是不灵活的。在查询计划中,对应于图1800,父聚合和子聚合被表示为a_parent和a_child。子聚合的输入数据类型表示为t_input,输出数据类型表示为t_intermediate,输出类型表示为t_output。
152.聚合框架扩展将聚合分为三个不同的部分,而不是传统的两个部分。如图1850所示的聚合框架扩展包括顶部聚合、中间聚合和底部聚合。顶部聚合表示为a_top,中间聚合表示为a_intermediate,底部聚合表示为a_bottom。父聚合与原始父聚合保持不变。但是,引入了一种中间聚合类型,无需通信即可在本地应用。在查询计划中,聚合不需要彼此相邻,并且可以被推送通过连接。a_intermediate和a_bottom都只局部应用。中间聚合和子聚合也具有不同于父聚合的自适应机制。a_bottom有输入类型t_input和输出类型t_intermediate。a_intermediate和t_intermediate体一样有输入和输出两种类型。a_top有输入t_intermediate和输出类型t_output。任何任意的聚合函数都可以这样拆分,所以框架更加灵活和强大。
153.图19示出了根据至少一个实施例的示例计算设备1900。在一些实施例中,计算设备1900用于实现本文所讨论的一个或更多个系统和部件。例如,计算设备1900可以允许用户或管理员访问资源管理器302。此外,计算设备1900可以与本文描述的任何系统和部件进行交互。因此,计算设备1900可以用于执行各种程序和任务,诸如本文所讨论的那些程序和任务。计算设备1900可以用作服务器、客户端或任何其他计算实体。计算设备1900可以是多种计算设备中的任何一种,例如台式计算机、笔记本计算机、服务器计算机、手持计算机、移动设备、平板电脑等。
154.在所描绘的实施例中,计算设备1900包括一个或更多个处理器1902、一个或更多个存储器设备1904、一个或更多个接口1906、一个或更多个大容量存储设备1908和一个或更多个输入/输出设备1910,所有这些都耦合到总线1912。处理器1902包括执行存储在存储器设备1904和/或大容量存储设备1908中的指令的一个或更多个处理器或控制器。处理器1902还可以包括各种类型的计算机可读介质,例如高速缓冲存储器。
155.存储器设备1904可以包括各种计算机可读介质,例如易失性存储器(例如,随机存取存储器(ram))和/或非易失性存储器(例如,只读存储器(rom))。存储器设备1904还可以包括可重写rom,例如闪存。
156.接口1906可以包括允许计算设备1900与其他系统、设备或计算环境交互的各种接口。示例接口1906包括任意数量的不同网络接口,例如到局域网(lan)、广域网(wan)、无线网络、互联网等的接口。
157.大容量存储设备1908可以包括各种计算机可读介质,例如磁带、磁盘、光盘、固态存储器(例如闪存)等。大容量存储设备1908中还可以包括各种驱动器,以能够从各种计算机可读介质读取和/或向其写入。大容量存储设备1908可以包括可移动介质和/或不可移动介质。
158.输入/输出设备1910可以包括允许向计算设备1900输入数据和/或从计算设备1900检索数据和/或其他信息的各种设备。示例输入/输出设备1910包括光标控制设备、键盘、小键盘、麦克风、监视器或其他显示设备、扬声器、打印机、网络接口卡、调制解调器、透镜、ccd或其他图像捕获设备等。
159.总线1912允许处理器1902、存储器设备1904、接口1906、大容量存储设备1908和输入/输出设备1910彼此通信,以及与可以耦合到总线1912的其他设备或部件通信。总线1912代表几种类型的总线结构中的一种或多种,例如系统总线、pci总线、ieee 1394总线、usb总线等。
160.可执行指令和机器存储介质
161.各种存储器可以存储一组或多组指令1914和数据结构(例如,软件),其体现或被这里描述的任何一种或多种方法或功能所利用。当由处理器1902执行时,这些指令1914促使各种操作来实现所公开的实施例。
162.如本文所使用的,术语“机器存储介质”、“设备存储介质”和“计算机存储介质”意思相同,并且可以在本公开中互换使用。这些术语指的是存储可执行指令和/或数据的单个或更多个存储设备和/或介质(例如,集中式或分布式数据库和/或相关联的高速缓存和服务器)。相应地,这些术语应当被认为包括但不限于包括处理器内部或外部的存储器的固态存储器以及光和磁介质。机器存储介质、计算机存储介质和/或设备存储介质的具体示例包括非易失性存储器,非易失性存储器包括例如半导体存储器设备,诸如可擦除可编程只读存储器(eprom)、电可擦除可编程只读存储器(eeprom)、现场可编程门阵列(fpga)和闪存设备;磁盘,如内部硬盘和可移除磁盘;磁光盘;以及cd

rom和dvd

rom光盘。术语“机器存储介质”、“计算机存储介质”和“设备存储介质”具体排除了载波、调制数据信号和其他这样的介质(其中的至少一些包含在下面讨论的术语“信号介质”中)。
163.传输介质
164.在各种示例实施例中,网络的一个或更多个部分可以是自组织网络(adhoc network)、内联网、外联网、虚拟专用网络(vpn)、局域网(lan)、无线lan(wlan)、广域网(wan)、无线wan(wwan)、城域网(man)、互联网、互联网的一部分、公共交换电话网络(pstn)的一部分、普通老式电话服务(pots)网络、蜂窝电话网络、无线网络、网络、另一种类型的网络、或两种或更多种这样的网络的组合。例如,这里描述的任何网络或部分网络可以包括无线或蜂窝网络,并且所利用的耦合可以是码分多址(cdma)连接、全球移动通信系
统(gsm)连接或另一种类型的蜂窝或无线耦合。在该示例中,该耦合可以实现多种类型的数据传输技术中的任何一种,例如单载波无线电传输技术(1xrtt)、演进数据优化(evdo)技术、通用分组无线电服务(gprs)技术、增强型数据速率gsm演进(edge)技术、包括3g的第三代合作伙伴项目(3gpp)、第四代无线(4g)网络、通用移动电信系统(umts)、高速分组接入(hspa)、微波接入全球互通(wimax)、长期演进(lte)标准、其他由各种标准制定组织、其他远程协议或其他数据传输技术定义的协议。
165.指令1914可以使用传输介质经由网络接口设备(例如,网络接口部件)并利用多种众所周知的传输协议(例如,超文本传输协议(http))中的任何一种在网络上传输或接收。类似地,指令1914可以使用传输介质经由到一个或更多个设备的耦合(例如,对等耦合)来传输或接收。术语“传输介质”和“信号介质”意思相同,在本公开中可以互换使用。术语“传输介质”和“信号介质”应被理解为包括能够存储、编码或携带由计算设备1900执行的指令1914的任何无形介质,并且包括数字或模拟通信信号或便于这种软件的通信的其他无形介质。因此,术语“传输介质”和“信号介质”应被理解为包括任何形式的调制数据信号、载波等。术语“调制数据信号”意指这样的信号:其具有以对信号中的信息进行编码的这样的方式设置或更改的其特性中的一个或更多个特性。
166.计算机可读介质
167.如上所述,术语“机器可读介质”、“计算机可读介质”和“设备可读介质”意思相同,并且可以在本公开中互换使用。这些术语被定义为包括机器存储介质和传输介质。因此,这些术语包括存储设备/介质和载波/调制数据信号。
168.为了说明的目的,程序和其他可执行程序部件在本文中被示为离散块,尽管应当理解,这样的程序和部件可以在不同时间驻留在计算设备1900的不同存储部件中并且由一个或更多个处理器1902执行。可替代地,本文描述的系统和过程可以以硬件或硬件、软件和/或固件的组合来实现。例如,可以对一个或更多个专用集成电路(asic)进行编程,以执行本文所述的系统和过程中的一个或更多个系统和过程。
169.实施例的例子
170.以下是用于自适应增强查询计划的系统和方法的实施例的一些示例的列表。
171.示例1是一种方法,包括:接收查询计划,该查询计划包括一组查询操作,该组查询操作包括至少一个聚合和至少一个连接操作;分析查询计划以识别冗余的聚合;至少部分基于所述分析来移除所述聚合;确定对应于查询计划的至少一个查询操作的至少一个聚合属性;至少部分基于所述至少一个聚合属性,在所述查询计划中插入至少一个自适应聚合操作符;以及至少部分地基于查询计划中插入的至少一个自适应聚合操作符来提供修改的查询计划。
172.示例2包括示例1的主题,其中分析查询计划以识别冗余的聚合可选地包括:当第二聚合被包括在查询计划中时,确定第一聚合被保证,第一聚合和第二聚合对应于查询计划的不同部分处的不同查询操作,查询计划包括具有多个节点的树结构,每个节点对应于特定查询操作;以及作为上拉阶段的一部分,从查询计划中移除第一聚合。
173.示例3包括示例1和2中任一个的主题,其中确定对应于查询计划的至少一个查询操作的至少一个聚合属性可选地包括:确定用于与查询计划的至少一个查询操作相关联的至少一个聚合属性;以及作为下推阶段的一部分,将至少一个聚合属性分配给查询计划的
至少一个查询操作。
174.示例4包括示例1

3中任一个的主题,其中可选地,至少一个聚合属性包括一组聚合属性,其中可选地,每个聚合属性被分配给查询计划的特定查询操作,并且被分配了聚合属性的多个查询操作对应于查询计划中的一组查询操作,当在该组查询操作的每个查询操作处评估特定聚合时,该组查询操作在语义上是等效的。
175.示例5包括示例1

4中任一个的主题,其中一组聚合属性可选地包括可拆分属性、可分解属性或重复敏感性属性。
176.示例6包括示例1

5中任一个的主题,其中在查询计划中插入至少一个自适应聚合操作符可选地包括:分析特定聚合属性以确定要分配给查询计划的特定查询操作的聚合操作符的类型;以及至少部分地基于阈值来生成至少一个自适应聚合操作,该阈值对应于与该聚合相关联的关键字的数量或关键字长度。
177.示例7是一种方法,包括:接收查询计划,该查询计划包括一组查询操作,该组查询操作包括至少一个聚合;分析查询计划以识别聚合;确定所述聚合是重复不敏感的;至少部分基于对来自查询计划的特定查询操作的分析,在查询计划中插入至少一个自适应聚合操作符;以及至少部分地基于查询计划中插入的至少一个自适应聚合操作符来提供修改的查询计划。
178.示例8包括示例7的主题,其中至少一个自适应聚合操作符可选地包括自适应尝试去重复操作符。
179.示例9包括示例7

8中任一个的主题,其中可选地,自适应尝试去重复操作符被插入到连接构建操作符的下方,或者被插入到连接探查操作符的下方。
180.示例10包括示例7

9中任一个的主题,其中可选地,自适应尝试去重复操作符由本地存储器预算限制。
181.示例11包括示例7

10中任一个的主题,其中可选地,当缩减因子低于阈值时,自适应尝试去重复操作符切换到直通模式。
182.示例12包括示例7

11中任一个的主题,其中至少一个自适应聚合操作符可选地包括子聚合操作符。
183.示例13包括示例7

12中任一个的主题,其中可选地,子聚合操作符被插入到散列连接的构建侧的下方,其中,连接构建操作符在连接构建操作符下方具有散列链接。
184.示例14包括示例7

13中任一个的主题,其中可选地,子聚合操作符由本地存储器限制,并基于本地观察到的缩减率切换到直通模式。
185.示例15包括示例7

14中任一个的主题,其中至少部分基于对特定查询操作的分析,将至少一个自适应聚合操作符插入查询计划可选地包括:基于一组因子分析特定查询操作的数据流,其中该组因子包括通过特定查询操作的数据,或者特定查询操作或其他查询操作的存储器使用。
186.示例16包括7

15中任一个的主题,其中查询计划可选地包括树结构,树结构具有多个节点并具有顶点,每个节点对应于特定的查询操作,顶点表示来自多个节点的一对节点之间的数据流。
187.示例17是一种系统,包括:至少一个处理器;以及包括指令的存储器设备,当所述指令被所述至少一个处理器执行时,使得所述至少一个处理器执行操作,所述操作包括:接
收查询计划,所述查询计划包括一组查询操作,所述一组查询操作包括至少一个聚合和至少一个连接操作;分析查询计划以识别冗余的聚合;至少部分基于所述分析来移除所述聚合;确定对应于查询计划的至少一个查询操作的至少一个聚合属性;至少部分基于所述至少一个聚合属性,在所述查询计划中插入至少一个自适应聚合操作符;以及至少部分地基于查询计划中插入的至少一个自适应聚合操作符来提供修改的查询计划。
188.示例18包括示例17的主题,其中分析查询计划以识别冗余的聚合还导致至少一个处理器执行还可选地包括以下操作的操作:当第二聚合被包括在查询计划中时,确定第一聚合被保证,第一聚合和第二聚合对应于查询计划的不同部分处的不同查询操作,查询计划包括具有多个节点的树结构,每个节点对应于特定查询操作;以及作为上拉阶段的一部分,从查询计划中移除第一聚合。
189.示例19包括示例17

18中任一个的主题,其中确定对应于查询计划的至少一个查询操作的至少一个聚合属性还使得至少一个处理器执行还可选地包括以下操作的操作:确定用于与查询计划的至少一个查询操作相关联的至少一个聚合属性;以及作为下推阶段的一部分,将至少一个聚合属性分配给查询计划的至少一个查询操作。
190.示例20包括示例17

19中任一个的主题,其中至少一个聚合属性可选地包括一组聚合属性,其中每个聚合属性被分配给查询计划的特定查询操作,并且被分配了聚合属性的多个查询操作对应于查询计划中的一组查询操作,当在该组查询操作的每个查询操作处评估特定聚合时,该组查询操作在语义上是等效的。
191.示例21包括示例17

20中任一个的主题,其中一组聚合属性可选地包括可拆分属性、可分解属性或重复敏感性属性。
192.示例22包括示例17

21中任一个的主题,其中在查询计划中插入至少一个自适应聚合操作符还使得至少一个处理器执行还可选地包括以下操作的操作:分析特定聚合属性以确定要分配给查询计划的特定查询操作的聚合操作符的类型;以及至少部分地基于阈值来生成至少一个自适应聚合操作,该阈值对应于与该聚合相关联的关键字的数量或关键字长度。
193.示例23是一种系统,包括:至少一个处理器;以及包括指令的存储器设备,当所述指令被所述至少一个处理器执行时,使得所述至少一个处理器执行操作,所述操作包括:接收查询计划,所述查询计划包括一组查询操作,所述一组查询操作包括至少一个聚合;分析查询计划以识别聚合;确定所述聚合是重复不敏感的;至少部分基于对来自查询计划的特定查询操作的分析,在查询计划中插入至少一个自适应聚合操作符;以及至少部分地基于查询计划中插入的至少一个自适应聚合操作符来提供修改的查询计划。
194.示例24包括主题示例23,其中至少一个自适应聚合操作符可选地包括自适应尝试去重复操作符。
195.示例25包括示例23

24中任一个的主题,其中可选地,自适应尝试去重复操作符被插入到连接构建操作符的下方,或者被插入到连接探查操作符的下方。
196.示例26包括示例23

25中任一个的主题,其中可选地,自适应尝试去重复操作符由本地存储器预算限制。
197.示例27包括示例23

26中任一个的主题,其中可选地,当缩减因子低于阈值时,自适应尝试去重复操作符切换到直通模式。
198.示例28包括示例23

27中任一个的主题,其中至少一个自适应聚合操作符可选地包括子聚合操作符。
199.示例29包括示例23

28中任一个的主题,其中可选地,子聚合操作符被插入到散列连接的构建侧下方,其中,连接构建操作符在连接构建操作符下方具有散列链接,其中,子聚合操作符由本地存储器限制,并基于本地观察到的缩减率切换到直通模式。
200.示例30包括示例23

26中任一个的主题,其中至少部分地基于对特定查询操作的分析将至少一个自适应聚合操作符插入查询计划还使得至少一个处理器执行还可选地包括以下操作的操作:基于一组因子分析特定查询操作的数据流,其中该组因子包括通过特定查询操作的数据,或者特定查询操作或其他查询操作的存储器使用。
201.结论
202.为了促进对本公开的原理的理解,在附图中示出了各种实施例。本文公开的实施例并不旨在穷举或将本公开限制于以上详细描述中公开的精确形式。相反,已经选择了所描述的实施例,使得本领域的其他技术人员可以利用它们的教导。因此,不打算由此限制本公开的范围。
203.在本公开的任何实例中,包括在权利要求中,其中诸如第一、第二和第三的数字修饰语用于指代部件、数据(例如,值、标识符、参数等)和/或任何其他元素,这种修饰语的使用不旨在表示或规定以这种方式引用的元素的任何特定或所需顺序。相反,这种修饰语的任何这种使用旨在帮助读者将元素彼此区分开来,并且不应被解释为坚持任何特定的顺序或具有任何其他意义,除非这种顺序或其他意义在本文中被清楚和肯定地解释。
204.此外,与此处所描述的实体和布置,包括结合附图描述和描绘的实体和布置,是作为示例而不是作为限制来呈现的事实相一致,关于特定附图“描绘了什么”、“特定附图中的特定元素或实体是什么”或“具有什么”的任何和所有陈述或其他指示,以及没有通过诸如“在至少一个实施例中”的条款明确地自我限定的任何和所有类似陈述,因此可以孤立地和脱离上下文地理解为绝对的,因此作为对所有实施例的限制,只能被正确地理解为由这样的条款建设性地限定。正是出于类似于陈述的简洁和清晰的原因,该隐含的限定性条款在本公开中没有反复地重复。
205.在本公开中,根据提供的定义使用各种术语。此外,要注意的是,结合本文阐述的定义,本文使用的定义的术语和短语包括所提供的定义以及对术语或短语的含义的任何一般和常规理解。
206.还应注意,如在本说明书和所附权利要求中所使用的,单数形式“一”、“一个”和“该”包括复数指代物,除非上下文另有明确规定。
207.如本文所使用的,术语“包括”、“包含”、“含有”、“以
……
为特征”及其语法等价物是包含性的或开放式的术语,不排除额外的、未引用的元素或方法步骤。
208.在本说明书中描述的许多功能单元可以被实现为一个或更多个部件,这是用于更具体地强调其实现独立性的术语。例如,部件可以实现为包括定制的超大规模集成(vlsi)电路或门阵列的硬件电路,诸如逻辑芯片、晶体管或其他分立元件的现成半导体。部件也可以在可编程硬件设备中实现,例如现场可编程门阵列(fpga)、可编程阵列逻辑、可编程逻辑设备等。
209.部件也可以用软件实现,以便由各种类型的处理器执行。可执行代码的所标识部
件可以例如包括计算机指令的一个或更多个物理或逻辑块,其可以例如被组织为对象、程序或函数。然而,所标识部件的可执行文件不需要物理上定位在一起,而是可以包括存储在不同位置的不同指令,当逻辑上连接在一起时,这些指令包括部件并实现对于该部件的所述目的。
210.实际上,可执行代码的部件可以是单个指令或许多指令,甚至可以分布在几个不同的代码段上、不同的程序中以及几个存储设备上。类似地,操作数据可以在本文中在部件内被识别和说明,并且可以以任何合适的形式体现并且被组织在任何合适类型的数据结构内。操作数据可以作为单个数据集收集,或者可以分布在包括不同存储设备的不同位置上,并且可以至少部分地仅作为系统或网络上的电子信号存在。部件可以为无源的或有源的,包括可操作以执行所需功能的代理。
211.整个本说明书对“示例”的引用意味着结合该示例描述的特征、结构或特性包括在本公开的至少一个实施例中。因此,整个本说明书在各个地方出现的短语“在示例中”不一定都指代相同的实施例。
212.如本文所用,为方便起见,可以在共同列表中呈现多个项、结构元素、组成元素和/或材料。然而,这些列表应该被解释为好像列表中的每个成员都被单独识别为一个独立且独特的成员。因此,仅基于其在共同组中的表述而没有相反的指示,此类列表中的任何个别成员都不应被解释为事实上等同于同一列表中的任何其他成员。另外,本文中可以参考本公开的各种实施例和示例以及其各种部件的替代方案。应当理解,这些实施例、示例和替代方案不应被解释为彼此的事实上的等同物,而是应被视为本公开的单独和自主的表示。
213.尽管为了清楚起见已经详细描述了前述内容,但是将明显的是,可以在不脱离其原理的情况下进行某些改变和修改。需指出,存在实现本文所述的过程和装置的许多替代方式。因此,本实施例应被认为是说明性的而不是限制性的。
214.本领域技术人员将理解,可以在不脱离本公开的基本原理的情况下对上述实施例的细节进行许多改变。因此,本公开的范围应仅由所附权利要求确定。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1