首页> 中国专利> 对数据库系统中的外部表进行查询

对数据库系统中的外部表进行查询

摘要

公开了用于对外部表进行查询的系统、方法和设备。一种方法包括将数据库平台连接到外部表,使得数据库平台对外部表具有读取访问权,而对外部表没有写入访问权。该方法包括接收包括谓词的查询,该查询至少针对外部表中的数据。该方法包括基于元数据确定外部表中的包括满足谓词的数据的一个或更多个分区。该方法包括基于元数据修剪外部表中不包括满足谓词的任何数据的所有分区。该方法包括生成包括多个离散子任务的查询计划。该方法包括基于元数据将多个离散子任务分配给执行平台中的一个或更多个节点。

著录项

说明书

相关申请的交叉引用

本申请要求在2019年4月16日提交的美国专利申请序列号16/385,774的优先权,其内容通过引用以其整体并入本文。

技术领域

本公开涉及数据库,并且更具体地涉及数据库系统中的外部表。

背景

数据库被广泛用于计算应用中的数据存储和访问。数据库存储的目标是以有组织的方式提供大量信息,以便可以对其进行访问、管理和更新。在数据库中,数据可以组织成行、列和表。不同的数据库存储系统可以用于存储不同类型的内容,诸如书目、全文、数字和/或图像内容。此外,在计算中,可以根据数据库的组织方法对不同的数据库系统进行分类。有许多不同类型的数据库,包括关系数据库、分布式数据库、云数据库、面向对象的数据库和其他数据库。

各种实体和公司都使用数据库来存储可能需要访问或分析的信息。在示例中,零售公司可以将所有销售交易的清单存储在数据库中。数据库可以包括有关交易何时发生、交易发生在哪里、交易的总成本、在交易中购买的所有物品的标识符和/或描述等信息。同一家零售公司还可以在该同一数据库中存储员工信息,例如,该信息可能包括员工姓名、员工联系信息、员工工作历史记录、员工薪酬率等。根据该零售公司的需求,员工信息和交易信息可以存储在同一数据库的不同表中。当零售公司想要得知存储在数据库中的信息时,其可能需要“查询”其数据库。该零售公司可能希望查找有关例如在特定商店工作的所有员工的姓名、在特定日期工作的所有员工的姓名、在特定时间范围内针对特定产品进行的所有交易的数据,等等。

当零售商店要查询其数据库以从数据库中提取某些组织的信息时,将针对数据库数据执行查询语句。该查询根据一个或更多个查询谓词返回特定数据,这些谓词指示该查询应返回哪些信息。该查询从数据库中提取特定数据,并将该数据格式化为可读形式。可以用数据库可理解的语言(诸如结构化查询语言(“SQL”))编写查询,以便数据库系统可以确定应定位哪些数据以及应如何返回数据。该查询可以请求存储在数据库内的任何相关信息。如果可以找到适当的数据来响应查询,则数据库有可能揭示复杂的趋势和活动。只能通过使用成功执行的查询来利用此功能。

传统的数据库管理要求公司提供基础设施和资源来管理数据中心中的数据库。传统数据库的管理可能非常昂贵,并且需要由拥有广泛技术技能的多个人员进行监督。传统的关系数据库管理系统(RDMS)需要大量的计算和存储资源,并且可扩展性有限。大量数据可以跨多个计算设备存储。服务器可以管理数据,使得客户通过内部操作对其可访问。对于希望拥有内部数据库服务器的实体,该实体必须在用于数据库的硬件和基础设施的资本投资以及用于存储数据库基础设施的大量物理空间上花费大量资源。此外,在断电或其他灾难情况下,数据库可能极易遭受数据丢失的影响。这样的传统数据库系统具有可以通过基于云的数据库系统来减轻的重大缺陷。

云数据库系统可以通过云平台进行部署和交付,该云平台允许组织和最终用户从云存储、管理和检索数据。一些云数据库系统包括传统的数据库体系结构,该体系结构通过在计算云之上安装数据库软件来实现。可以通过网页浏览器或应用编程接口(API)访问该数据库,以进行应用和服务集成。某些云数据库系统由供应商运营,该供应商代表客户端直接管理数据库安装、部署和资源分配任务的后端进程。客户端可以具有多个最终用户,这些最终用户通过网页浏览器和/或API访问数据库。通过减轻丢失数据库数据的风险并允许跨多个地理区域的多个用户访问数据,云数据库可以为一些客户端带来明显的好处。

对于传统数据库系统和云数据库系统,存在多种体系结构。一种示例体系结构是共享磁盘系统。在共享磁盘系统中,所有数据都存储在共享存储设备上,该设备从数据集群中的所有处理节点可访问。在这种类型的系统中,所有数据更改都将写入共享存储设备,以确保数据集群中的所有处理节点访问一致版本的数据。随着共享磁盘系统中处理节点数量的增加,共享存储设备(以及处理节点与共享存储设备之间的通信链路)成为瓶颈,从而减慢了数据读取和写入操作。添加更多的处理节点会进一步加剧此瓶颈。因此,由于此瓶颈问题,现有的共享磁盘系统的可扩展性受到限制。

在某些情况下,访问存储在中央数据库或主数据库外部的附加数据可能是有益的。在示例中,数据库用户可以将其数据存储在其自己的内部系统和/或基于云的数据库账户上。数据库用户可能希望访问其自己的数据,也可能希望访问未存储在数据库用户的内部系统和/或基于云的数据库账户中的另外数据。该另外数据可以被称为外部数据。在某些情况下,数据库用户可能会受益于协力查询其自己的数据和外部数据,或者比较其自己的数据和外部数据,或者根据对外部数据所做的更改来修改其自己的数据,等等。外部数据可以存储在一个或更多个外部表中。外部表表示未由数据库直接管理的内容。存在一些数据库结构和文件格式,这些数据库结构和文件格式被创建以加快查询响应时间和/或减少执行数据库查询的计算负荷。一种这样的数据库结构是实例化视图。实例化视图通过实例化和重用工作负荷中的公共中间查询结果来提高昂贵的数据库查询的性能。实例化视图是一种数据库对象,其包括数据库查询的结果,并且可以通过高速缓存查询的结果来提高数据库查询的性能。实例化视图的更新和维护成本可能很高,从而难以实现实例化视图的有效使用。

本文公开了用于维护、更新和查询数据库系统中的外部表的系统、方法和设备。进一步公开了用于根据在数据库系统中的外部表生成和刷新实例化视图的系统、方法和设备。

附图简述

参考以下附图描述了本公开的非限制性和非穷举性的实施方式,其中,除非另外指明,否则贯穿各个视图,相似的参考数字指代相同或相似的部分。关于以下描述和附图,将更好地理解本公开的优点,其中:

图1是示出根据一个实施例的用于在外部表上生成实例化视图的系统的示意性框图;

图2是示出根据一个实施例的涉及外部数据管理器的处理流程的示意性框图;

图3是根据一个实施例的数据处理平台的示意图;

图4是根据一个实施例的资源管理器的框图;

图5是根据一个实施例的执行平台的框图;

图6是根据一个实施例的外部数据管理器的框图;

图7是根据一个实施例的用于对外部表进行查询的处理流程的框图;

图8是根据一个实施例的用于实例化视图的增量更新的处理流程的框图;

图9是根据一个实施例的用于根据外部表更新实例化视图的处理流程的框图;

图10是根据一个实施例的用于在数据库系统中存储数据和元数据的数据结构的示意图;

图11A-11C是根据一个实施例的用于对数据库系统中的数据和元数据进行版本控制和刷新的数据结构的示意图;

图12是根据一个实施例的用于在数据库系统中自动维护外部表的方法的示意性流程图;

图13是根据一个实施例的用于在数据库系统中定义外部表的方法的示意性流程图;

图14是根据一个实施例的用于在数据库系统中查询外部表的方法的示意性流程图;

图15是根据一个实施例的用于根据数据库系统中的外部表生成实例化视图的方法的示意性流程图;

图16是根据一个实施例的用于查询数据库系统中的外部表的方法的示意性流程图;以及

图17是根据一个实施例的示例计算设备的示意图。

详细描述

本公开的系统、方法和设备针对数据库系统中的外部表。在实施例中,数据库系统包括多租户和基于云的数据库平台,其使得客户端(即,与数据库平台相关联的账户)能够将数据摄取到数据库平台中,将数据存储在数据库平台中以及查询数据库平台中的数据。在某些情况下,数据库平台的客户端可能希望查询或分析存储在数据库平台外部并且不直接由数据库平台管理的数据。这样的数据在本文中可以被称为“外部数据”或“外部表”。

在实施例中,数据库平台用作云数据仓库。数据可以跨数据库平台的共享存储设备存储,并且可以由数据库平台组织和管理。在实施例中,可以将结构化数据或半结构化数据复制到与数据库平台通信的数据桶中。数据桶中的数据可以由数据库平台摄取,然后由数据库平台组织和管理。然后,客户端可以查看和查询此类数据。

然而,在某些情况下,客户端可能不希望将数据摄取到数据库平台中,或者可能希望仅将一部分数据摄取到数据库平台中。在这种情况下,客户端可以通过数据库平台读取外部数据并执行对外部数据的查询而大大受益。外部数据不直接由数据库平台管理,但是数据库平台仍然可以查询外部数据,生成有关外部数据的元数据,生成有关外部数据的实例化视图,生成有关外部数据的更改跟踪信息,等等。

在实施例中,数据湖与数据库平台相关联,并且客户端将新数据加载到数据湖中。当数据加载到数据湖中或当数据湖中的数据被修改或更新时,将通知数据库平台。数据库平台基于数据库平台生成外部表,并且进一步生成和存储有关外部表中数据的元数据。数据库平台可以基于外部表生成实例化视图和/或对外部表执行查询。

上述实施例为不希望将数据摄取到数据库平台但仍然希望通过使用数据库平台对数据执行操作的客户端提供了明显的好处。在示例中,客户端采用了外部数据存储平台作为其数据湖。在该示例中,外部数据存储平台是基于云的存储,在该基于云的存储中可以上传和存储包括照片、视频、文档、表和其他文件的数据。在实施例中,外部数据存储平台是在某些情况下被称为“数据桶(data bucket)”的存储服务。在示例中,客户端已将外部数据存储平台用作其数据湖,并希望将外部数据存储平台视为其数据的唯一真实来源。客户端不希望将任何数据复制到数据库平台中。根据本文描述的系统、方法和设备,客户端仍可以享受使用数据库平台的好处,而无需将数据摄取到数据库平台中。客户端可以基于数据桶中文件的选择或基于数据桶中的所有文件来创建外部表。可以以只读方式将外部表提供给数据库平台,使得外部表不受数据库平台的管理或操纵。根据本文公开的实施例,客户端可以使用数据库平台来生成和更新关于外部表中的数据的元数据,查询外部表以及根据外部表生成实例化视图。

在另一个示例中,客户端希望使用相对于数据库平台的内部和外部数据的混合物。客户端可能希望将其数据的第一部分存储在具有外部数据存储平台的数据桶中,使得该数据桶充当其数据的第一部分的客户端数据湖。客户端可能希望将原始数据(诸如图像、视频、未分区的表和其他文件)存储在数据桶(用作客户端的数据湖)中。客户端可能还希望将其数据的第二部分存储在数据库平台中,使得该数据库平台充当客户端的数据仓库。对存储在数据仓库中(即由数据库平台管理)的数据进行整理和组织,以实现高粒度的查询、复杂的更改跟踪和精细调整的分析。在该示例中,出于多种原因,客户端可能有动机将其数据存储在两个位置中。一个这样的原因在于客户端可能会运行更喜欢从数据湖而不是数据仓库访问数据或者在某些情况下可能无法从数据仓库访问数据的程序或应用。另一个原因可能在于数据库平台无法处理存储在数据桶中的原始数据。另一个这样的原因可能在于某些类型的数据(例如,系统、网络或信息技术环境中基于数据的事件或动作的应用日志)被频繁生成并且很少被分析。客户端可能会发现,用数据库仓库维护对于不太可能经常查询的应用日志或其他数据的数据摄取管道是低效的。另一个原因可能是出于安全原因,客户端不希望某些数据位于其虚拟私有云之外。另一个原因可能在于客户端需要特定的数据集在设定的时间量后过期,并且从数据库仓库清除这些数据集可能具有挑战性。另一个原因可能在于客户端希望使用开放文件格式(open file format)(诸如Apache Parquet),使得其他应用直接可访问数据而无需访问数据仓库。

以上示例说明了本文所述的系统、方法和设备用于维护和查询外部表的好处。所描述的系统、方法和设备使数据库平台能够生成关于外部数据的元数据,该元数据存储在数据库平台外部并且不由数据库平台管理。另外,本文描述的系统、方法和设备使数据库平台能够基于用数据库平台在内部存储的元数据来查询外部数据。另外,本文描述的所述系统、方法和设备使数据库平台能够根据外部数据生成实例化视图并响应于对外部数据的更改来刷新那些实例化视图。

在实施例中,公开了一种用于维护数据库系统中的外部表的方法。该方法包括由数据库平台接收对存储在与数据库平台分离的数据存储平台中的内容的读取访问权。该方法包括基于存储在数据存储平台中的内容来定义外部表。该方法包括将数据库平台连接到外部表,使得数据库平台对外部表具有读取访问权,而对外部表没有写入访问权。该方法包括生成用于外部表的元数据,该元数据包括关于存储在外部表中的数据的信息。该方法包括接收对数据存储平台的内容进行修改的通知,该修改包括插入、删除或更新中的一者或更多者。该方法包括响应于对数据存储平台的内容进行的修改而刷新外部表的元数据。

在实施例中,公开了一种对外部表进行查询的方法。该方法包括将数据库平台连接到外部表,使得数据库平台对外部表具有读取访问权而对外部表没有写入访问权。该方法包括接收查询,该查询至少针对外部表中的数据。该方法包括基于元数据确定外部表中的包括满足谓词的数据的一个或更多个文件。该方法包括基于元数据修剪外部表中不包括满足查询条件的任何数据的所有文件。该方法包括生成包括多个离散子任务的查询计划。该方法包括基于元数据将多个离散子任务分配给执行平台中的一个或更多个节点。

在实施例中,公开了一种用于根据外部表生成实例化视图的方法。该方法包括将数据库平台连接到外部表,使得数据库平台对外部表具有读取访问权而对外部表没有写入访问权。该方法包括由数据库平台根据外部表生成实例化视图。该方法包括接收到对外部表进行了修改的通知,该修改包括将一个或更多个新数据添加到外部表中或者将外部表中的现有数据删除或修改。该方法包括响应于外部表被修改,刷新实例化视图,使得该实例化视图包括外部表的准确表示。

数据库平台的客户端可能希望将数据存储在数据仓库和/或数据湖中。数据湖是一种存储库,其可以以其本机格式保留大量原始数据。数据湖可以用作对于客户端的所有数据的单个存储,范围从原始数据(其可以是源系统数据的精确副本)到转换后的数据。转换后的数据可用于报告、分析、可视化、机器学习等等。数据湖可以适合于存储大量数据,而这些数据可能永远不会进入到对其进行管理、整理和查询的数据仓库中。数据湖可以存储原始的未清理数据,并可以进行优化以允许客户端以客户端方便的任何格式上传数据。在一些实施方式中,数据湖提供了一种文件和文件系统抽象,该抽象允许大量应用对数据进行操作。

数据仓库可以以定义良好的格式存储清理后的数据。可以对数据仓库中的数据进行组织和优化以进行分析,以实现高粒度的查询和其他处理。数据仓库可以包括关系模式(schema)和更多受约束的处理模式,因此与存储在数据湖中的数据相比,可以对存储在数据仓库中的数据进行操作的应用更少。

在某些情况下,数据仓库的维护成本可能很高。数据库平台的客户端可能希望将其大量数据存储在数据湖中,而仅将经过整理和转换的数据存储在数据仓库中。本公开的实施例使客户端能够跨数据湖和数据仓库存储其数据。另外,本公开的实施例使客户端能够将其数据存储在数据湖中,并且仍然能够使用数据库平台查询和分析数据湖中的数据。

在某些情况下,可能希望根据外部表生成一个或更多个实例化视图。如果客户端希望查询存储在数据库平台外部且不由数据库平台管理的外部表中的数据,这可能特别有益。由于外部数据不由数据库平台管理,因此访问和/或读取外部数据可能特别困难或低效。实例化视图是一种包括查询的结果的数据库对象。实例化视图可以是位于远程的数据的本地副本,或者可以是联表结果(join result)或表的行和/或列的子集,或者可以包括使用聚集函数的摘要。生成实例化视图的过程可以称为实例化。实例化是将查询的结果高速缓存到具体的“实例化”表的一种形式,该表可以基于对原始基础表(在这种情况下,基础表为外部表)所做的更改进行更新。实例化视图实现了有效的访问,并减少了响应查询所需的时间和计算资源量。如果再次请求相同的查询参数,则可以引用实例化视图而不是基础表(即外部表)。实例化视图由数据库平台管理,并且可以比外部表所在的外部存储更快且更有效地被读取。

在示例中,客户端希望维护数据库平台外部的数据湖中的所有数据。客户端希望使用数据库平台来分析和查询存储在数据湖中的数据。数据库平台不管理数据湖。根据本文公开的系统、方法和设备,客户端可以创建存储在数据湖中并且对数据库平台可访问的外部表。数据库平台可以根据外部表生成一个或更多个实例化视图,使得该一个或更多个实例化视图由数据库平台存储、管理和刷新。当客户端向数据库平台发送查询请求时,该数据库平台可以通过直接从数据湖读取外部表来响应查询。然而,为了减少响应查询所需的时间和处理资源量,数据库平台可以改为通过引用根据外部表生成的一个或更多个实例化视图来响应查询。

在实施例中,并且进一步参考以上示例,数据库平台通过引用关于外部表的元数据来响应查询。元数据由数据库平台生成、维护、存储和刷新。元数据是有关外部表内数据的信息。元数据包括有关如何存储外部表中数据的信息。在实施例中,(存储在外部存储平台中的)外部表中的数据可以被组织为源目录层级结构,其中层级结构的叶是文件。每个源目录可以包括一个或更多个文件,并且可以将源目录建模为外部表上的分区。外部表可包括数百万行数据,并且可能非常大且难以存储或读取。在示例中,外部表被分为六个不同的分区,并且六个分区中的每个分区都包括外部表中数据的一部分。将外部表数据划分为多个分区有助于组织数据并找到某些数据在表内的位置。

外部表的分区的类比可以是存储仓库区内的不同存储建筑物。在该类比中,存储仓库区类似于外部表,并且每个单独的存储建筑物均类似于分区。整个存储仓库区中存储了成百上千个物品。由于存储仓库区中放置了许多物品,因此有必要在多个单独的存储建筑物中组织这些物品。这些物品可以通过任何有意义的方式跨多个单独的存储建筑物进行组织。例如,一个存储建筑物可以存储衣物,另一存储建筑物可以存储家庭用品,另一存储建筑物可以存储玩具,等等。每个存储建筑物都可以贴上标签,以便更容易找到物品。例如,如果一个人想找到一个毛绒玩具熊,那么他会知道去存储玩具的存储建筑物。存储玩具的存储建筑物可以进一步组织为成排的货架。可以对玩具存储建筑物进行组织,以使所有毛绒动物都放在一排货架上。因此,寻找毛绒玩具熊的人可能知道访问存储玩具的建筑物,并且可能知道访问存储毛绒动物的排。进一步类似于数据库技术,存储仓库区的存储建筑物中的每一排货架可以类似于外部表的分区内的数据库数据的列。每个存储建筑物和每排货架的标签类似于数据库上下文中的元数据。

类似于存储仓库区的类比,本文公开的分区可以为管理数据、查找数据和组织数据提供相当大的好处。每个分区将数据组织成行和列,并存储与外部表(或由数据库平台存储和管理的数据库表)相关联的数据的一部分。一个外部表或内部表可具有许多分区。数据库数据在许多分区之间的划分可以以对那种类型的数据有意义的任何方式进行。例如,如果客户端是信用卡提供商,并且数据是信用卡交易,则该表可以包括诸如信用卡号、账户成员姓名、商户名称、卡交易日期、卡交易时间、用卡购买的商品或服务的类型等列。该表可以存储在数据库提供商外部且不由数据库提供商管理或更新的数据湖或数据仓库中。该表可以包括跨越重要时间段的数百万个信用卡交易,并且每个信用卡交易可以存储在该表的一行中。由于该表包括数百万行,因此该表可被划分为多个分区。在信用卡交易的情况中,基于时间拆分表可能是有益的。例如,每个分区可以代表一天或一周的信用卡交易。应当理解,可以通过对数据库客户端和存储在表中的数据类型有意义的任何方式将表划分为分区。分区为管理表中数百万行数据的存储以及在表中查找某些信息提供了明显的好处。

可以对外部表或内部表执行查询以在表中查找某些信息。除了上述信用卡交易的示例,查询还可以寻求查找特定时段内某个卖方的所有交易。例如,客户端(在这种情况下,信用卡提供商)可以向数据库提供商发送查询,并要求获得有关在一月、四月和五月在零售商店A发生的所有信用交易的报告。在示例中,这些信用卡交易存储在不由数据库平台管理或更新的外部表中。为了响应该查询,数据库平台的资源管理器(请参见302)必须扫描外部表以查找每个适用的信用卡交易。该外部表可包括数百万的行,这将非常耗时,并且需要大量的计算资源才能使资源管理器扫描整个外部表。本文所公开的分区组织以及用于外部表元数据存储的系统、方法和设备通过缩短查询响应时间并减少响应查询所需的计算资源量而提供了明显的好处。

进一步参考上述示例,资源管理器必须响应要求在一月、四月和五月在零售商店A进行所有信用卡交易的查询。信用卡交易存储在不由数据库平台或资源管理器管理或更新的外部表中。资源管理器可以通过扫描外部表元数据来查找数据单元。外部表元数据包括有关存储在外部表中的数据的信息,但是外部表元数据是由数据库平台生成、存储和刷新的,并且被视为数据库平台的“内部”。本文所述的多层次数据库元数据(参见例如图10)使资源管理器能够快速且有效地找到正确的数据以响应查询。资源管理器可以通过扫描客户端数据库中所有多个表的累积表元数据(请参见1002)来找到正确的表。资源管理器可以通过在标识的表上扫描多个分组表达属性(请参见1014a-1014d)来找到分区的正确分组。分组表达属性包括关于存储在分组内的每个分区中的数据的信息。资源管理器可以通过扫描分区的标识分组内的多个分区表达属性来找到正确的分区。资源管理器可以通过扫描标识的分区内的一个或更多个列表达属性来找到正确的列。资源管理器可以通过扫描标识的分区内的标识的列来找到正确的一行或更多行。进一步参考涉及信用卡交易的示例,资源管理器可以扫描多个累积表元数据以找到包括信用卡交易的表。资源管理器可以扫描分组表达属性以查找具有一月、四月和/或五月的数据的分组。例如,资源管理器找到包括一月份的信用卡交易(并且可能进一步包括其他月份的交易)的一个分组。资源管理器读取该分组的分区表达属性,以查找包括一月份的交易的一个或更多个单独的分区。资源管理器读取每个标识的单独的分区内的列表达属性。资源管理器扫描标识的列,以查找在一月(或四月或月五月)内针对零售商店A进行信用卡交易的适用行。元数据将资源管理器指向正确的外部表和外部表的正确分区。元数据可以进一步将资源管理器指向外部表的该分区的正确行。通过扫描存储在数据库平台内部的元数据,资源管理器可以快速找到正确的数据在外部表中的存储位置。

如以上示例所示,本文公开的元数据组织提供了明显的好处,以加快查询响应时间并使资源管理器能够快速标识正确的外部表、外部表内的正确分区以及外部表内的正确列和行以响应查询。如本文公开的新的元数据存储提供了用于维护关于外部表中的分区的信息的多层次元数据结构。

在公开和描述用于数据库平台对外部表执行操作的方法、系统和设备之前,应当理解,本公开不限于本文公开的配置、处理步骤和材料,因为这样的配置、处理步骤和材料可以有些变化。还应理解,本文所采用的术语仅用于描述实施方式,而不旨在限制本公开的范围,因为本公开的范围仅由所附权利要求及其等同物限制。

为了提供本文提供的公开的另外的背景,表(包括外部表或内部数据库表)是以结构化格式保存的相关数据的集合,并且可以包括列和行。可以响应于诸如插入命令、删除命令、更新命令、合并命令等的数据操纵(DML)命令来改变表。这样的修改可以指的是在表上发生的事务。在实施例中,每个事务包括指示何时接收到事务和/或何时完全执行事务的时间戳。在实施例中,事务包括对表进行的多个更改,并且这种更改可能影响表中的一个或更多个分区。在实施例中,可以连续地摄取数据,或者可以以确定的时间间隔摄取数据,并且将数据摄取到表中是在表上发生的事务。在实施例中,每次在表上执行事务时,都会生成包括一个或更多个新分区的新表版本。此外,每次在表上执行事务时,或者在表上执行阈值次数的事务后,可能需要更新表的元数据以反映存储在表中的新数据或更新数据。

表可以将数据存储在多个分区中,其中,分区是不可变存储设备。当在这样的表上执行事务时,将重新创建所有受影响的分区,以生成反映该事务的修改的新分区。在事务完全执行后,可以从表中移除被重新创建的所有原始分区。在表上执行每次事务之后,都会生成该表的新版本。如果表中的数据经历了许多更改(诸如插入、删除、更新和/或合并),则该表可能会在一段时间内经历许多版本。该表的每个版本可以包括元数据,该元数据指示什么事务生成该表,何时订购该事务,何时完全执行该事务以及该事务如何改变表中的一行或更多行。可以利用所公开的用于低成本表版本控制的系统、方法和设备来提供一种用于在表上发生一个或更多个更改(事务)后更新表元数据的有效装置。这样的系统、方法和设备可以被实现用于生成在数据库平台内部存储的元数据,其中,元数据包括关于存储在未由数据库平台管理或更新的外部表中的数据的信息。

在一个实施例中,元数据被存储并保持在云中的非可变存储服务(在本文中可以称为微分区)上。这些存储服务可以包括例如Amazon

在实施例中,表中的所有数据被自动划分到被称为微分区的不可变存储设备。可以将微分区视为批处理单元,其中每个分区都具有连续的存储单元。举例来说,每个微分区可以包含50MB到500MB之间的未压缩数据(请注意,存储中的实际大小可能较小,因为数据可能会被压缩存储)。表中的行的组可被映射到以列方式组织的单独的分区中。这种大小和结构允许对待扫描的分区进行极细粒度的选择,该分区可以包括数百万甚至数亿个微分区。该粒度选择过程在本文中可以被称为基于元数据的“修剪”。修剪涉及使用元数据来确定表的哪些部分(包括表中的哪些微分区或微分区分组)与查询无关,然后在对查询做出响应时避开那些无关的微分区并且响应于查询只扫描相关的微分区。可以自动收集关于微分区中存储的所有行的元数据,包括:微分区中每个列的值范围;相异值(distinct values)的数量;和/或用于优化和高效查询处理的其他属性。在一个实施例中,可以在所有表上自动执行分区。例如,可以使用插入/加载数据时发生的顺序对表进行透明分区。

在描述和要求保护本公开内容时,将根据以下阐述的定义使用以下术语。

必须指出,如本说明书和所附权利要求书中使用的,单数形式“一(a)”、“一(an)”和“该”包括复数指代,除非上下文另外明确指出。

如本文所用,术语“包括(comprising)”、“包括(including)”、“包含”、“由…表征”及其语法等价形式是包括性或开放性的术语,其不排除附加的、未叙述的元素或方法步骤。

如本文所用,数据库表是记录(行)的集合。每个记录包含表属性(列)的值的集合。数据库表通常物理上存储在多个较小(大小变化或大小固定)的存储单元中,例如文件或块中。

下面提供与本公开的各个实施例一致的系统和方法的详细描述。尽管描述了几个实施例,但是应当理解,本公开不限于任何一个实施例,而是包括许多替代、修改和等同形式。另外,尽管在以下描述中阐述了许多具体细节以提供对本文公开的实施例的透彻理解,但是可以在没有这些细节中的一些或全部细节的情况下实施一些实施例。此外,为了清楚起见,没有详细描述现有技术中已知的某些技术材料,以避免不必要地使本公开模糊。

现在参考附图,图1示出了用于生成、刷新和查询外部表的系统100的示意性框图。系统100包括数据库平台102。数据库平台102可以是用于存储、组织、维护和查询数据库数据的基于云的数据库计算平台。数据库平台102可以与多个客户端账户通信。数据库平台102的实施例包括图3所示的系统300。数据库平台102与从客户端118接收数据的数据湖104通信。数据湖104可以包括基于云的数据存储资源,数据湖可以以其本机格式接收文件和原始数据。

可以基于数据湖104内的数据生成外部表106。外部表106包括结构化或半结构化数据。外部表106对数据库平台102可访问,但是不由数据库平台102管理或更新。在实施例中,外部表106存储在数据湖104内,并且外部表106的结构和组织由客户端118定义。在实施例中,外部表106的结构和组织由数据库平台102定义。数据湖104包括由客户端118管理的数据的存储,其中客户端118与数据湖104和数据库平台102相关联。数据湖104可以在数据库平台102的外部,使得数据库平台102不具有写入或操纵数据湖104内的数据的能力或授权。数据库平台102可以具有读取存储在数据湖104中的数据、查询存储在数据湖104中的数据和/或在在更新数据湖104时接收指示的许可。

在实施例中,外部表106基于数据湖104中的源目录而生成。数据湖104中的源目录可以替代地称为命名空间或源文件。客户端118可以标识源目录,并且客户端可以手动指示应该将新数据上传到源目录。数据湖104是数据的系统或存储库。数据湖104内的数据可以以任何规模以结构化或非结构化状态存储。可以按原样存储数据,而无需首先构造数据。在实施例中,数据湖104是客户端118的所有企业数据的单个存储,包括源系统数据的原始副本和可用于诸如报告、可视化、分析、机器学习等任务的转换数据。在实施例中,数据湖104包括来自关系数据库的结构化数据(即,行和列)、半结构化数据、非结构化数据(例如,电子邮件,文档等)和二进制数据(例如,图像、音频、视频等等)。数据湖104可以通过提供收集、组织和共享数据的单个点来为客户端118管理大数据。

数据湖104可以与数据仓库区分开。然而,在某些实施例中,可以利用数据仓库而不是在图1中示出的数据湖104。数据仓库包括经过优化以分析来自事务系统和业务线应用的关系数据的数据库。在数据仓库中,可以预先定义数据结构和模式以针对快速查询进行优化。可以对数据仓库中的数据进行清理、丰富和转换,使其充当单一可信数据源(asingle source of truth)。数据湖104可以存储来自业务线应用的关系数据和来自例如移动应用、物联网设备和社交媒体的非关系数据。在数据湖104中,当捕获数据时可能未定义数据的结构或模式,使得所有数据都可以在没有仔细设计的情况下被存储。在某些实施方式中,使用数据仓库和数据湖二者可能是有益的,并且如本文所公开的,这种实施方式可以受益于用于基于外部表生成实例化视图的系统、方法和设备。

数据湖104可以导入可以实时摄取的任何量的新数据108。新数据108可以从多个源被收集并以其原始格式被移动到数据湖104。此过程可以允许数据湖104缩放任何大小的数据,同时节省定义数据结构、模式和转换的时间。数据湖104可以提供通过爬取、分类和索引数据来理解什么数据存储在数据湖104中的能力。数据湖104内的数据可以被保护和加密以确保数据被保护。

数据湖104为外部表106和实例化视图116提供目录。目录可以以与存储在数据库平台102的共享存储设备中的表不同的文件格式存储。数据湖104的目录可以存储在云存储系统中,诸如Amazon Web Services

客户端118可以将新数据108添加到数据湖104。新数据108可以是任何文件格式。在实施例中,新数据108必须是特定的文件格式,以由数据库平台102读取或合并到外部表106中。在实施例中,数据库平台102包括用于存储数据库数据(该数据可以被称为由数据库平台102管理的“内部”数据)的共享存储设备。客户端118可以具有存储在数据湖104中的数据,并且可以进一步具有存储在数据库平台102的共享存储设备中的不同或复制的数据。在实施例中,存储在数据湖104中的数据和存储在数据库平台102的共享存储设备中的数据具有不同的文件格式。在这样的实施例中,数据库平台102可以被配置为读取存储在数据湖104中的不同格式的数据和/或将那些不同格式转换为数据库平台102使用的相同数据格式。

当新数据108添加到数据湖104时,将生成通知110并将其提供给数据库平台102的摄取服务112。通知110包括新数据108已经被添加到数据湖104的指示。通知110可以由数据湖104自动生成,可以由客户端自动或手动生成,可以由数据库平台102自动或手动检索,等等。在实施例中,数据库平台102以阈值周期查询数据湖104以确定新数据108是否已经被添加到数据湖104。在实施例中,通知110被提供给摄取服务112以指示数据湖104已经接收到新数据108。摄取服务112可以基于新数据108提示对外部表106以及进一步对实例化视图116的更新。

摄取服务112从数据湖104接收关于已经对存储在数据湖104内的数据进行了更新的通知。摄取服务112可以接收关于数据湖中的源目录(可以可替代地称为命名空间或源文件)内的数据已经被更新的通知。摄取服务112更新外部表106的元数据以反映对数据湖104数据进行的任何修改。

新数据108由数据库平台102的摄取服务112读取和/或检索。新数据108存储在外部表106中。外部表可以与数据库平台102通信,但是可以不由数据库平台管理。在实施例中,数据库平台102可以读取外部表106中的数据,但是不能将数据写入外部表106。在实施例中,客户端118管理外部表106并且向数据库平台102提供对外部表106的访问权。在实施例中,外部表106由基于云的数据仓库服务管理和/或提供,该基于云的数据仓库服务可以是独立的并且独立于数据库平台102。当新数据108被添加到数据湖104时,外部表106被更新以反映新数据108。

数据库平台102可以基于外部表106生成一个或更多个实例化视图116。外部表106的实例化视图116可以由数据库平台102管理,并且可以存储在与数据库平台102相关联的多个共享存储设备中(参见例如308)。当将新数据108添加到数据湖104时,将更新外部表106,并刷新外部表106的实例化视图116。

数据库平台102根据外部表106生成实例化视图116。可以将根据外部表106的实例化视图116的生成分解为两个步骤。第一步,生成未实例化的外部表。第二步,根据未实例化的外部表生成实例化的视图。在某些实施方式中,如本文所公开的,从实例化视图分解非实例化外部表可能是有益的。分解可以允许生成多个不同的实例化视图,并且多个实例化视图中的每个实例化视图可以包括数据的不同选择、不同的投影、不同的摘要等,而无需首先实例化所有源数据。

未实例化的外部表106和外部表106的实例化视图116的组合在大量数据已存储在数据湖104中并且仅经常查询该数据的最近子集的实施方式中可能是有益的。在这样的实施方式中,实例化数据湖104中的所有数据可能会导致成本过高。此外,根据外部表生成实例化视图可以允许仅实例化数据湖104中最频繁查询的部分数据。

元数据部件114基于数据湖104和/或外部表106中的数据生成并刷新元数据。元数据由数据库平台102生成、管理、存储和刷新。元数据是有关存储在数据湖104和/或外部表106中的数据的信息。可以根据本文公开的改进的元数据系统(例如,图10和图11A-11C中所描绘的那些元数据系统)来组织元数据。元数据包括关于存储在数据湖104和/或外部表106中的数据的信息,使得数据库平台102的资源管理器(参见例如302)可以对外部表106执行查询,而无需读取外部表中的所有数据。

元数据部件114进一步生成并刷新有关实例化视图116的元数据。当数据湖104和/或外部表106被更新时,实例化视图116可以被刷新以反映更新。元数据部件114可以进一步刷新元数据以反映对实例化视图116进行的更新。当客户端118查询外部表106时,如果存在可以响应查询的实例化视图116,则数据库平台102的资源管理器(参见302)可以对实例化视图116执行查询。当对实例化视图116而不是对外部表106本身执行查询时,数据库平台102花费较少的时间和处理资源。

在实施例中,外部表106中的数据被组织成构成不可变存储设备的分区。在实施例中,外部表106中的数据被组织到可以就地更新的可变存储设备中,但是数据库平台102与外部表106进行交互,就好像该数据不能就地更新一样。外部表106中的数据可以以与通常用于与数据库平台相关联的内部数据的那些文件格式不同的文件格式存储。数据库平台102的资源管理器302可以扫描元数据以确定需要使用外部表106中的哪些分区来响应查询。

在实施例中,客户端118向数据库平台发出命令以创建外部表106,并且该命令没有为外部表106定义模式。在这样的实施例中,在没有用表定义来定义的模式的情况下生成外部表106。外部表106可以包括变量列,并且可以使用智能列来查询外部表106中的所有数据。

客户端118可以通过各种方法查询外部表106元数据。在实施例中,视图示出了数据库中的所有外部表。这种结果中的列与常规表的列相似,而外部表106将具有其他列。在实施例中,外部表106包括通知通道列,该通知通道列指定在后端创建的简单队列服务(SQS)队列的资源名称,使得客户端账户可以设置向外部表106自动添加文件。在实施例中,外部表106包括位置列,该位置列指定外部表106被配置成的位置。

元数据视图指示将数据提供给外部表106的目录。在数据源是数据湖104的情况下,可以随时添加新文件,可以随时删除旧文件,并且可以随时更新文件。在这样的实施例中,生成将数据提供给外部表106的所有文件的元数据视图可能是有益的。在实施例中,跟踪外部表106的所有目录,并且这样的数据可用于在信息模式中查看。可以从元数据视图中移除注销或删除的目录。

可以根据外部表106生成实例化视图116,以提供更快的查询响应时间。实例化视图116可以自动和增量地更新,以确保数据始终与主要数据源(primary source of truth)(诸如数据湖104中的源目录)保持同步。可以针对实例化视图116处理快速查询116,以改善对频繁使用的数据的查询响应时间。

图2是用于管理数据库平台102中的外部表的处理流程200的示意性框图。系统200包括与数据湖204和客户端218通信的数据库平台102。如本文所公开的,数据库平台102可以被并入数据库平台102的资源管理器(参见例如302)中。

客户端218与数据湖204通信,该数据湖204由客户端218管理或与客户端218连接,并且在数据库平台102的外部。在实施例中,数据库平台102与数据湖204通信,使得数据库平台102可以读取写入数据湖204的数据,但是不能将数据写入数据湖204。数据库平台102可以被并入到基于云的数据库计算平台中,并且数据湖204可以构成单独的且独立的基于云的存储结构。

在处理流程200中,客户端218将数据添加到数据湖204中。通知侦听器部件220接收数据已添加到数据湖204的指示。通知可以由数据湖204或客户端218自动或手动生成。通知侦听器部件220向外部表刷新部件222提供已将数据添加到数据湖204并且应刷新或更新外部表以反映添加到数据湖204的新数据的指示。通知侦听器部件220可以与数据湖204中的源表进行通信,该源表用作数据库平台102可以查询的外部表的源表。客户端218可以在数据湖208中定义源表,并且每当数据被添加到源表或在源表中更新时,通知侦听器部件220就可以接收通知。

外部表刷新部件222刷新数据库平台102可读的外部表。在实施例中,数据库平台102是基于云的数据库计算平台的部件,其将数据库数据(由基于云的数据库计算平台管理和存储)组织到在本文中称为分区的不可变存储设备中。在这样的实施例中,添加到数据湖204的数据可以不被组织到分区中。外部表刷新部件222可以基于添加到数据湖204的新数据为外部表指定一个或更多个分区。在实施例中,与由基于云的数据库平台管理的内部数据相比,数据湖204中的数据具有不同的文件格式。外部表刷新部件222可以被配置为读取和理解多种文件格式并将数据转换为基于云的数据库平台所使用的相同文件格式。

元数据部件224生成、组织和存储关于存储在外部表中的数据的元数据。元数据基于由外部表刷新部件222所指定的用于外部数据的分区。元数据的示例结构可以在图10和图11A-11C中看到。在实施例中,客户端218为外部表内的数据指定分级结构。客户端218可以指定将如何为外部数据组织文件夹和子文件夹,如何将数据划分为行和列,和/或如何将外部数据划分为分区。在示例中,客户端218可以将保险信息存储在外部表中。在该示例中,客户端218可以指定应当针对保险事务的年、月、日和时间用单独的列来组织数据。客户端218可以指定保险事务应当通过位置来组织,使得每个州(state)或区域被存储在不同的分区中。在实施例中,客户端218将文件上传到数据湖204中的特定文件夹,并且文件的位置引导元数据部件224为该文件生成正确的元数据。

在实施例中,元数据部件224为外部表中已被修改的分区生成更改跟踪元数据(change tracking metadata)。通知侦听器部件220可以接收数据湖204中的某个文件被修改的指示。源目录内的某个子文件夹可以为外部表中的某个分区提供数据。基于该通知,数据库平台可以更新关于外部表的元数据。

实例化视图刷新部件226更新根据外部表生成的实例化视图。实例化视图可以由与数据湖204分离的基于云的数据库计算平台存储和管理。刷新实例化视图以反映添加到数据湖204的任何新数据和/或反映对外部数据进行的任何更新(诸如合并或删除)。

外部表生成部件228基于数据湖204内的数据生成外部表。外部表可以由外部表生成部件228或客户端218定义。在实施例中,客户端218向数据库平台102提供对数据湖204中的源目录的访问权,并指示应基于该源目录来生成外部表。

在实施例中,客户端218提供源目录中的分级结构的指示,其中,该分级结构可以已经由客户端218手动定义。分级结构可以指示源目录中数据的组织,包括该数据的文件夹和子文件夹。在示例中,客户端218可以指示一个文件夹包括2019年的所有信用卡交易。客户端218可以进一步指示第一子文件夹包括2019年1月的所有信用卡交易,第二子文件夹包括2019年2月的所有信用卡交易,等等。客户端可以进一步提供将基于源目录的外部表的分区结构的指示。分区结构可以指示应该如何将外部表中的数据组织为列、行和分区。外部表生成部件228可以基于分级结构、分区结构以及文件在分级结构的文件夹和子文件夹内上传的位置来定义外部表。

在示例中,客户端218指示应该基于位置来组织外部表中的分区,使得加利福尼亚州的所有信用卡交易都在一个分区中,缅因州的所有信用卡交易都在一个不同的分区中等等。客户端218可以进一步指示应该基于信用卡交易的时间戳进一步组织外部表中的分区。客户端可以在加利福尼亚州文件夹中、加利福尼亚2019年的子文件夹中并且进一步在加利福尼亚2019年4月的子文件夹中上传对于2019年4月的加利福尼亚州的信用卡交易。基于分级结构和分区结构,外部表生成部件228在外部表中定义包括2019年4月在加利福尼亚进行信用卡交易的数据的一个分区。

文件夹和子文件夹可以堆叠在数据湖的源目录中,并且可以由客户端定义。当数据被上传到源目录中的某个子文件夹时,外部表生成部件228基于在客户端定义的分级结构和分区结构的上下文中数据被上传的位置来定义外部表。

查询部件230从客户端218接收查询。查询部件230扫描元数据以确定响应该查询所必需的一个或更多个分区。在实施例中,一个或更多个分区中的至少一个分区存储在不由基于云的数据库计算平台管理或存储的外部表中。查询部件230将查询的执行解析为多个离散子任务,并将离散子任务分配给执行平台的多个节点。执行平台执行查询。

安全部件232管理对外部表的许可。当数据库平台102具有查看外部表中数据的许可时,查询部件218可以访问该数据以响应查询。

现在参考图3,示出了用于运行本文公开的方法和系统的数据处理平台300。如图3所示,资源管理器302可以耦合到多个客户端账户314a、314b和314n。客户端账户314a、314b和314n可以表示不同的客户端,诸如图1所示的客户端118。在特定实施方式中,资源管理器302可以支持希望访问执行平台304和/或共享数据库存储308的任何数量的客户端账户。客户端账户314a、314b和314n可以包括例如提供要摄取到数据库中的用户文件的最终用户、数据存储和检索请求、管理本文所述系统和方法的系统管理员以及与资源管理器302交互的其他部件/设备。

资源管理器302提供支持数据处理平台300内的所有系统和部件的操作的各种服务和功能。资源管理器302可以耦合到共享元数据312,该共享元数据与整个数据处理平台300中存储的全部数据相关联。共享元数据312包括对于存储在共享数据库存储308中的数据的元数据,并且进一步包括对于存储在外部表(参见106)中的数据的元数据。在一些实施例中,共享元数据312包括存储在远程数据存储系统中的数据以及从本地高速缓存可获得的数据的摘要。另外,共享元数据312可以包括有关在远程数据存储系统和本地高速缓存中如何组织数据的信息。共享元数据312可以允许系统和服务确定是否需要处理数据段,而无需从存储设备加载或访问实际数据。可以根据图10和图11A-11C所示的元数据结构来组织共享元数据312。

资源管理器302可以进一步耦合到执行平台304,执行平台304提供执行各种数据存储和数据检索任务的多个计算资源,如下面更详细地讨论的。执行平台304包括多个执行节点306a、306b、306c和306n,这些执行节点被配置为处理与数据库相关联的各种任务,包括摄取新的用户文件并基于新用户文件生成对于表(可以是外部表或存储在共享数据库存储308中的表)的一个或更多个分区。执行平台304可以耦合到包括多个数据存储设备310a、310b、310c和310n的共享数据库存储308。在一些实施例中,共享数据库存储308包括位于一个或更多个地理位置的基于云的存储设备。例如,共享数据库存储308可以是公共云基础设施或私有云基础设施的一部分。共享数据库存储308可以包括硬盘驱动器(HDD)、固态驱动器(SSD)、存储集群或任何其他数据存储技术。另外,共享数据库存储308可以包括分布式文件系统(诸如Hadoop分布式文件系统(HDFS))、对象存储系统等。应当理解,共享数据库存储308可以被资源管理器302的一个或更多个实例访问,但是可能不被所有客户端账户314a-314n访问。在实施例中,资源管理器302的单个实例由多个客户端账户314a-314n共享。在实施例中,每个客户端账户314a-314n具有其自己的资源管理器和/或其自己的在执行平台304的多个执行节点306a-306n之间共享的共享数据库存储308。在实施例中,资源管理器302负责向特定客户端账户314a-314n提供对共享数据库存储308内的特定数据的访问权。

在特定实施例中,经由一个或更多个数据通信网络来实现资源管理器302与客户端账户314a-314n,共享元数据312和执行平台304之间的通信链路。类似地,执行平台304与共享数据库存储308之间的通信链路是经由一个或更多个数据通信网络实现的。这些数据通信网络可以利用任何通信协议和任何类型的通信介质。在一些实施例中,数据通信网络是彼此耦合的两个或更多个数据通信网络(或子网络)的组合。在替代实施例中,使用任何类型的通信介质和任何通信协议来实现这些通信链路。

如图3所示,数据存储设备310a-310n从与执行平台304关联的计算资源分离。该体系结构支持基于变化的数据存储/检索需求以及访问数据处理平台300的用户和系统的变化的需求,对数据处理平台300进行动态更改。该体系结构使执行平台304和共享数据库存储308能够有效地无限扩展。动态更改的支持允许数据处理平台300响应于对数据处理平台300内的系统和部件的变化的需求而快速扩展。计算资源与数据存储设备的分离支持大量数据的存储,而无需相应的大量计算资源。类似地,资源的这种分离支持在特定时间使用的计算资源的显著增加,而无需相应增加可用数据存储资源。

资源管理器302、共享元数据312、执行平台304和共享数据库存储308在图3中被示为单独的部件。然而,资源管理器302、共享元数据312、执行平台304和共享数据库存储308中的每者可以被实现为分布式系统(例如,分布在多个地理位置处的多个系统/平台中)。另外,资源管理器302、共享元数据312、执行平台304和共享数据库存储308中的每者都可以根据对从客户端账户314a-314n接收到的请求的更改和数据处理平台300变化的需求进行扩展或缩减(彼此独立)。因此,数据处理平台300是动态的并且支持定期更改以满足当前数据处理需求。

图4是描绘资源管理器302的实施例的框图。如图4所示,资源管理器302包括耦合到数据存储设备406的访问管理器402和密钥管理器404。访问管理器402可以处理针对本文描述的系统的认证和授权任务。密钥管理器404可以管理在认证和授权任务期间使用的密钥的存储和认证。请求处理服务408管理接收到的数据存储请求和数据检索请求。管理控制台服务410支持管理员和其他系统管理器对各种系统和进程的访问。

资源管理器302还可以包括作业编译器412、作业优化器414和作业执行器416。作业编译器412解析诸如摄取任务的任务,并且生成用于摄取用户文件的执行代码。作业优化器414基于需要处理和/或摄取的数据来确定执行摄取任务的最佳方法。作业执行器416执行用于由资源管理器302接收到的摄取任务的代码。作业调度程序和协调器418可以将接收到的用户文件发送到适当的服务或系统,以进行编译、优化并分派到执行平台304。虚拟仓库管理器420管理在执行平台中实现的多个虚拟仓库的操作。

另外,资源管理器302包括配置和元数据管理器422,其管理与存储在远程数据存储设备中和本地高速缓存中的数据有关的信息。监视器和工作负荷分析器424监督由资源管理器302执行的进程,并管理在执行平台中的虚拟仓库和执行节点当中的任务(例如,工作负荷)的分配。配置和元数据管理器422以及监视器和工作负荷分析器424耦合到数据存储设备426。

资源管理器302包括如图2所示的数据库平台102。数据库平台102管理数据库平台102和外部表106之间的交互。外部表可以包括存储在数据湖104的源表中的数据。

图5是描绘执行平台304的实施例的框图。如图5所示,执行平台304包括多个虚拟仓库,其包括虚拟仓库1、虚拟仓库2和虚拟仓库n。每个虚拟仓库都包括多个执行节点,每个执行节点都包括一个数据高速缓存和一个处理器。虚拟仓库可以通过使用多个执行节点并行执行多个任务。如本文中所讨论的,执行平台304可以基于系统和用户的当前处理需求实时地添加新的虚拟仓库并丢弃现有的虚拟仓库。这种灵活性允许执行平台304在需要时快速部署大量计算资源,而不必在不再需要那些计算资源时继续为它们付费。所有虚拟仓库都可以访问来自任何数据存储设备(例如,共享数据库存储308中的任何存储设备)中的数据。尽管图5中所示的每个虚拟仓库包括三个执行节点,但是特定的虚拟仓库可以包括任意数量的执行节点。此外,虚拟仓库中执行节点的数量是动态的,使得在存在额外需求时创建新的执行节点,并在不再需要现有执行节点时将其删除。

每个虚拟仓库都能够访问图3中所示的任何数据存储设备310a-310n。因此,虚拟仓库不必分配给特定的数据存储设备,而是可以从共享数据库存储308内的任何数据存储设备310a-310n访问数据。类似地,图5中所示的每个执行节点可以访问来自任何数据存储设备310a-310n的数据。在一些实施例中,可以将特定的虚拟仓库或特定的执行节点临时分配给特定的数据存储设备,但是该虚拟仓库或执行节点可以稍后从任何其他数据存储设备访问数据。

在图5的示例中,虚拟仓库1包括三个执行节点502a、502b和502n。执行节点502a包括高速缓存504b和处理器506a。执行节点502b包括高速缓存504b和处理器506b。执行节点502n包括高速缓存504n和处理器506n。每个执行节点502a、502b和502n与处理一个或更多个数据存储和/或数据检索任务相关联。例如,虚拟仓库可以处理与内部服务(诸如,聚类服务、实例化视图刷新服务、文件压缩服务、存储过程服务或文件升级服务)相关联的数据存储和数据检索任务。在其他实施方式中,特定虚拟仓库可以处理与特定数据存储系统或特定类别的数据相关联的数据存储和数据检索任务。

类似于以上讨论的虚拟仓库1,虚拟仓库2包括三个执行节点512a、512b和512n。执行节点512a包括高速缓存514a和处理器516a。执行节点512b包括高速缓存514b和处理器516b。执行节点512n包括高速缓存514n和处理器516n。另外,虚拟仓库3包括三个执行节点522a、522b和522n。执行节点522a包括高速缓存524a和处理器526a。执行节点522b包括高速缓存524b和处理器526b。执行节点522n包括高速缓存524n和处理器526n。

在一些实施例中,相对于执行节点正在高速缓存的数据,图5所示的执行节点是无状态的。例如,这些执行节点不存储或以其他方式维护有关执行节点或特定执行节点高速缓存的数据的状态信息。因此,在执行节点发生故障的情况下,可以用另一个节点透明地替换发生故障的节点。由于没有与发生故障的执行节点相关联的状态信息,因此新的(替换)执行节点可以轻松替换发生故障的节点,而无需考虑重新创建特定状态。

尽管图5所示的执行节点各自包括一个数据高速缓存和一个处理器,但是替代实施例可以包括包含任意数量的处理器和任意数量的高速缓存的执行节点。另外,高速缓存的大小在不同执行节点之间可能有所不同。图5中所示的高速缓存在本地执行节点中存储从共享数据库存储308中的一个或更多个数据存储设备检索到的数据。因此,高速缓存减小或消除了在从远程存储系统中不断检索数据的平台中出现的瓶颈问题。代替从远程存储设备重复访问数据,本文所述的系统和方法从执行节点中的高速缓存访问数据,这明显更快并且避免了上面讨论的瓶颈问题。在一些实施例中,使用提供对高速缓存的数据的快速访问的高速存储器设备来实现高速缓存。每个高速缓存可以存储来自共享数据库存储308中的任何存储设备的数据。

此外,高速缓存资源和计算资源可以在不同的执行节点之间变化。例如,一个执行节点可以包含大量的计算资源和最少的高速缓存资源,从而使该执行节点可用于需要大量计算资源的任务。另一个执行节点可以包含大量的高速缓存资源和最少的计算资源,从而使该执行节点可用于需要高速缓存大量数据的任务。又一个执行节点可以包含提供更快的输入-输出操作的高速缓存资源,这对于需要快速扫描大量数据的任务很有用。在一些实施例中,基于执行节点将要执行的预期任务,在创建执行节点时确定与特定执行节点相关联的高速缓存资源和计算资源。

另外,与特定执行节点相关联的高速缓存资源和计算资源可以基于由执行节点执行的变化任务而随时间改变。例如,如果执行节点执行的任务变得处理器密集,则可以为执行节点分配更多的处理资源。类似地,如果执行节点执行的任务需要更大的高速缓存容量,则可以为执行节点分配更多的高速缓存资源。

尽管虚拟仓库1、2和n与同一执行平台304相关联,但是可以使用在多个地理位置处的多个计算系统来实现虚拟仓库。例如,虚拟仓库1可以由第一地理位置处的计算系统来实现,而虚拟仓库2和n可以由第二地理位置处的另一计算系统来实现。在一些实施例中,这些不同的计算系统是由一个或更多个不同的实体维护的基于云的计算系统。

另外,每个虚拟仓库在图5中被示为具有多个执行节点。可以使用位于多个地理位置处的多个计算系统来实现与每个虚拟仓库相关联的多个执行节点。例如,虚拟仓库1的实例在一个地理位置处的一个计算平台上实现执行节点502a和502b,并在另一地理位置处的不同计算平台处实现执行节点502n。选择特定的计算系统以实施执行节点可以取决于各种因素,诸如特定的执行节点所需的资源水平(例如,处理资源要求和高速缓存要求)、特定计算系统处可用的资源、地理位置内或地理位置之间的网络的通信能力以及哪些计算系统已在虚拟仓库中实现其他执行节点。

执行平台304也是容错的。例如,如果一个虚拟仓库发生故障,那么该虚拟仓库将很快被位于不同地理位置处的不同虚拟仓库替换。

特定执行平台304可以包括任意数量的虚拟仓库。另外,特定执行平台中虚拟仓库的数量是动态的,使得在需要附加的处理和/或高速缓存资源时创建新的虚拟仓库。类似地,当不再需要与虚拟仓库关联的资源时,可以删除现有的虚拟仓库。

在一些实施例中,虚拟仓库可以对共享数据库存储308中的相同数据执行操作,但是每个虚拟仓库具有其自己的具有独立处理和高速缓存资源的执行节点。此配置允许对不同虚拟仓库上的请求进行独立处理,并且请求之间不会相互干扰。这种独立的处理能力与动态添加和移除虚拟仓库的能力相结合,支持为新用户添加新的处理能力,而不会影响现有用户观察到的性能。

执行平台304可以对外部表执行查询,其中该外部表不是由数据库平台管理,但是可以由数据库平台读取。执行平台302可以通过与外部表通信并直接从外部表读取数据来执行这样的查询。

图6是数据库平台102的示意性框图。数据库平台102包括数据湖通知部件602、外部表通知部件604、外部表元数据部件606、元数据刷新部件608、实例化视图生成部件610、实例化视图刷新部件612、查询部件614和安全部件616。数据库平台102可以与可以包括外部表622的数据湖620通信。数据库平台102可以进一步与由数据库平台102管理的一个或更多个“内部”表626通信。数据库平台102与元数据624通信并且可以读取和写入元数据624,元数据624包括关于数据湖620、外部表622和/或内部表626中的一个或更多个数据的信息。

数据湖通知部件602接收关于已经在数据湖620中添加、删除或修改数据的通知。数据湖通知部件602可以替代地被称为数据湖通知侦听器部件。数据湖通知部件602可以主动查询数据湖620,以确定自数据库平台上一次读取数据湖中的数据以来是否已经添加、删除或修改了任何数据。数据湖通知部件602可以从数据湖620接收由数据湖提供者或客户端自动或手动生成的通知。

在实施例中,数据湖通知部件602被配置为检测对数据湖620内的源目录的更新,其中外部表622基于源目录。在实施例中,数据湖通知部件602接收已经从源目录添加、修改或移除文件的指示。在实施例中,数据湖通知部件602与简单队列服务(“SQS”)消息通信。当生成外部表622时,该通信可以由客户端或系统管理员来建立。SQS队列id(ARN)可以被提供回数据湖620,使得每当从数据湖620添加、更新或删除文件时,将经由SQS生成推送通知。在实施例中,数据湖通知部件602接收SQL命令以在外部表622中注册和注销文件。SQL命令可以从客户端接收,并且可以指示应该基于外部表622位置的当前状态来刷新元数据。

外部表通知部件604接收关于已在外部表622中添加、删除或修改数据的通知。外部表通知部件604可以可替代地称为外部表通知侦听器部件。外部表通知部件604可以主动查询外部表622,以确定自数据库平台上一次读取外部表622中的数据以来是否已经添加、删除或修改了任何数据。外部表通知部件602可以从外部表622或数据湖620接收通知,该通知由数据湖提供者(即,也是外部表提供者)或客户端自动或手动生成。外部表622可以构成存储在数据湖620内的源表。源表可以由客户端定义,并且客户端可以添加、删除或修改存储在源表中的数据。客户端可以通过授予数据库平台对数据湖620内的源表的读取许可来使用数据库平台创建外部表622。

外部表元数据部件606生成、管理和刷新元数据624,该元数据624包括关于存储在外部表622中的数据的信息。可以根据图10和图11A-11C中公开的元数据结构来存储元数据624。外部表元数据部件606可以读取存储在外部表622中的数据以确定元数据624。外部表元数据部件606可以基于数据如何在外部表622内组织来确定元数据624。客户端可以根据分级结构来组织外部表622中的数据,并且可以将分级结构的细节提供给数据库平台。外部表622的组织的分级结构包括如何组织外部表622中的数据的文件夹和子文件夹的指示。在示例中,分级结构可以指示一个文件夹包括对于特定年份的所有交易,并且该文件夹内的子文件夹包括对于该年份的每个月的所有交易。可以根据诸如位置或姓名的某个其他参数将外部表622中的数据划分为多个分区。客户端将文件上传到外部表622中的特定文件夹,并且文件的位置(即,文件上传到哪个文件夹)引导外部表元数据部件606生成有关外部表622的元数据624。

元数据刷新部件608响应于对外部表622所做的更改来刷新关于外部表622的元数据624。当在外部表622中添加、删除或更新数据时,刷新外部表622的元数据624。

实例化视图生成部件610根据外部表622生成一个或更多个实例化视图。实例化视图生成部件610可以基于从客户端接收到的查询来生成实例化视图。客户端可以手动请求针对外部表622中的某个数据集生成实例化视图。如果该数据集适用于客户端经常请求的查询,则数据库平台可以自动确定应该生成对于外部表622中的某个数据集的实例化视图。实例化视图与数据库平台102一起存储,并且可以存储在高速缓存存储中或共享数据库存储308中。实例化视图可以存储在与执行平台304的节点相关联的高速缓存存储中。

实例化视图生成部件610基于外部表622生成实例化视图。实例化视图生成部件610可以生成实例化视图,该实例化视图具有其自己的域,并且具有表和视图二者的特性,其具有链接到外部表622的附加信息和与外部表622和/或数据湖620内的源目录有关的版本控制信息。实例化视图是对自动维护并透明使用的持久查询结果的声明性规范。实例化视图是一种数据库对象,该数据库对象包括在外部表622和/或数据湖620内的源目录上的持久查询结果的结果。实例化视图可以是位于远程的数据的本地副本,它可以是源目录或联表结果的行和/或列的子集,或者它可以是使用聚合函数的摘要。实例化视图生成部件610可以被配置为通过实例化的过程高速缓存查询的结果来生成实例化视图,从而将高速缓存的查询结果存储为可以从原始外部表622和/或数据湖620内的源目录更新的具体“实例化”表。实例化视图可以提供对大型选择、连接或聚合语句的数据库查询的改进性能。实例化视图提供了与源目录相比更小的附加存储,实例化视图可以自动维护,并且实例化视图可以透明地使用,而无需更改外部表622和/或数据湖620内的源目录上的现有工作负荷。实例化视图包括链接到其管理的附加信息,包括源目录标识符、自实例化视图的上一个刷新版本以来实例化的一组分区以及自实例化视图的上一个紧凑版本以来移除的一组分区。

在实施例中,实例化视图生成部件610在实例化视图中存储与表相同信息(例如阶段信息(stage information))和与视图相同的信息(例如视图定义)。另外,实例化视图生成部件610存储源目录标识符。在编译期间将源目录标识符标记到实例化视图,以指示将用于维护和增量更新实例化视图的源目录。实例化视图生成部件610进一步存储实例化视图的类型的指示,其中实例化视图的类型指示用于确定实例化视图的范围的枚举类型(例如,投影、摘要、提要、连接等)。另外,实例化视图生成部件610可以包括特定于DML版本控制的信息,该信息被添加到与实例化视图相关联的表版本中。可以用实例化视图的先前刷新时间和先前压缩时间来标记实例化视图。

实例化视图刷新部件612刷新根据外部表生成的实例化视图。实例化视图刷新部件612可以进一步刷新根据数据库平台102管理的内部表626生成的实例化视图。当在外部表中添加、删除或更新数据时,实例化视图刷新部件612根据外部表刷新实例化视图。可以在对外部表进行阈值次数的修改之后、自上次刷新以来经过阈值持续时间之后、在对外部表进行每次更新之后或基于任何合适的指标,刷新实例化视图。在实施例中,客户端可以定义刷新实例化视图的时间和频率,和/或可以定义用于外部表与实例化视图之间的可接受量的不一致或过时的参数。

实例化视图刷新部件612可以维护刷新构造,该刷新构造通过拉动自实例化视图的最后一次刷新以来已添加到数据湖620的源目录中的已添加分区的日志来指示要插入到实例化视图中的一组分区。实例化视图刷新部件612维护一个紧凑构造,该构造指示通过拉动自实例化视图的上一次压缩以来已从源目录中移除的分区的日志来指示要从实例化视图中移除的一组分区。

实例化视图刷新部件612被配置为通过向实例化视图添加一个或更多个分区或新的行来对实例化视图执行刷新。实例化视图刷新部件612从数据湖通知部件602和/或外部表通知部件604接收指示:自上次刷新实例化视图以来,分区已经插入到数据湖620的源目录中。实例化视图刷新部件612然后将该分区插入到实例化视图中。实例化视图刷新部件612可以针对其生成的每个实例化视图接收单个源目录标识符。在实施例中,实例化视图刷新部件612由发布命令的账户手动触发、启用或禁用。在实施例中,当启用实例化视图刷新部件612时,实例化视图刷新部件612自动更新实例化视图。

在实施例中,实例化视图刷新部件612执行插入命令。实例化视图刷新部件612接收自外部表和/或实例化视图的先前刷新以来已经添加到数据湖620的源目录的新分区的日志。实例化视图刷新部件612将新分区插入到实例化视图中,并且可以被配置为在实例化视图的列中对新分区进行分组,并在实例化视图中对新分区进行排序。在实施例中,新分区的元数据在数据湖620的源目录和外部表622之间是一致的。

查询部件614确定查询计划以对外部表执行查询。资源管理器302可以从客户端接收查询。该查询可以包括具有某些参数的结构化查询语言(SQL)查询。查询部件614读取共享元数据312以确定将用于响应查询的适用文件存储在何处。适用文件可以存储在由数据库平台102管理的共享数据库存储308中存储的“内部”数据中,可以存储在执行平台304中的高速缓存存储中,可以存储在外部表106中,可以存储在实例化视图中,或者可以以以上的任意组合存储。查询部件614确定响应查询所必需的文件,并进一步确定这些文件在共享数据库存储308、执行平台304中的高速缓存存储、外部表106和/或实例化视图中位于何处。查询部件614生成查询计划,该查询计划包括将被执行以响应于查询的一个或更多个离散子任务。查询部件614将一个或更多个离散子任务分配给执行平台304的不同节点以进行处理。查询部件614基于文件的存储位置来分配一个或更多个离散子任务。例如,如果某个执行节点已高速缓存包含响应查询所必需的数据的实例化视图,则将为该执行节点分配与该数据有关的子任务。进一步例如,如果某个执行节点已经高速缓存了外部表或由数据库平台管理的“内部”数据的一部分,则将为该执行节点分配与该数据有关的子任务。该查询由执行平台执行,并且可以由资源管理器302返回给客户端。

安全部件616管理对数据湖620、外部表106、数据库平台102、共享数据库存储308和/或实例化视图的许可。安全部件616执行一个或更多个安全协议以保护数据湖620的源目录、外部表622、元数据624、内部表626和/或实例化视图中的任何一者中的数据。在实施例中,安全部件616向与源目录相关联的账户提供账户设置,使得该账户可以请求外部表和/或基于源目录生成的实例化视图。这样,安全部件616可以进一步向与源目录相关联的第二账户提供账户设置,使得该第二账户不具有请求外部表或实例化视图的许可。在实施例中,安全部件616加密源目录、外部表或实例化视图中的数据。在实施例中,安全部件616应客户端请求和/或当数据被更新时,在预定时间段内对源目录、外部表或实例化视图中的数据进行重设密钥或重新加密。

在实施例中,由数据库平台102执行的工作在后台执行,并且可以以连续的方式发生。在实施例中,一旦基于外部表622生成实例化视图,则数据库平台102就被配置为维持实例化视图的新鲜度。在实施例中,用于实例化视图维护的最大预算可以由客户端改变。客户端可以为某些实例化视图的维护操作提供大量预算,但为其他实例化视图提供较小的预算。客户端可以具有对用于各种实例化视图的维护操作的多个优先级设置的访问权。客户端可以进一步接收指示刷新或压缩实例化视图的频率和效率的信息。

图7是用于对外部表进行查询的示例处理流程700的示意框图。如本文所述,处理流程700可以由资源管理器302和执行平台304来执行。客户端118可以包括与资源管理器302相关联(即,与数据库平台102相关联)并且进一步与存储外部表106的数据的数据湖104相关联的账户。客户端118向资源管理器302提供查询。该查询可以包括结构化查询语言(SQL)语句。在702处,资源管理器302从客户端账户接收查询,并且该查询包括一个或更多个查询谓词。在704处,资源管理器302通过确定外部表和/或共享数据库存储308中的哪些分区包括满足一个或更多个查询谓词的数据,来引用元数据以标识响应查询所必需的分区。在706处,资源管理器302生成查询计划,该查询计划包括需要处理以响应查询的多个离散子任务。在708处,资源管理器302将多个离散子任务分配给执行平台的一个或更多个节点。

资源管理器302可以基于元数据并且进一步基于存储所标识的分区的位置来分配多个离散子任务。例如,资源管理器302可以引用元数据以了解第一标识的分区被存储在第一执行节点的高速缓存存储中。然后,资源管理器302可以将第一标识的分区分配给第一执行节点以加快查询响应时间并减轻处理负荷,以避免从外部表或共享数据库存储308中检索该分区。进一步例如,资源管理器302可以确定在实例化视图中引用了一个标识的分区。资源管理器302可以分配执行节点以读取实例化视图以执行查询计划的离散子任务之一。

在处理流程700中,执行平台304的示例执行节点306具有对外部表106的访问权。在710处,执行节点306从资源管理器302接收指令以执行查询计划的离散子任务,其中离散子任务要求执行节点306读取外部表106中的数据。在712处,执行节点306访问外部表,以读取外部表中在离散子任务中指定的一个或更多个分区。在714处,执行节点306通过读取外部表中的一个或更多个分区并过滤不满足查询谓词的行以仅返回满足查询谓词的那些行来处理任务。

在实施例中,在704处引用元数据以标识响应查询所必需的分区包括:引用共享元数据312以标识外部表中的分区,并且进一步标识内部数据库存储中(例如高速缓存存储和/或共享数据库存储308中的数据)响应查询所必需的分区。在704处引用元数据可以进一步包括确定是否已经根据外部表或内部表中的任何数据生成了实例化视图。如果自对应的实例化视图的最近一次刷新以来已修改了外部表和/或内部表,则查询计划可以包括用外部表或内部表中的数据补充实例化视图。这可以通过读取实例化视图的元数据以确定刷新实例化视图时的时间戳,并且进一步通过读取对应的外部表和/或内部表的元数据以确定对外部表和/或内部表进行最近修改时的时间戳来实现。可以将时间戳进行比较以确定自对应的实例化视图的最近一次刷新以来对外部表和/或内部表进行了多少次修改以及进行了哪些修改。可以通过读取元数据以确定在某些时间戳上进行了哪些修改来进一步补充实例化视图。时间戳可以包括有关进行了哪些修改的信息,例如,执行了哪些数据操纵语言(DML)命令,诸如更新、删除和/或合并命令。可以基于该元数据来补充实例化视图,以确定实例化视图中的哪些行相对于外部表和/或内部表是过时的。那些确定为过时的行将不会从实例化视图中读取,而是从内部表和/或外部表中读取。

图8示出了用于实例化视图的增量更新的示例处理流程800的示意性框图。处理流程800可以由任何合适的计算设备执行,该计算设备包括例如资源管理器302和/或数据库平台102,且具体地包括实例化视图生成部件610和/或实例化视图刷新部件612。处理流程800包括在802处基于源表生成实例化视图(例如,在本文公开的实施例中,源表可以是基于数据湖源目录的外部表)。处理流程800包括在804处更新源表,这可以包括在806处插入分区和/或在808处移除分区。处理流程包括在810处查询实例化视图和源表以检测对源表的未反映在实例化视图中的任何更新。处理流程800包括在812处将更新应用于实例化视图。

在图8所示的示例中,在802处通过扫描源表来生成实例化视图。如所示,源表包括数据集{1 2 3 4 5 6}。对应的实例化视图包括数据集[1(1 2 3)]和[2(4 5 6)],这些数据集可指示数据库中的分区,其中分区是数据库中的不可变存储对象。

在图8所示的示例中,在804处,通过添加(+7)和删除(-2)更新源表(请参见Δ1)。在806处,通过添加(+8)和添加(+9)将两个分区插入到源表中(请参见Δ2)。在808处,通过移除(-1)和(-3)从源表中移除两个分区(请参见Δ3)。如Δ(变量增量)所示,对源表的整体更新包括{+7+8+9-1-2-3},其包括在源表上进行的各个更新(请参见Δ1,Δ2和Δ3)中的每个更新。

在图8所示的示例中,在810处查询实例化视图和源表。查询810包括合并实例化视图和源表。扫描源表,并在源表中检测到分区{7 8 9},而在实例化视图中未检测到这些分区。扫描实例化视图,并在实例化视图中检测分区(1 2 3)到但在源表中未检测到分区(1 23)。

在图8所示的示例中,在812处对实例化视图应用更新。扫描实例化视图,并且系统检测到分区[1(1 2 3)]和[2(4 5 6)],并且系统检测到分区[1(1 2 3)]存在于实例化视图中但应移除。系统删除分区[1(1 2 3)],使得保留分区[2(4 5 6)]。系统扫描源表并发现分区{7 8 9}并将该分区插入到实例化视图中,使得实例化视图包括分区[2(4 5 6)]和[3(78 9)]。

图9示出了用于根据外部表更新实例化视图的示例处理流程900的示意框图。处理流程900可以由任何合适的计算设备执行,该计算设备包括例如资源管理器302和/或数据库平台102,且具体地包括数据库平台102的实例化视图生成部件610和/或实例化视图刷新部件612。根据外部表生成实例化视图,使得使用数据库平台102生成、刷新和存储该实例化视图,并且不由数据库平台管理、存储或更新该实例化视图的源表(即,外部表106)。实例化视图在数据库平台102的内部,而源表在数据库平台102的外部。实例化视图可以存储在诸如共享数据库存储308的持久性存储中,或者其可以存储在诸如执行平台304的执行节点306内的高速缓存的高速缓存存储中。实例化视图的源表(即,外部表)可以存储在数据湖中的持久性存储中。

处理流程900包括在902处的实例化视图的初始刷新。在902处的初始刷新包括扫描外部表(实例化视图的源表)并刷新实例化视图。处理流程900包括在904处对外部表进行的更新。更新可以由与支持外部表的数据湖进行通信的客户端发起,并且更新可以由数据湖的提供者来实现。在图9的示例中,对微分区5(MP5)和微分区6(MP6)进行了更新。更新可以包括修改MP5和MP6的一个或更多个行中的输入项。

处理流程900包括在906处对外部表进行的插入。插入可以由与支持外部表的数据湖进行通信的客户端发起,并且插入可以由数据湖的提供者来实现。在图9的示例中,在906处执行的插入是在微分区1(MP1)和微分区2(MP2)上执行的。插入可以包括将一行或更多行添加到MP1或MP2。如果一个或更多个分区以前不存在,则插入可包括添加MP1或MP2。

处理流程900包括在908处在外部表上执行的删除。删除可以由与支持外部表的数据湖进行通信的客户端发起,并且删除可以由数据湖的提供者来实现。在图9的示例中,在908处执行的删除是在微分区3(MP3)和微分区4(MP4)上执行的。删除可以包括从MP3和/或MP4中移除一行或更多行。删除可包括MP3和/或MP4被完全移除。

处理流程900包括在910处将对外部表(即,实例化视图的源表)进行的更改应用于实例化视图。在910处应用更改包括根据在904处对外部表进行的更新来生成具有更新的行的新的MP5和新的MP6。应用更新包括移除和替换修改后的行。在910处应用更改包括:根据在906处对外部表进行的插入,生成具有插入行的新MP1和新MP2。在910处应用更改包括生成新的MP3和新的MP4,其中根据在908处对外部表进行的删除来移除删除的行。处理流程900包括在912处查询实例化视图。因为实例化视图已经刷新以反映对外部表所做的更新,所以查询可以对实例化视图而不是对外部表本身执行,以加快查询响应时间。

图10是用于数据库元数据(包括在持久性存储和高速缓存存储中)的存储的数据结构1000的示意图。数据结构1000可以应用于不由数据库平台102管理的外部表和/或由数据库平台102管理和存储的内部表的元数据的存储。数据结构1000包括累积表元数据1002,该累积表元数据1002包括关于表的信息。该表可以是外部表或内部表。该表可以包括多个文件或分区,每个文件或分区可以包括存储数据的许多列和行。累积表元数据1002包括关于表的全局信息,并且可以包括存储在多个分组表达属性1014a、1014b、1014c和1014d(本文可以统称为“1014”)的每个分组表达属性中的摘要信息。分组表达属性1014包括关于分区1006或表的分区的集合的聚合的分区统计信息、累积列属性等等。应当理解,图10所示的分区1006可以各自包含存储在表中的数据的不同子集,并且可以包括相同的列或者可以包括存储不同类型的信息的不同的列。该表的分区1006各自包括一个或更多个列,并且可以各自具有相同类型的列或不同类型的列。可以为如图10所示的表的每个分区1006的每一列或表的分区1006的集合存储一个表达属性。数据结构1000包括表的每个分区1006的分区统计信息1004(分区统计信息1004在本文中可替代地称为“分区表达属性”)。分区统计信息1004可以包括相应的分区1006的最小/最大数据点、存储在相应的分区1006中的数据的类型、相应的分区1006的分区结构等等。如图10所示,列1表达属性1008被存储用于不同的分区1006中的每个分区中的第一列。此外,列2表达属性1010被存储用于不同的分区1006中的每个分区中的第二列。此外,列3表达属性1012被存储用于不同的分区中的每个分区中的第三列。应当理解,每个分区1006可以包括任何合适数量的列,并且可以为每个列存储表达属性,或者为任何合适数量的列存储表达属性,表达属性存储在表的每个分区中。列1表达属性1008、列2表达属性1010和列3表达属性1012以及可以视情况包括的任何其他列表达属性都可以作为元数据分区的一部分存储。元数据分区可以持久存储在不可变存储中,并且分组表达属性1014也可以存储在不可变存储中的元数据分区内。元数据管理器可以维护所有元数据分区,包括包含分组表达属性1014和分区统计信息1004和/或列表达属性1008-1012的元数据分区。

累积表元数据1002包括关于可用表内的所有分区的全局信息。例如,累积表元数据1002可以包括整个表的全局最小值和全局最大值,该整个表可以包括数百万甚至数亿个分区。累积表元数据1002可以包括关于存储在表中的数据的任何合适的信息,包括例如最小/最大值、空值计数、在表中共同存储的数据库数据的摘要、在表中存储的数据类型、表中存储的数据的相异性(distinct),等等。

分组表达属性1014a-1014d包括关于存储在分区的相关联分组中的数据库数据的信息。例如,示例分组表达属性与编号为3040至3090的分区相关联,使得示例分组表达属性与五十个不同的分区相关联。示例分组表达属性包括有关这五十个不同分区的信息。分组表达属性1014可以包括关于与其相关联的分区的任何合适的信息。例如,分组表达属性1014可以包括用于分区的共同集的全局最小值/最大值、该分组内的每个分区的最小值/最大值、全局空值计数、针对该分组内的每个分区的空值计数、在整个分区的分组中共同存储的数据的全局摘要、在分组中的每个分区中存储的数据的概要等等。分组表达属性1014可以包括与分组表达属性1014相关联的分区的分组内的所有分区的全局信息,并且它可以进一步包括特定于相关联分组内的每个分区的信息。

与数据库元数据结构的其他实施例相比,图10中公开的元数据结构在累积表元数据1002中提供了增加的粒度。分组表达属性1014提供与数据库的分区1006的集合有关的有价值的全局元数据。此外,每个列表达属性1008、1010、1012提供关于表的分区1006的列的有价值的信息。

当响应于数据库查询时,本文公开的元数据结构(包括图10所示的数据结构1000)提高了效率。数据库查询可以从数据库和/或外部表请求任何数据集合,并且可以用于创建关于数据库数据和/或存储在外部表中的数据的高级分析和度量。某些查询(尤其是对于大型数据库、外部表和/或数据湖的查询)在时间和计算资源上的运行都可能极其昂贵。当需要扫描数据库的每个表的每个文件或分区的元数据和/或数据库数据时,可能需要花费数分钟甚至数小时才能对查询做出响应。在某些实施方式中,这可能不是计算资源的可接受用途。本文公开的数据结构1000提供增加的元数据粒度,并且使得能够对数据库数据和/或存储在外部表中的数据进行多层次修剪。在数据库上的查询的编译和优化期间,处理器可以扫描累积表元数据1002以确定表是否包括与该查询有关的信息。响应于基于累积表元数据1002确定表包括与查询有关的信息,处理器可以扫描每个分组表达属性1014以确定该表的分区的哪些分组包括与该查询有关的信息。响应于基于第一累积表达属性确定分区的第一分组不包括与查询有关的信息,处理器可以中止对分区的该第一分组的数据库扫描。响应于基于第二累积表达属性确定分区的第二分组包括与查询有关的信息,处理器可以继续扫描分区的该第二分组的表达属性。处理器可以有效地确定哪些分区包括相关数据,以及哪些分区的哪些列包括相关数据。处理器可以继续仅扫描包括与数据库查询有关的信息的相关的列和分区。这提供了一种经济高效的装置,该装置用于通过基于多层次表元数据的多层次修剪来响应数据库查询。

为了进一步提高数据库查询的成本效率,资源管理器(也可以称为“全局服务”)可以将累积表元数据1002存储在高速缓存中以进行更快的检索。用于数据库的元数据可以存储在元数据存储中,该元数据存储是独立的且独立于共同存储数据库数据的多个共享存储设备。在不同的实施例中,用于数据库的元数据可以存储在共同存储数据库数据的多个共享存储设备内。在各个实施例中,元数据可以存储在不包括数据库数据的元数据特定的分区中,和/或可以存储在也包括数据库数据的分区内。元数据可以跨磁盘存储(诸如多个共享存储设备)存储,并且其也可以存储在资源管理器内的高速缓存中。

图11A-11C示出了跨表的多个版本的累积表元数据1102的生成。该表可以存储在数据库平台内部,或者也可以是外部表。如图11A-11C所示的元数据版本控制可以由任何合适的计算设备执行,该计算设备包括数据库平台102,且具体地包括外部表元数据部件606和/或元数据刷新部件608。可以通过从数据湖接收有关支持外部表的源表已被修改的通知来提示表元数据的刷新和版本控制。图11A-11C中描绘的元数据结构遵循图10中公开的数据结构1000。因此,存在累积表元数据1102,其包括关于表的全局信息以及表分区的每个分组的分组表达属性1104。此外,该表包括多个分区,每个分区用作用于存储不能就地更新的数据库数据的不可变存储设备。

图11A示出了表的第一版本(V1)的元数据。该表具有版本一累积表元数据1102a和版本一分组表达属性1104a,每者都包括关于表的分区1106的分组的全局信息。在图11A中示出了包括A1、B1、C1、D1、E1、F1、G1和H1的分区的版本1。该表包括多个分区,每个分区在表中存储数据库数据的子集。

图11B示出了表的第二版本(V2)的元数据,该元数据包括分区的第二版本,包括A2、B2、C2、D2、E2、F2、G2、H2、I2、J2、K2和L2。划掉的分区(C2、E2和G2)示出了由表上的事务执行删除的分区。新的分区(I2、J2、K2和L2)示出了通过在表上执行的事务添加到表中的分区。未划掉的现有分区(A2、B2、D2、F2和H2)示出了未被表上执行的任何事务修改的分区。如图11B所示,响应于由在表上执行的一个或更多个事务生成的表的新版本,生成版本二累积表元数据1102b。此外,响应于由在表上执行的一个或更多个事务生成的表的新版本,生成了新的版本二分组表达属性1104b。在实施例中,当从分区的分组中删除分区,但是没有新的分区被添加到该分组时,分组表达属性1104b可能不需要重新计算。现在可能会高估最小值、最大值、空值数量和相异值(distict value)的数量,但数据库客户端仍可认为这是安全的。高估的值可能会导致优化器做出次优决策,但不会导致错误的查询结果。在该实施例中,出于优化器效率的考虑,仍可以重新计算分组表达属性1104b。在图11B所示的示例中,在删除分区C2、E2和G2之后,用于第一和第二分组的现有分组表达属性1104b仍然可以安全使用。这些分组表达属性1104b可以不被重新计算或者可以在以后的阶段被重新计算。对于该表的每个新版本,可以为新添加的分区的分组计算分组表达属性,这可以导致全局分组表达属性的有效计算。该表的每个分区1106构成了无法就地更新的不可变存储设备。因此,响应于诸如DML命令的在表上执行的事务,生成新的分区以反映该事务并替换先前的分区。

图11C示出了表的第三版本(V3)的元数据。如所示,新的分区已添加到版本三的表中,包括分区M3、N3、O3和P3。更新的版本三累积表元数据1102c提供关于表的全局信息,并且更新的版本三分组表达属性1104c各自提供有关版本三分区的相关联分组的全局信息。

图12是用于在数据库系统中维护外部表的方法1200的示意性流程图。方法1200可以由诸如本文所公开的资源管理器302或数据库平台102的任何合适的计算设备来执行。

方法1200开始,并且在1202处计算设备接收对数据存储平台中的源目录的读取访问权。该计算设备和与数据存储平台分离的数据库平台相关联。在1204处,计算设备基于源目录定义外部表。在1206处,计算设备将数据库平台连接到外部表,使得数据库平台对外部表具有读取访问权,而对外部表没有写入访问权。在1208处,计算设备生成外部表的元数据,该元数据包括有关存储在外部表中的数据的信息。在1210处,计算设备接收已经对源目录进行了修改的通知,该修改包括插入、删除或更新中的一者或更多者。在1212处,响应于对源目录进行的修改,计算设备处刷新用于外部表的元数据。

图13是用于在数据库系统中定义外部表的方法1300的示意性流程图。方法1300可以由诸如本文所公开的资源管理器302或数据库平台102的任何合适的计算设备来执行。

方法1300开始,并且在1302处计算设备接收源目录中的分级结构的指示,该分级结构定义用于源目录中的数据的文件夹和子文件夹。在1304处,计算设备接收对源目录中的数据的分区结构的指示。在1306处,计算设备基于文件在分级结构内上传的位置并且进一步基于分区结构来定义外部表中的分区。

图14是用于在数据库系统中查询外部表的方法1400的示意性流程图。方法1400可以由诸如本文所公开的资源管理器302或数据库平台102的任何合适的计算设备来执行。

方法1400开始,并且在1402处计算设备将数据库平台连接到外部表,使得数据库平台对外部表具有读取访问权,而对外部表没有写入访问权。在1404处,计算设备接收包括谓词的查询,该查询至少针对外部表中的数据。在1406处,计算设备基于元数据确定外部表中包括满足谓词的数据的一个或更多个分区。在1408处,计算设备基于元数据修剪外部表中不包括满足谓词的任何数据的所有分区。在1410处,计算设备生成包括多个离散子任务的查询计划。在1412处,计算设备基于元数据将多个离散子任务分配给执行平台中的一个或更多个节点。

图15是一种用于根据数据库系统中的外部表生成实例化视图的方法1500的示意性流程图。方法1500可以由诸如本文所公开的资源管理器302或数据库平台102的任何合适的计算设备来执行。

方法1500开始,并且在1502处计算设备将数据库平台连接到外部表,使得数据库平台对外部表具有读取访问权,而对外部表没有写入访问权。在1504处,计算设备根据外部表生成实例化视图。在1506处,计算设备接收已经对外部表进行了修改的通知,该修改包括插入、删除或更新中的一者或更多者。在1508处,响应于外部表被修改,计算设备刷新实例化视图,使得该实例化视图包括外部表的准确表示。

图16是用于在数据库系统中查询外部表的方法1600的示意性流程图。方法1600可以由诸如本文所公开的资源管理器302或数据库平台102的任何合适的计算设备来执行。

方法1600开始,并且在1602处计算设备将数据库平台连接到外部表,使得数据库平台对外部表具有读取访问权,而对外部表没有写入访问权。在1604处,计算设备接收包括谓词的查询,该查询至少针对外部表中的数据。在1606处,计算设备基于元数据确定外部表中包括满足谓词的数据的一个或更多个分区。在1608处,计算设备基于元数据修剪外部表中不包括满足谓词的任何数据的所有分区。在1610处,计算设备生成包括多个离散子任务的查询计划。在1612处,计算设备读取元数据以确定第一分区是否存储在执行平台的任何特定节点的高速缓存中。在1614处,响应于第一分区被存储在执行平台的特定节点的高速缓存中,计算设备将第一分区分配给特定节点以由该特定节点处理。

图17是描绘示例计算设备1700的框图。在一些实施例中,计算设备1700用于实现本文所讨论的一个或更多个系统和部件。此外,计算设备1700可以与本文所述的任何系统和部件进行交互。因此,计算设备1700可以用于执行各种过程和任务,诸如本文所讨论的那些过程和任务。计算设备1700可以用作服务器、客户端或任何其他计算实体。计算设备1700可以是多种计算设备中的任何一种,诸如台式计算机、笔记本计算机、服务器计算机、手持式计算机、平板计算机等。

计算设备1700包括一个或更多个处理器1702、一个或更多个存储器设备1704、一个或更多个接口1706、一个或更多个大容量存储设备1708以及一个或更多个输入/输出(I/O)设备1710,它们都耦合到总线1712。一个或更多个处理器1702包括执行存储在一个或更多个存储器设备1704和/或一个或更多个大容量存储设备1708中的指令的一个或更多个处理器或控制器。一个或更多个处理器1702还可以包括各种类型的计算机可读介质,诸如高速缓冲存储器。

一个或更多个存储器设备1704包括各种计算机可读介质,诸如易失性存储器(例如,随机存取存储器(RAM))和/或非易失性存储器(例如,只读存储器(ROM))。一个或更多个存储器设备1704还可以包括可重写ROM,诸如闪存。

一个或更多个大容量存储设备1708包括各种计算机可读介质,诸如磁带、磁盘、光盘、固态存储器(例如,闪存)等等。一个或更多个大容量存储设备1708中还可包括各种驱动器,以使得能够从各种计算机可读介质读取和/或写入各种计算机可读介质。一个或更多个大容量存储设备1708包括可移动介质和/或不可移动介质。

一个或更多个I/O设备1710包括允许将数据和/或其他信息输入到计算设备1700或从计算设备1700检索的各种设备。示例I/O设备1710包括光标控制设备、键盘、小键盘、麦克风、监视器或其他显示设备、扬声器、打印机、网络接口卡、调制解调器、镜头、CCD或其他图像捕获设备等。

一个或更多个接口1706包括允许计算设备1700与其他系统、设备或计算环境交互的各种接口。示例接口1706包括任意数量的不同网络接口,诸如到局域网(LAN)、广域网(WAN)、无线网络和因特网的接口。

总线1712允许一个或更多个处理器1702、一个或更多个存储器设备1704、一个或更多个接口1706、一个或更多个大容量存储设备1708和一个或更多个I/O设备1710彼此通信以及与耦合到总线1712的其他设备或部件通信。总线912代表几种类型的总线结构中的一种或更多种,诸如系统总线、PCI总线、IEEE 1394总线、USB总线等等。

为了说明的目的,程序和其他可执行程序部件在本文中被示为离散的块,尽管应当理解,这样的程序和部件可以在不同时间驻留在计算设备1700的不同存储部件中并且由一个或更多个处理器1702执行。可替代地,本文描述的系统和过程可以以硬件或硬件、软件和/或固件的组合来实现。例如,可以对一个或更多个专用集成电路(ASIC)进行编程,以执行本文所述的系统或过程中的一个或更多个系统或过程。如本文中所用,术语“模块”或“部件”旨在传达用于执行诸如通过硬件或硬件、软件和/或固件的组合的过程的实现装置,以便执行本文公开的全部或部分操作。术语“模块”或“部件”旨在在不同实施例中可如何实现模块、部件或其功能或硬件方面进行独立传达。

以下示例涉及其他实施例。

示例1是一种用于根据外部表生成实例化视图的系统。该系统包括用于将数据库平台连接到外部表的装置,使得数据库平台对外部表具有读取访问权,而对外部表没有写入访问权。该系统包括用于根据外部表生成实例化视图的装置。该系统包括用于接收已对外部表进行了修改的通知的装置,该修改包括插入、删除或更新中的一者或更多者。该系统包括用于响应于外部表被修改而刷新实例化视图的装置,使得该实例化视图包括外部表的准确表示。

示例2是根据示例1所述的系统,其中,外部表基于数据存储平台中的源目录,其中,数据存储平台与数据库平台分离。

示例3是根据示例1-2中的任一项所述的系统,还包括用于确定实例化视图的内容的装置,其中用于确定内容的装置包括以下一个或更多个:用于接收生成具有内容的实例化视图的指示的装置;用于接收对外部表的查询的装置,该查询针对内容;或用于基于频繁查询的外部表的一个或更多个行或分区来确定内容的装置。

示例4是根据示例1-3中的任一项所述的系统,其中,用于接收通知的装置包括以下一个或更多个:用于查询数据存储平台以确定是否已对源目录进行了任何修改的装置;用于从数据存储平台接收已经对源目录进行了修改的通知的装置;或用于从与源目录相关联的客户端接收通知的装置,该通知指示已经对源目录进行了修改。

示例5是根据示例1-4中的任一项所述的系统,其中,用于刷新实例化视图的装置包括用于生成新的实例化视图的装置和用于移除相对于外部表而言现在已过时的原始实例化视图的装置。

示例6是根据示例1-5中的任一项所述的系统,还包括:用于接收查询的装置;用于通过读取外部表的元数据来确定外部表中响应查询所必需的一个或更多个分区的装置;以及用于确定是否已经为一个或更多个分区中的至少一个分区生成了对应的实例化视图的装置。

示例7是根据示例1-6中的任一项所述的系统,还包括:用于生成用于对查询做出响应的查询计划的装置,该查询计划包括多个离散子任务;以及用于将多个离散子任务分配给执行平台的一个或更多个节点的装置;其中,响应于对于一个或更多个分区中的至少一个分区存在对应的实例化视图,多个离散子任务中的至少一个离散子任务包括读取对应的实例化视图;并且其中,响应于一个或更多个分区中的至少一个分区没有对应的实例化视图,多个离散子任务中的至少一个离散子任务包括读取外部表。

示例8是根据示例1-7中的任一项所述的系统,还包括用于确定对应的实例化视图相对于一个或更多个分区中的至少一个分区是否过时的装置。

示例9是根据示例1-8中的任一项所述的系统,还包括用于生成实例化视图的元数据的装置,该元数据包括以下一项或更多项:外部表的在实例化视图中实例化的一个或更多个分区的标识;对于在实例化视图中实例化的一个或更多个分区的每个分区的最小值/最大值对;或用于实例化视图的最近一次刷新的时间戳。

示例10是根据示例1-9中的任一项所述的系统,还包括:用于读取针对在实例化视图中实例化的一个或更多个分区中的每个分区对外部表的最近一次修改的时间戳的装置;用于读取实例化视图的最近一次刷新的时间戳的装置;以及用于基于实例化视图的最近一次刷新的时间戳和用于针对在实例化视图中实例化的一个或更多个分区中的每个分区对外部表的最近一次修改的每个时间戳来确定实例化视图相对于外部表是否过时的装置。

示例11是一种用于根据外部表生成实例化视图的方法。该方法包括将数据库平台连接到外部表,使得数据库平台对外部表具有读取访问权,而对外部表没有写入访问权。该方法包括由数据库平台根据外部表生成实例化视图。该方法包括接收已对外部表进行了修改的通知,该修改包括插入、删除或更新中的一者或更多者。该方法包括响应于外部表被修改,刷新实例化视图,使得该实例化视图包括外部表的准确表示。

示例12是根据示例11所述的方法,其中,外部表基于数据存储平台中的源目录,其中,数据存储平台与数据库平台分离。

示例13是根据示例11-12中的任一项所述的方法,还包括通过以下一项或更多项来确定实例化视图的内容:接收生成具有内容的实例化视图的指示;接收对外部表的查询,该查询针对内容;或者基于频繁查询的外部表的一个或更多个行或分区来确定内容。

示例14是根据示例11-13中的任一项所述的方法,其中,接收通知包括以下一项或更多项:查询数据存储平台以确定是否已对源目录进行了任何修改;从数据存储平台接收已经对源目录进行了修改的通知;或从与源目录相关联的客户端接收通知,该通知指示已经对源目录进行了修改。

示例15是根据示例11-14中的任一项所述的方法,其中,刷新实例化视图包括生成新的实例化视图和移除相对于外部表而言现在已过时的原始实例化视图。

示例16是根据示例11-15中的任一项所述的方法,还包括:接收查询;通过读取外部表的元数据来确定外部表中响应查询所必需的一个或更多个分区;以及确定是否已经为一个或更多个分区中的至少一个分区生成了对应的实例化视图。

示例17是根据示例11-16中的任一项所述的方法,还包括:生成用于对查询做出响应的查询计划,该查询计划包括多个离散子任务;以及将多个离散子任务分配给执行平台的一个或更多个节点;其中,响应于对于一个或更多个分区中的至少一个分区存在对应的实例化视图,多个离散子任务中的至少一个离散子任务包括读取对应的实例化视图;并且其中,响应于一个或更多个分区中的至少一个分区没有对应的实例化视图,多个离散子任务中的至少一个离散子任务包括读取外部表。

示例18是根据示例11-17中的任一项所述的方法,还包括确定对应的实例化视图相对于一个或更多个分区中的至少一个分区是否过时。

示例19是根据示例11-18中的任一项所述的方法,还包括生成实例化视图的元数据,该元数据包括以下一项或更多项:在实例化视图中实例化的外部表的一个或更多个分区的标识;在实例化视图中实例化的一个或更多个分区的每个分区的最小值/最大值对;或实例化视图的最近一次刷新的时间戳。

示例20是根据示例11-19中的任一项所述的方法,还包括:读取针对在实例化视图中实例化的一个或更多个分区中的每个分区对外部表的最近一次修改的时间戳;读取实例化视图的最近一次刷新的时间戳;以及基于实例化视图的最近一次刷新的时间戳和针对在实例化视图中实例化的一个或更多个分区中的每个分区对外部表的最近一次修改的每个时间戳来确定实例化视图相对于外部表是否过时。

示例21是一种可编程为执行存储在非暂时性计算机可读存储介质中的指令的处理器。该指令包括将数据库平台连接到外部表,使得数据库平台对外部表具有读取访问权,而对外部表没有写入访问权。该指令包括由数据库平台根据外部表生成实例化视图。该指令包括接收已对外部表进行了修改的通知,该修改包括插入、删除或更新中的一者或更多者。该指令包括响应于外部表被修改,刷新实例化视图,使得该实例化视图包括外部表的准确表示。该指令使得外部表基于数据存储平台中的源目录,其中,数据存储平台与数据库平台分离。

示例22是根据示例21所述的处理器,其中,该指令还包括通过以下一项或更多项来确定实例化视图的内容:接收生成具有内容的实例化视图的指示;接收对外部表的查询,该查询针对内容;或者基于被频繁查询的外部表的一个或更多个行或分区来确定内容。

示例23是根据示例21-22中的任一项所述的处理器,其中,接收通知包括以下一项或更多项:查询数据存储平台以确定是否已对源目录进行了任何修改;从数据存储平台接收已经对源目录进行了修改的通知;或从与源目录相关联的客户端接收通知,该通知指示已经对源目录进行了修改。

示例24是根据示例21-23中的任一项所述的处理器,其中,刷新实例化视图包括生成新的实例化视图和移除相对于外部表而言现在已过时的原始实例化视图。

示例25是根据示例21-24中的任一项所述的处理器,其中,该指令还包括:接收查询;通过读取外部表的元数据,确定外部表中响应查询所必需的一个或更多个分区;确定是否已经为一个或更多个分区中的至少一个分区生成了对应的实例化视图;生成用于响应查询的查询计划,该查询计划包括多个离散子任务;以及将多个离散子任务分配给执行平台的一个或更多个节点;其中,响应于对于一个或更多个分区中的至少一个分区存在对应的实例化视图,多个离散子任务中的至少一个离散子任务包括读取对应的实例化视图;并且其中,响应于一个或更多个分区中的至少一个分区没有对应的实例化视图,多个离散子任务中的至少一个离散子任务包括读取外部表。

示例26是一种用于查询外部表的系统。该系统包括用于将数据库平台连接到外部表的装置,使得数据库平台对外部表具有读取访问权,而对外部表没有写入访问权。该系统包括用于接收包括谓词的查询的装置,该查询至少针对外部表中的数据。该系统包括用于基于元数据确定外部表中的包括满足谓词的数据的一个或更多个分区的装置。该系统包括用于基于元数据修剪外部表中的不包括满足谓词的任何数据的所有分区的装置。该系统包括用于生成包括多个离散子任务的查询计划的装置。该系统包括用于基于元数据将多个离散子任务分配给执行平台中的一个或更多个节点的装置。

示例27是根据示例26所述的系统,其中,外部表基于数据存储平台中的源目录,其中,数据存储平台与数据库平台分离。

示例28是根据示例26-27中的任一项所述的系统,还包括:用于基于元数据确定内部数据库数据中包括满足谓词的数据的一个或更多个分区的装置;以及用于基于元数据修剪内部数据库数据中不包括满足该谓词的任何数据的所有分区的装置;其中,数据库平台具有对内部数据库数据的读取访问权,并且进一步具有对内部数据库数据的写入访问权。

示例29是根据示例26-28中的任一项所述的系统,其中,响应于存在来自外部表和内部数据库数据中每一个的包括满足谓词的数据的一个或更多个分区,查询计划的多个离散子任务包括用于处理外部表中的分区以及进一步用于处理内部数据库数据中的分区的任务。

示例30是根据示例26-29中的任一项所述的系统,其中,用于基于元数据分配多个离散子任务的装置还包括:用于读取元数据以确定第一分区是否被存储在执行平台的任何特定节点的高速缓存中的装置;以及响应于第一分区被存储在执行平台的特定节点的高速缓存中,用于将第一分区分配给特定节点的装置。

示例31是根据示例26-30中的任一项所述的系统,还包括用于生成元数据的装置,其中,该元数据包括有关存储在外部表中的数据的信息,该信息包括以下一项或更多项:外部表的累积表元数据;用于对外部表中的分区进行分组的分组表达属性;外部表的分区的表达属性;外部表的分区的分区统计信息;或外部表的分区的列的列表达属性。

示例32是根据示例26-31中的任一项所述的系统,还包括用于接收已对外部表进行了修改的通知的装置,该修改包括插入、删除或更新中的一者或更多者。

示例33是根据示例26-32中的任一项所述的系统,还包括用于响应于对外部表进行了修改而刷新元数据的装置。

示例34是根据示例26-33中的任一项所述的系统,还包括用于响应于对外部表进行了阈值次数的修改而刷新元数据的装置。

示例35是根据示例26-34中的任一项所述的系统,还包括用于将元数据存储在与数据库平台相关联的共享存储平台上的分区存储对象中的装置,其中,该共享存储平台与外部表分离。

示例36是一种用于查询外部表的方法。该方法包括将数据库平台连接到外部表,使得数据库平台对外部表具有读取访问权,而对外部表没有写入访问权。该方法包括接收包括谓词的查询,该查询至少针对外部表中的数据。该方法包括基于元数据确定外部表中的包括满足谓词的数据的一个或更多个分区。该方法包括基于元数据修剪外部表中不包括满足谓词的任何数据的所有分区。该方法包括生成包括多个离散子任务的查询计划。该方法包括基于元数据将多个离散子任务分配给执行平台中的一个或更多个节点。

示例37是根据示例36所述的方法,其中,外部表基于数据存储平台中的源目录,其中,数据存储平台与数据库平台分离。

示例38是根据示例36-37中的任一项所述的方法,还包括:基于元数据确定内部数据库数据中包含满足谓词的数据的一个或更多个分区;以及基于元数据修剪内部数据库数据中不包括满足该谓词的任何数据的所有分区;其中,数据库平台具有对内部数据库数据的读取访问权,并且进一步具有对内部数据库数据的写入访问权。

示例39是根据示例36-38中的任一项所述的方法,其中,响应于存在来自外部表和内部数据库数据中每一个的包括满足谓词的数据的一个或更多个分区,查询计划的多个离散子任务包括用于处理外部表中的分区以及进一步用于处理内部数据库数据中的分区的任务。

示例40是根据示例36-39中的任一项所述的方法,其中,基于元数据分配多个离散子任务还包括:读取元数据以确定第一分区是否被存储在执行平台的任何特定节点的高速缓存中;以及响应于第一分区被存储在执行平台的特定节点的高速缓存中,将第一分区分配给特定节点。

示例41是根据示例36-40中的任一项所述的方法,还包括:生成元数据,其中,该元数据包括有关存储在外部表中的数据的信息,该信息包括以下一项或更多项:外部表的累积表元数据;外部表中的分区的分组的分组表达属性;外部表的分区的表达属性;外部表的分区的分区统计信息;或外部表的分区的列的列表达属性。

示例42是根据示例36-41中的任一项所述的方法,还包括接收已对外部表进行了修改的通知,该修改包括插入、删除或更新中的一者或更多者。

示例43是根据示例36-42中的任一项所述的方法,还包括响应于对外部表进行了修改而刷新元数据。

示例44是根据示例36-43中的任一项所述的方法,还包括响应于对外部表进行了阈值次数的修改而刷新元数据。

示例45是根据示例36-44中的任一项所述的方法,还包括将元数据存储在与数据库平台相关联的共享存储平台上的分区存储对象中,其中,该共享存储平台与外部表分离。

示例47是可编程为执行存储在非暂时性计算机可读存储介质中的指令的处理器,该指令包括:将数据库平台连接到外部表,使得该数据库平台具有对外部表的读取访问权而没有对外部表的写入访问权;接收包括谓词的查询,该查询至少针对外部表中的数据;基于元数据,确定外部表中包括满足谓词的数据的一个或更多个分区;基于元数据修剪外部表中不包括满足谓词的任何数据的所有分区;生成包括多个离散子任务的查询计划;基于元数据,将多个离散子任务分配给执行平台中的一个或更多个节点;其中,外部表基于数据存储平台中的源目录,其中该数据存储平台与数据库平台分离。

示例48是根据示例47所述的处理器,该指令还包括:基于元数据,确定内部数据库数据中包括满足谓词的数据的一个或更多个分区;以及基于元数据修剪内部数据库数据中不包括满足谓词的任何数据的所有分区;其中,数据库平台具有对内部数据库数据的读取访问权,并且进一步具有对内部数据库数据的写入访问权;并且其中,响应于存在来自外部表和内部数据库数据中每一个的包括满足谓词的数据的一个或更多个分区,查询计划的多个离散子任务包括用于处理外部表中的数据分区以及进一步用于处理内部数据库数据中的分区的任务。

示例49是根据示例47-48中的任一项所述的处理器,其中,基于元数据分配多个离散子任务还包括:读取元数据以确定第一分区是否被存储在执行平台的任何特定节点的高速缓存中;以及响应于第一分区被存储在执行平台的特定节点的高速缓存中,将第一分区分配给特定节点。

示例50是根据示例47-49中的任一项所述的处理器,其中,该指令还包括:生成元数据,其中该元数据包括有关存储在外部表中的数据的信息,该信息包括以下一项或更多项:外部表的累积表元数据;外部表中的分区的分组的分组表达属性;外部表的分区的表达属性;外部表的分区的分区统计信息;或外部表的分区的列的列表达属性。

示例51是根据示例47-50中的任一项所述的处理器,其中,该指令还包括:接收已对外部表进行了修改的通知,该修改包括插入、删除或更新中的一者或更多者;以及响应于已对外部表所做的修改,刷新元数据。

示例52是一种系统。该系统包括用于由数据库平台接收对与数据库平台分离的数据存储平台中的源目录的读取访问权的装置。该系统包括用于基于源目录定义外部表的装置。该系统包括用于将数据库平台连接到外部表的装置,使得数据库平台对外部表具有读取访问权,而对外部表没有写入访问权。该系统包括用于生成外部表的元数据的装置,该元数据包括有关存储在外部表中的数据的信息。该系统包括用于接收已对源目录进行了修改的通知的装置,该修改包括插入、删除或更新中的一者或更多者。该系统包括用于响应于对源目录的修改而刷新用于外部表的元数据的装置。

示例53是根据示例52所述的系统,其中,用于生成元数据的装置包括以下一个或更多个:用于定义外部表的累积表元数据的装置;用于定义外部表中的分区的分组的分组表达属性的装置;用于定义外部表的分区的表达属性的装置;用于定义外部表的分区的分区统计信息的装置;或用于定义外部表的分区的列的列表达属性的装置。

示例54是根据示例52-53中的任一项所述的系统,还包括用于将元数据存储在与数据库平台相关联的共享存储平台上的分区存储对象中的装置,其中,该共享存储平台与数据存储平台分离。

示例55是根据示例52-54中的任一项所述的系统,其中,用于刷新元数据的装置包括以下一个或更多个:用于响应于对源目录的任何修改而刷新元数据的装置;用于在阈值时间段刷新元数据的装置;用于响应于对源目录进行的阈值次数的修改而刷新元数据的装置;或用于响应于刷新元数据的客户端请求而刷新元数据的装置。

示例56是根据示例52-55中的任一项所述的系统,还包括用于读取源目录中的多种不同文件格式的装置。

示例57是根据示例52-56中的任一项所述的系统,其中,用于接收通知的装置包括以下一个或更多个:用于查询数据存储平台以确定是否已对源目录进行了任何修改的装置;用于从数据存储平台接收已经对源目录进行了修改的通知的装置;或用于从与源目录相关联的客户端接收通知的装置,该通知指示已经对源目录进行了修改。

示例58是根据示例52-57中的任一项所述的系统,其中,用于基于源目录定义外部表的装置包括:用于接收源目录中的分级结构的指示的装置,该分级结构定义用于源目录中的数据的文件夹和子文件夹;用于接收对于源目录中的数据的分区结构的指示的装置;以及用于基于在分级结构内文件被上传的位置并且进一步基于分区结构来在外部表中定义分区的装置。

示例59是根据示例52-58中的任一项所述的系统,其中,用于在外部表中定义分区的装置包括用于为外部表中的分区生成元数据的装置,以及用于将元数据指向源目录中的适当文件夹和子文件夹的装置。

示例60是根据示例52-59中的任一项所述的系统,其中,用于接收通知的装置包括用于接收关于源目录内的某个子文件夹已被修改的通知的装置。

示例61是根据示例52-60中的任一项所述的系统,还包括:用于在外部表中标识与源目录内的特定子文件夹相对应的特定分区的装置;以及用于为该特定分区生成指示该特定子文件夹如何被修改以及该特定子文件夹何时被修改的更改跟踪元数据的装置。

示例62是一种方法。该方法包括由数据库平台接收对与数据库平台分离的数据存储平台中的源目录的读取访问权。该方法包括基于源目录定义外部表。该方法包括将数据库平台连接到外部表,使得数据库平台对外部表具有读取访问权,而对外部表没有写入访问权。该方法包括生成用于外部表的元数据,该元数据包括关于存储在外部表中的数据的信息。该方法包括接收已对源目录进行了修改的通知,该修改包括插入、删除或更新中的一者或更多者。该方法包括响应于对源目录的修改而刷新用于外部表的元数据。

示例63是根据示例62所述的方法,其中,生成元数据包括以下一项或更多项:定义外部表的累积表元数据;定义外部表中的分区的分组的分组表达属性;定义外部表的分区的表达属性;定义外部表的分区的分区统计信息;或定义外部表的分区的列的列表达属性。

示例64是根据示例62-63中的任一项所述的方法,还包括将元数据存储在与数据库平台相关联的共享存储平台上的分区存储对象中,其中,该共享存储平台与数据存储平台分离。

示例65是根据示例62-64中的任一项所述的方法,其中,刷新元数据包括以下一项或更多项:响应于对源目录进行的任何修改而刷新元数据;在阈值时间段刷新元数据;响应于对源目录进行的阈值次数的修改而刷新元数据;或响应于刷新元数据的客户端请求而刷新元数据。

示例66是根据示例62-65中的任一项所述的方法,还包括读取源目录中的多种不同文件格式。

示例67是根据示例62-66中的任一项所述的方法,其中,接收通知包括以下一项或更多项:查询数据存储平台以确定是否对源目录进行了任何修改;从数据存储平台接收已经对源目录进行了修改的通知;或从与源目录相关联的客户端接收通知,该通知指示已经对源目录进行了修改。

示例68是根据示例62-67中的任一项所述的方法,其中,基于源目录定义外部表包括:接收源目录中的分级结构的指示,该分级结构定义用于源目录中的数据的文件夹和子文件夹;接收源目录中的数据的分区结构的指示;以及基于在分级结构内文件被上传的位置并且进一步基于分区结构来在外部表中定义分区。

示例69是根据示例62-68中的任一项所述的方法,其中,在外部表中定义分区包括为外部表中的分区生成元数据,以及将元数据指向源目录中的适当文件夹和子文件夹。

示例70是根据示例62-69中的任一项所述的方法,其中,接收通知包括用于接收关于源目录内的某个子文件夹已被修改的通知的装置。

示例71是根据示例62-70中的任一项所述的方法,还包括:在外部表中标识与源目录内的特定子文件夹相对应的特定分区;以及为该特定分区生成指示该特定子文件夹如何被修改以及该特定子文件夹何时被修改的更改跟踪元数据。

示例72是一种可编程为执行存储在非暂时性计算机可读存储介质中的指令的处理器,该指令包括:由数据库平台接收对与数据库平台分离的数据存储平台中的源目录的读取访问权;基于源目录定义外部表;将数据库平台连接到外部表,使得数据库平台对外部表具有读取访问权,而对外部表没有写入访问权;生成用于外部表的元数据,该元数据包括有关存储在外部表中的数据的信息;接收已经对源目录进行了修改的通知,该修改包括插入、删除或更新中的一者或更多者;以及响应于对源目录进行的修改,刷新外部表的元数据。

示例73是根据示例72所述的处理器,其中,生成元数据包括以下一项或更多项:定义外部表的累积表元数据;定义外部表中的分区的分组的分组表达属性;定义外部表的分区的表达属性;定义外部表的分区的分区统计信息;或定义外部表的分区的列的列表达属性。

示例74是根据示例72-73中的任一项所述的处理器,其中,该指令还包括将元数据存储在与数据库平台相关联的共享存储平台上的分区存储对象中,其中,该共享存储平台与数据存储平台分离。

示例75是根据示例72-74中的任一项所述的处理器,其中,刷新元数据包括以下一项或更多项:响应于对源目录进行的任何修改而刷新元数据;在阈值时间段刷新元数据;响应于对源目录进行的阈值次数的修改而刷新元数据;或响应于刷新元数据的客户端请求而刷新元数据。

示例76是根据示例72-75中的任一项所述的处理器,其中,基于源目录定义外部表包括:接收源目录中的分级结构的指示,该分级结构定义用于源目录中的数据的文件夹和子文件夹;接收源目录中的数据的分区结构的指示;以及基于在分级结构内文件被上传的位置并且进一步基于分区结构来在外部表中定义分区。

各种技术或其某些方面或部分可以采用有形介质(诸如软盘、CD-ROM、硬盘驱动器、非暂时性计算机可读存储介质或任何其他机器可读存储介质)中体现的程序代码(即,指令)的形式,其中,当程序代码被加载到诸如计算机的机器中并由其执行时,该机器成为用于实施各种技术的装置。在可编程计算机上执行程序代码的情况下,计算设备可以包括处理器、由处理器可读取的存储介质(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备和至少一个输出设备。易失性和非易失性存储器和/或存储元件可以为RAM、EPROM、闪存、光盘驱动器、磁性硬盘驱动器或用于存储电子数据的另外介质。可以实现或利用本文所述的各种技术的一个或更多个程序可以使用应用编程接口(API)、可重用控件等。这些程序可以用高级程序、功能、面向对象的编程语言实现以与计算机系统通信。然而,如果需要,一个或更多个程序可以用汇编语言或机器语言实现。在任何情况下,语言可以是编译或解释语言,并与硬件实施方式相结合。

应当理解,在本说明书中描述的许多功能单元可以被实现为一个或更多个部件,这是用于更具体地强调其实现独立性的术语。例如,部件可以实现为包括定制的超大规模集成(VLSI)电路或门阵列的硬件电路、诸如逻辑芯片、晶体管或其他分立元件的现成半导体。部件还可以在可编程硬件器件(诸如现场可编程门阵列、可编程阵列逻辑、可编程逻辑器件等)中实现。

部件也可以用软件实现,以便由各种类型的处理器执行。可执行代码的所标识部件可以例如包括计算机指令的一个或更多个物理或逻辑块,其可以例如被组织为对象、程序或函数。然而,所标识的部件的可执行文件不需要物理上位于一起,而是可以包括存储在不同位置的不同指令,当逻辑上连接在一起时,这些可执行文件包括部件并实现该部件的所述目的。

实际上,可执行代码的部件可以为单个指令或许多指令,甚至可以分布在几个不同的代码段上、不同的程序中以及几个存储器设备上。类似地,操作数据可以在本文中在部件内被标识和说明,并且可以以任何合适的形式体现并且被组织在任何合适类型的数据结构内。操作数据可以作为单个数据集收集,或者可以分布在包括不同存储设备的不同位置上,并且可以至少部分地仅作为系统或网络上的电子信号存在。部件可以为无源的或有源的,包括可操作以执行所需功能的代理。

整个本说明书对“示例”的引用意味着结合该示例描述的特定特征、结构或特性被包括在本公开的至少一个实施例中。因此,在整个本说明书各个地方出现的短语“在示例中”不一定都指代相同的实施例。

如本文所用,为方便起见,可以在共同列表中呈现多个项、结构元素、组成元素和/或材料。然而,这些列表应该被解释为好像列表中的每个成员都被单独标识为一个独立且独特的成员。因此,仅基于其在共同组中的表述而没有相反的指示,此类列表中的任何个别成员不应被解释为事实上等同于同一列表中的任何其他成员。另外,本文中可以参考本公开的各种实施例和示例以及其各种部件的替代方案。应当理解,这些实施例、示例和替代方案不应被解释为彼此的事实上的等同物,而是应被视为本公开的单独和自主的表示。

尽管为了清楚起见已经详细描述了前述内容,但是将明显的是,可以在不脱离其原理的情况下进行某些更改和修改。应指出,存在实现本文所述的过程和装置的许多替代方式。因此,本实施例应被认为是说明性的而不是限制性的。

本领域技术人员将理解,可以在不脱离本公开的基本原理的情况下对上述实施例的细节进行许多更改。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号