CN117999551A - 对结果变更的查询和事务性消费 - Google Patents
对结果变更的查询和事务性消费 Download PDFInfo
- Publication number
- CN117999551A CN117999551A CN202280059399.3A CN202280059399A CN117999551A CN 117999551 A CN117999551 A CN 117999551A CN 202280059399 A CN202280059399 A CN 202280059399A CN 117999551 A CN117999551 A CN 117999551A
- Authority
- CN
- China
- Prior art keywords
- query
- view
- stream
- source table
- flow
- 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
- 230000008859 change Effects 0.000 claims abstract description 177
- 238000000034 method Methods 0.000 claims abstract description 81
- 238000003860 storage Methods 0.000 claims description 101
- 238000005192 partition Methods 0.000 claims description 19
- 230000015654 memory Effects 0.000 claims description 18
- 238000012545 processing Methods 0.000 abstract description 51
- 238000013500 data storage Methods 0.000 description 40
- 230000006870 function Effects 0.000 description 35
- 230000008569 process Effects 0.000 description 28
- 238000004891 communication Methods 0.000 description 27
- 238000010586 diagram Methods 0.000 description 22
- 230000000750 progressive effect Effects 0.000 description 19
- 238000005457 optimization Methods 0.000 description 14
- 230000014759 maintenance of location Effects 0.000 description 13
- 230000005540 biological transmission Effects 0.000 description 10
- 230000009471 action Effects 0.000 description 9
- 238000005516 engineering process Methods 0.000 description 9
- 238000007726 management method Methods 0.000 description 8
- 230000004048 modification Effects 0.000 description 8
- 238000012986 modification Methods 0.000 description 8
- 230000008878 coupling Effects 0.000 description 7
- 238000010168 coupling process Methods 0.000 description 7
- 238000005859 coupling reaction Methods 0.000 description 7
- 238000013138 pruning Methods 0.000 description 7
- 238000012795 verification Methods 0.000 description 7
- 238000004458 analytical method Methods 0.000 description 6
- 230000014509 gene expression Effects 0.000 description 6
- 230000008520 organization Effects 0.000 description 6
- 238000001914 filtration Methods 0.000 description 5
- 230000002776 aggregation Effects 0.000 description 4
- 238000004220 aggregation Methods 0.000 description 4
- 238000004364 calculation method Methods 0.000 description 4
- 238000013507 mapping Methods 0.000 description 4
- 230000008901 benefit Effects 0.000 description 3
- 239000000872 buffer Substances 0.000 description 3
- 230000001413 cellular effect Effects 0.000 description 3
- 238000006243 chemical reaction Methods 0.000 description 3
- 230000003993 interaction Effects 0.000 description 3
- 239000004065 semiconductor Substances 0.000 description 3
- 230000003068 static effect Effects 0.000 description 3
- 238000010200 validation analysis Methods 0.000 description 3
- 238000010367 cloning Methods 0.000 description 2
- 230000006835 compression Effects 0.000 description 2
- 238000007906 compression Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- GVVPGTZRZFNKDS-JXMROGBWSA-N geranyl diphosphate Chemical compound CC(C)=CCC\C(C)=C\CO[P@](O)(=O)OP(O)(O)=O GVVPGTZRZFNKDS-JXMROGBWSA-N 0.000 description 2
- 230000000670 limiting effect Effects 0.000 description 2
- 238000011068 loading method Methods 0.000 description 2
- 230000005291 magnetic effect Effects 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 230000002085 persistent effect Effects 0.000 description 2
- 238000013439 planning Methods 0.000 description 2
- 230000008439 repair process Effects 0.000 description 2
- 150000003839 salts Chemical class 0.000 description 2
- 108091028043 Nucleic acid sequence Proteins 0.000 description 1
- 230000006978 adaptation Effects 0.000 description 1
- 239000000654 additive Substances 0.000 description 1
- 230000000996 additive effect Effects 0.000 description 1
- 230000004075 alteration Effects 0.000 description 1
- 238000012550 audit Methods 0.000 description 1
- 238000013475 authorization Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000010267 cellular communication Effects 0.000 description 1
- 230000006378 damage Effects 0.000 description 1
- 238000013523 data management Methods 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 230000001066 destructive effect Effects 0.000 description 1
- 238000009826 distribution Methods 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 229910000078 germane Inorganic materials 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 230000007774 longterm Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 239000003607 modifier Substances 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000005693 optoelectronics Effects 0.000 description 1
- 230000000737 periodic effect Effects 0.000 description 1
- 230000002829 reductive effect Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 238000013341 scale-up Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 238000012384 transportation and delivery Methods 0.000 description 1
- 239000013598 vector Substances 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
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/23—Updating
- G06F16/2358—Change logging, detection, and notification
-
- 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/2455—Query execution
- G06F16/24568—Data stream processing; Continuous queries
-
- 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/2455—Query execution
- G06F16/24553—Query execution of query operations
- G06F16/24558—Binary matching operations
- G06F16/2456—Join operations
-
- 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/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
- G06F16/278—Data partitioning, e.g. horizontal or vertical partitioning
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本文提供了用于流对象配置的系统和方法,包括配置和处理视图上的流。例如,一种方法,包括检测视图上的第一流对象。该视图包括与源表相关联的查询。基于视图的定义确定查询的语法树。基于用语法树替换第一流对象来扩展视图。语法树包括源表上的第二流对象。基于计算源表上的变更来执行第二流对象的流扩展。
Description
优先权声明
本申请要求在2021年8月30日提交的美国专利申请序列号17/460,974的优先权,该美国专利申请的内容在此通过引用以其整体并入。
技术领域
本公开的实施例总体上涉及数据库,更具体地,涉及用于对查询结果中的变更进行查询并事务性地(transactionally)消费(consume)该变更的数据库对象类型(例如,流对象)。
背景
数据库被广泛用于计算应用中的数据存储和访问。数据库存储的目标是以有组织的方式提供大量信息,以便可以对其进行访问、管理、更新和共享。在数据库中,数据可以组织成行、列和表。不同的数据库存储系统可以用于存储不同类型的内容,诸如书目、全文、数字和/或图像内容。此外,在计算中,可以根据数据库的组织方法对不同的数据库系统进行分类。有许多不同类型的数据库,包括关系数据库、分布式数据库、云数据库、面向对象的数据库和其他数据库。
各种实体和公司都使用数据库来存储可能需要访问或分析的信息。在一个示例中,零售公司可以将所有销售交易的清单存储在数据库中。数据库可以包括关于交易何时发生、交易发生在哪里、交易的总成本、在交易中购买的所有物品的标识符和/或描述等信息。同一家零售公司还可能在同一数据库中存储例如员工信息,该信息可能包括员工姓名、员工联系信息、员工工作历史记、员工薪酬率等。根据该零售公司的需求,员工信息和交易信息可以存储在同一数据库的不同表中。当零售公司想要得知存储在数据库中的信息时,可能需要“查询”其数据库。该零售公司可能希望找到有关例如在特定商店工作的所有员工的姓名、在特定日期工作的所有员工的姓名、在特定时间范围内针对特定产品进行的所有交易的数据,等等。
当零售商店要查询其数据库以从数据库中提取某些组织的信息时,将针对数据库数据执行查询语句。该查询根据一个或更多个查询谓词(query predicates)返回某些数据,这些查询谓词指示该查询应返回哪些信息。该查询从数据库中提取特定数据,并将该数据格式化为可读形式。可以用数据库理解的语言(诸如结构化查询语言(“SQL”))编写查询,由此数据库系统可以确定应定位哪些数据以及应如何返回数据。该查询可以请求存储在数据库内的任何相关信息。如果可以找到适当的数据来响应查询,则数据库有可能揭示复杂的趋势和活动。可以通过使用成功执行的查询来利用此功能。然而,查询变更和消费查询的变更的配置可能具有挑战性且耗时。
附图简述
从下面给出的详细描述和本公开的各种实施例的附图中,将更全面地理解本公开。
图1示出了根据本公开的一些实施例的示例计算环境,其包括与云存储平台通信的基于网络的数据库系统。
图2是示出根据本公开的一些实施例的使用流管理器的计算服务管理器的部件的框图。
图3是示出根据本公开的一些实施例的执行平台的部件的框图。
图4是根据本公开的一些实施例的结合查询处理使用CHANGES子句的图。
图5是根据本公开的一些实施例的用于表的流对象配置的图。
图6是根据本公开的一些实施例的共享视图的图。
图7是根据本公开的一些实施例的基于复杂视图的流对象的图。
图8是根据本公开的一些实施例的视图演变(view evolution)的图。
图9是根据本公开的一些实施例的流扩展的图。
图10是根据本公开的一些实施例的与单个源表(source table)相关的视图扩展和流扩展的图。
图11是根据本公开的一些实施例的与多个源表相关的视图扩展和流扩展的图。
图12是根据本公开的一些实施例的与联合所有查询(union all query)相关的变更重写的图。
图13是示出根据本公开的一些实施例的数据库系统在执行用于处理视图上的流对象的方法时的操作的流程图。
图14示出了根据本公开的一些实施例的计算机系统形式的机器的图解表示,在该计算机系统形式的机器内可以执行指令集,以用于使机器执行本文所讨论方法中的任何一种或更多种方法。
详细描述
现在将详细参考用于实现本发明主题的具体示例实施例。这些具体实施例的示例在附图中示出,并且具体细节在以下描述中被概述,以提供对主题的透彻理解。应当理解,这些示例并不旨在将权利要求的范围限制于所示的实施例。相反,它们旨在覆盖可能包含在本公开范围内的替代、修改和等同物。
在本公开中,存储在数据平台中并且构成例如消费者账户中的数据库表的内容的数据的物理单元被称为微分区。在不同的实现中,数据平台也可以在微分区中存储元数据。术语“微分区”在本公开中不同于术语“文件”,如本文所使用的,术语“文件”是指诸如图像文件(例如,联合图像专家组(JPEG)文件、便携式网络图形(PNG)文件等)、视频文件(例如,运动图像专家组(MPEG)文件、MPEG-4(MP4)文件、高级视频编码高清(AVCHD)文件等)、可移植文档格式(PDF)文件、被格式化为与一个或更多个文字处理应用兼容的文档、被格式化为与一个或更多个电子表格应用兼容的文档等的数据单元。如果存储在数据平台内部,给定的文件在本文被称为“内部文件”,并且可以存储在本文被称为“内部存储位置”的地方中(或在该“内部存储位置”处,或在该“内部存储位置”上等)。如果存储在数据平台的外部,给定的文件在本文被称为“外部文件”,并且被称为存储在本文被称为“外部存储位置”的地方中(或在该“外部存储位置”处,或在该“外部存储位置”上等)。这些术语将在下面进一步讨论。
计算机可读文件有多种类型,包括非结构化文件、半结构化文件和结构化文件。这些术语可能对不同的人有不同的含义。如本文所使用的,非结构化文件的示例包括图像文件、视频文件、PDF、音频文件等;半结构化文件的示例包括JavaScript对象表示法(JSON)文件、可扩展标记语言(XML)文件等;结构化文件的示例包括变体调用格式(VCF)文件、Keithley数据文件(KDF)文件、分层数据格式版本5(HDF5)文件等。如相关领域的技术人员所知,VCF文件通常用于生物信息学领域,用于存储例如基因序列变异,KDF文件通常用于半导体工业,用于存储例如半导体测试数据,HDF5文件通常用于工业,例如航空工业,在这种情况下用于存储数据,例如飞机排放数据。许多其他非结构化文件类型、半结构化文件类型和结构化文件类型的示例,以及它们的示例使用,当然也可以在这里列出,并且对于相关领域的技术人员来说是熟悉的。相关领域的不同技术人员可以在这些类别中对文件类型进行不同的分类,并且可以使用一个或更多个不同的类别来代替或补充这些类别中的一个或更多个。
本公开的各方面提供了用于配置数据库对象类型(例如,流对象)以对查询结果中的变更进行查询并事务性地消费该变更的技术。例如,所公开的技术可以由基于网络的数据库系统中的流管理器来执行。在一些实施例中,流管理器对应用于视图的流对象的处理进行配置。所公开的技术通过促进查询和对查询的变更的消费,而不是仅在基表上对变更的消费,来建立在流的概念之上。例如,所公开的技术可以用于维护反规范化连接(denormalized join)以用于更快查询,存储查询的变更的历史以用于审计,与数据共享相结合以实现跨组织的简单提取、转换、加载(ETL)。
与其他查询处理技术(例如,表上的流和增量ETL技术,如缓慢变化维度(SCD)连接)相比,所公开的技术与以下优点相关联:易于使用,与其他处理技术相比,能够在更大的用例集上进行增量处理,能够结合治理技术(例如,行访问策略、列访问策略和共享安全视图)来查询变更。所公开的技术的附加优点包括不需要时间戳管理来跟踪查询处理的进度,使用事务性流消费(这简化了精确一次处理(exactly-once processing)),复杂的查询被自动重写成有效产生增量变更的形式(而不是用户必须转换查询)。
本文描述的各种实施例在适当时参考一个或更多个各种附图进行描述。结合图1-图3讨论了示例计算环境,该示例计算环境使用流管理器来配置数据库对象类型(例如,流对象)以对查询结果中的变更进行查询并事务性地消费该变更。结合图4-图13讨论了与流管理器相关联的示例配置和功能。结合图14提供了可以结合所公开的技术使用的示例计算设备的更详细的讨论。
图1示出了根据本公开的一些实施例的示例计算环境100,其包括基于网络的数据库系统102的示例形式的数据库系统。为了避免用不必要的细节模糊本发明主题,图1中省略了与传达对本发明主题的理解并不密切相关的各种功能部件。然而,本领域技术人员将容易认识到,各种附加功能部件可以被包括作为计算环境100的一部分,以促进本文没有具体描述的附加功能。在其他实施例中,计算环境可以包括另一种类型的基于网络的数据库系统或云数据平台。例如,在一些方面,计算环境100可以包括具有基于网络的数据库系统102的云计算平台101、存储平台104(也称为云存储平台)和凭证储存器提供者106。云计算平台101提供可以获取(购买)或租赁的计算资源和存储资源并被配置为执行应用和存储数据。
云计算平台101可以托管云计算服务103,该云计算服务103便于在云计算平台101上数据的存储(例如,数据管理和访问)和分析功能(例如,SQL查询、分析),以及其他处理能力(例如,执行本文描述的反向ETL功能)。云计算平台101可以包括三层架构:数据存储(例如,存储平台104和122)、执行平台110(例如,提供查询处理)和提供云服务的计算服务管理器108。
通常情况下,作为给定数据平台的消费者的组织也维护数据平台外部(即,一个或更多个外部存储位置)的数据存储(例如,数据湖)。例如,一家公司可能是特定数据平台的消费者,并且还例如,在他们的一个或更多个服务器上和/或在一个或更多个云存储平台上(例如AMAZON WEB SERVICESTM(AWSTM)、GOOGLE CLOUDPLATFORMTM等)单独维护任意数量文件的存储,这些文件可以是非结构化文件、半结构化文件、结构化文件和/或一种或更多种其他类型的文件。消费者的服务器和云存储平台都是给定消费者可以用作本文所指的外部存储位置的示例。云计算平台101还可以使用云存储平台作为本文称为关于数据平台的内部存储位置。
从云计算平台101的基于网络的数据库系统102的角度来看,存储在一个或更多个存储位置处的一个或更多个文件在本文被称为被组织到以下的一个或更多个中:在本文被称为“内部暂存区(internal stages)”或“外部暂存区(external stages)”。内部暂存区是对应于一个或更多个内部存储位置处的数据存储的暂存区,并且其中外部暂存区是对应于一个或更多个外部存储位置处的数据存储的暂存区。就这一点而言,外部文件可以存储在一个或更多个外部存储位置处的外部暂存区中,而内部文件可以存储在一个或更多个内部存储位置处的内部暂存区中,内部存储位置可以包括由管理和控制数据平台的同一组织(例如,公司)管理和控制的服务器,并且可以替代地或附加地包括由数据平台用于其“内部”存储的由存储提供者操作的数据存储资源(例如,云存储平台)。数据平台的内部存储在本文也被称为数据平台的“存储平台”。还注意到,给定消费者存储在给定外部存储位置处的给定外部文件可以存储在外部存储位置的外部暂存区中,也可以不存储在该外部暂存区中,即,在一些数据平台实现中,消费者选择是否在消费者的数据平台账户中创建一个或更多个外部暂存区(例如,一个或更多个外部暂存区对象),作为用于经由数据平台方便地与一个或更多个外部文件交互的组织和功能结构。
如图所示,云计算平台101的基于网络的数据库系统102与云存储平台104和122(例如,Microsoft Azure Blob/>或谷歌云存储(Google Cloud Storage))以及云凭证储存器提供者106通信。基于网络的数据库系统102是基于网络的系统,用于报告和分析来自包括云存储平台104内的一个或更多个存储位置的一个或更多个不同源的集成数据。云存储平台104包括多个计算机器,并向基于网络的数据库系统102按需提供计算机系统资源,例如数据存储和计算能力。
基于网络的数据库系统102包括计算服务管理器108、执行平台110和一个或更多个元数据数据库112。基于网络的数据库系统102托管并向多个客户端账户提供数据报告和分析服务。
计算服务管理器108协调和管理基于网络的数据库系统102的操作。计算服务管理器108还执行查询优化和编译,以及管理提供计算资源的计算服务的集群(也称为“虚拟仓库”)。计算服务管理器108可以支持任意数量的客户端账户,例如提供数据存储和检索请求的终端用户、管理本文描述的系统和方法的系统管理员以及与计算服务管理器108交互的其他部件/设备。
在一些实施例中,计算服务管理器108包括流管理器128,用于配置数据库对象类型(例如,流对象),以对查询结果中的变更进行查询并事务性地消费该变更。结合图2和图4-图13提供了流管理器128及其可以执行的功能的更详细的描述。
计算服务管理器108还与客户端设备114通信。客户端设备114对应于由基于网络的数据库系统102支持的多个客户端账户之一的用户。用户可以利用客户端设备114向计算服务管理器108提交数据存储、检索和分析请求。客户端设备114(也称为用户设备114)可以包括以下项中的一个或更多个:膝上型计算机、台式计算机、移动电话(例如,智能手机)、平板计算机、云托管计算机、云托管无服务器进程,或者可以用于通过网络105(诸如,互联网或专用网络)访问由云计算平台101提供的服务(例如,云计算服务103)的其他计算进程或设备。
在下面的描述中,动作归属于用户,特别是消费者和提供者。这种动作应被理解为是关于由这种用户操作的客户端设备(或多个设备)114执行的。例如,给用户的通知可以被理解为发送到客户端设备114的通知,来自用户的输入或指令可以被理解为通过客户端设备114接收,并且用户与界面的交互应被理解为与客户端设备114上的界面的交互。另外,归属于用户(消费者或提供者)的数据库操作(连接、聚合、分析等)应被理解为包括云计算服务103响应于来自该用户的指令执行此类动作。
计算服务管理器108还耦合到一个或更多个元数据数据库112,元数据数据库112存储与基于网络的数据库系统102及其用户相关联的各种功能和方面相关的元数据。例如,元数据数据库112可以包括存储在远程数据存储系统中的数据以及可从本地高速缓存获得的数据的概要。另外,元数据数据库112可以包括关于数据如何在远程数据存储系统(例如,云存储平台104)和本地高速缓存中组织的信息。由元数据数据库112存储的信息允许系统和服务确定是否需要在不从存储设备加载或访问实际数据的情况下访问一段数据。
作为另一个示例,元数据数据库112可以存储一个或更多个凭证对象115。通常,凭证对象115指示要从远程凭证储存器中检索的一个或更多个安全凭证。例如,凭证储存器提供者106维护多个远程凭证储存器118-1至118-N。远程凭证储存器118-1至118-N中的每一个可以与用户账户相关联,并且可以用于存储与用户账户相关联的安全凭证。凭证对象115可以指示要由计算服务管理器108从远程凭证储存器118-1至118-N之一检索的一个或更多个安全凭证(例如,用于访问由存储平台104存储的数据)。
计算服务管理器108还耦合到执行平台110,该执行平台110提供执行例如各种数据存储、数据检索和数据处理任务的多个计算资源(例如,执行节点)。执行平台110耦合到存储平台104和云存储平台122。存储平台104包括多个数据存储设备120-1至120-N。在一些实施例中,数据存储设备120-1至120-N是位于一个或更多个地理位置的基于云的存储设备。例如,数据存储设备120-1至120-N可以是公共云基础设施或私有云基础设施的一部分。数据存储设备120-1至120-N可以是硬盘驱动器(HDD)、固态驱动器(SSD)、存储集群、亚马逊(Amazon)S3TM存储系统或任何其他数据存储技术。另外,云存储平台104可以包括分布式文件系统(诸如,Hadoop分布式文件系统(HDFS))、对象存储系统等。在一些实施例中,至少一个内部暂存区126可以驻留在一个或更多个数据存储设备120-1至120-N上,并且至少一个外部暂存区124可以驻留在一个或更多个云存储平台122上。
在一些实施例中,计算环境100的元件之间的通信链路经由一个或更多个数据通信网络来实现。这些数据通信网络可以利用任何通信协议和任何类型的通信介质。在一些实施例中,数据通信网络是彼此耦合的两个或更多个数据通信网络(或子网络)的组合。在替代实施例中,使用任何类型的通信介质和任何通信协议来实现这些通信链路。
计算服务管理器108、元数据数据库112、执行平台110和存储平台104在图1中被示出为单独的分离部件。然而,计算服务管理器108、元数据数据库112、执行平台110和存储平台104中的每一个都可以被实现为分布式系统(例如,分布在多个地理位置处的多个系统/平台上)。另外,计算服务管理器108、元数据数据库112、执行平台110和存储平台104中的每一个可以根据所接收请求的变化和基于网络的数据库系统102的变化的需求而(彼此独立地)使其规模放大或缩小。因此,在所描述的实施例中,基于网络的数据库系统102是动态的,并且支持定期改变以满足当前的数据处理需求。
在典型操作期间,基于网络的数据库系统102处理由计算服务管理器108确定的多个作业。这些作业由计算服务管理器108调度和管理,以确定何时以及如何执行该作业。例如,计算服务管理器108可以将作业划分为多个离散任务,并且可以确定需要什么数据来执行多个离散任务中的每个离散任务。计算服务管理器108可以将多个离散任务中的每个离散任务分配给执行平台110的一个或更多个节点以处理任务。计算服务管理器108可以确定需要哪些数据来处理任务,并且进一步确定执行平台110内的哪些节点最适合于处理该任务。一些节点可能已经高速缓存了处理任务所需的数据,因此是用于处理任务的不错的候选者。存储在元数据数据库112中的元数据帮助计算服务管理器108确定执行平台110中的哪些节点已经高速缓存了处理该任务所需的至少一部分数据。执行平台110中的一个或更多个节点使用由节点高速缓存的数据以及必要时从云存储平台104检索到的数据来处理任务。期望从执行平台110内的高速缓存中检索尽可能多的数据,因为检索速度通常比从云存储平台104中检索数据快得多。
如图1所示,计算环境100的云计算平台101将执行平台110与存储平台104分开。在这种布置中,执行平台110中的处理资源和高速缓存资源独立于云存储平台104中的数据存储设备120-1至120-N进行操作。因此,计算资源和高速缓存资源不限于具体的数据存储设备120-1至120-N。相反,所有计算资源和所有高速缓存资源可以从云存储平台104中的任何数据存储资源检索数据,以及将数据存储到其中。
图2是示出根据本公开的一些实施例的计算服务管理器108的部件的框图。如图2所示,计算服务管理器108包括耦合到访问元数据数据库206的访问管理器202和凭证管理系统204,该访问元数据数据库206是元数据数据库112的示例。访问管理器202处理针对本文描述的系统的认证和授权任务。凭证管理系统204便于使用远程存储的凭证(例如,存储在远程凭证储存器118-1至118-N之一中的凭证)来访问外部资源,例如远程存储设备中的数据资源。如本文所用,远程存储设备也可以被称为“永久存储设备”或“共享存储设备”。例如,凭证管理系统204可以(例如,在访问元数据数据库206中)创建和维护远程凭证储存器定义和凭证对象。远程凭证储存器定义标识远程凭证储存器(例如,远程凭证储存器118-1至118-N中的一个或更多个),并且包括从远程凭证储存器访问安全凭证的访问信息。凭证对象使用非敏感信息(例如,文本字符串)来标识一个或更多个安全凭证,这些信息将从远程凭证储存器中检索以用于访问外部资源。当在运行时接收到调用外部资源的请求时,凭证管理系统204和访问管理器202使用存储在访问元数据数据库206中的信息(例如,凭证对象和凭证储存器定义)来从远程凭证储存器中检索用于访问外部资源的安全凭证。
请求处理服务208管理接收到的数据存储请求和数据检索请求(例如,将对数据库数据执行的作业)。例如,请求处理服务208可以确定处理接收到的查询的数据(例如,数据存储请求或数据检索请求)。数据可以存储在执行平台110内的高速缓存中,或者存储在存储平台104中的数据存储设备中。
管理控制台服务210支持管理员和其他系统管理员对各种系统和进程的访问。另外,管理控制台服务210可以接收对于执行作业并监视系统上的工作负荷的请求。
计算服务管理器108还包括作业编译器212、作业优化器214、和作业执行器216。作业编译器212将作业解析为多个离散任务,并为多个离散任务中的每个离散任务生成执行代码。作业优化器214基于需要处理的数据来确定执行多个离散任务的最佳方法。作业优化器214还处理各种数据修剪操作和其他数据优化技术,以提高执行作业的速度和效率。作业执行器216执行从队列接收的或由计算服务管理器108确定的作业的执行代码。
作业调度器和协调器218将接收到的作业发送到适当的服务或系统,以进行编译、优化并分派到执行平台110。例如,作业可以进行优先级排序然后按优先级顺序进行处理。在实施例中,作业调度器和协调器218确定由计算服务管理器108与其他“外部”作业(诸如可以由数据库中的其他系统调度但可以利用执行平台110中的相同处理资源的用户查询)调度的内部作业的优先级。在一些实施例中,作业调度器和协调器218识别或分配执行平台110中的特定节点以处理特定任务。虚拟仓库管理器220管理在执行平台110中实现的多个虚拟仓库的操作。例如,虚拟仓库管理器220可以生成用于执行接收到的查询的查询计划。
另外,计算服务管理器108包括配置和元数据管理器222,其管理与存储在远程数据存储设备和本地缓冲器(例如,执行平台110中的缓冲器)中的数据相关的信息。配置和元数据管理器222使用元数据来确定需要访问哪些数据文件来检索用于处理特定任务或作业的数据。监视器和工作负荷分析器224监督由计算服务管理器108执行的进程,并管理跨执行平台110中的虚拟仓库和执行节点的任务(例如,工作负荷)分配。监视器和工作负荷分析器224还根据需要,基于整个基于网络的数据库系统102中不断变化的工作负荷来重新分配任务,并且还可以基于也可以由执行平台110处理的用户(例如,“外部”)查询工作负荷来重新分配任务。配置和元数据管理器222以及监视器和工作负荷分析器224耦合到数据存储设备226。图2中的数据存储设备226表示基于网络的数据库系统102内的任何数据存储设备。例如,数据存储设备226可以表示执行平台110中的缓冲器、存储平台104中的存储设备或任何其他存储设备。
如本文实施例中所述,计算服务管理器108验证来自执行平台(例如,执行平台110)的所有通信,以验证该通信的内容和上下文与已知分配给执行平台的任务一致。例如,执行查询A的执行平台的实例不应被允许请求访问与查询A无关的数据源D(例如,数据存储设备226)。类似地,给定执行节点(例如,执行节点302-1)可能需要与另一个执行节点(例如,执行节点302-2)通信,并且应该被禁止与第三执行节点(例如,执行节点312-1)通信,并且可以(例如,在日志或其他位置中)记录任何这样的非法通信。此外,存储在给定执行节点上的信息仅限于与当前查询相关的数据,任何其他数据都不可用,在密钥不可用的情况下,通过销毁或加密来实现。
在一些实施例中,计算服务管理器108还包括流管理器128,用于配置数据库对象类型(例如,流对象),以对查询结果中的变更进行查询并事务性地消费该变更。流管理器128可以包括逐行视图管理器228,该逐行视图管理器228被配置为执行本文所讨论的与逐行视图配置和处理相关的功能。流管理器128还可以包括连接视图管理器230,该连接视图管理器230被配置为执行本文所讨论的与连接视图配置和处理相关的功能。
在一些实施例中,逐行视图管理器228被配置成支持对包含逐行运算符(例如,选择、投影和联合所有(union all))的(安全)视图的变更查询(change query)。在一些方面,对运算符的限制可以允许向用户交付数据处理特征。在一些实施例中,连接视图管理器230被配置成处理变更查询中的连接操作(或连接)(例如,在缓慢变化维度上)。与该功能相关联的该初始代数可以被扩展以覆盖更新、外部连接和更高阶的连接。该功能的实现还可能涉及重要的查询重写功能。
图3是示出根据本公开的一些实施例的执行平台110的部件的框图。如图3所示,执行平台110包括多个虚拟仓库,其包括虚拟仓库1(或301-1)、虚拟仓库2(或301-2)和虚拟仓库N(或301-N)。每个虚拟仓库都包括多个执行节点,每个执行节点都包括一个数据高速缓存和一个处理器。虚拟仓库可以通过使用多个执行节点并行执行多个任务。如本文所讨论的,执行平台110可以基于系统和用户的当前处理需求实时添加新的虚拟仓库和删除现有的虚拟仓库。这种灵活性允许执行平台110在需要时快速部署大量计算资源,而不必在不再需要它们时继续为那些计算资源付费。所有虚拟仓库都可以从任何数据存储设备(例如,云存储平台104中的任何存储设备)访问数据。
尽管图3所示的每个虚拟仓库包括三个执行节点,但特定的虚拟仓库可以包括任意数量的执行节点。此外,虚拟仓库中执行节点的数量是动态的,使得在存在额外需求时创建新的执行节点,并在不再需要现有执行节点时将其删除。
每个虚拟仓库能够访问图1中所示的数据存储设备120-1至120-N中的任何一个。因此,虚拟仓库不必被分配给特定的数据存储设备120-1至120-N,而是可以从云存储平台104内的数据存储设备120-1至120-N中的任何一个访问数据。类似地,图3中所示的每个执行节点可以从数据存储设备120-1至120-N中的任何一个访问数据。在一些实施例中,特定虚拟仓库或特定执行节点可以被临时分配给具体的数据存储设备,但是该虚拟仓库或执行节点后续可以从任何其他数据存储设备访问数据。
在图3的示例中,虚拟仓库1包括三个执行节点302-1、302-2和302-N。执行节点302-1包括高速缓存304-1和处理器306-1。执行节点302-2包括高速缓存304-2和处理器306-2。执行节点302-N包括高速缓存304-N和处理器306-N。每个执行节点302-1、302-2和302-N与处理一个或更多个数据存储和/或数据检索任务相关联。例如,虚拟仓库可以处理与内部服务(诸如,聚类服务、物化视图刷新服务、文件压缩服务、存储程序服务或文件升级服务)相关联的数据存储和数据检索任务。在其他实施方式中,特定虚拟仓库可以处理与特定数据存储系统或特定类别的数据相关联的数据存储和数据检索任务。
类似于上面讨论的虚拟仓库1,虚拟仓库2包括三个执行节点312-1、312-2和312-N。执行节点312-1包括高速缓存314-1和处理器316-1。执行节点312-2包括高速缓存314-2和处理器316-2。执行节点312-N包括高速缓存314-N和处理器316-N。另外,虚拟仓库3包括三个执行节点322-1、322-2和322-N。执行节点322-1包括高速缓存324-1和处理器326-1。执行节点322-2包括高速缓存324-2和处理器326-2。执行节点322-N包括高速缓存324-N和处理器326-N。
在一些实施例中,图3中所示的执行节点相对于由执行节点高速缓存的数据是无状态的。例如,这些执行节点不存储或不以其他方式维护关于执行节点或由特定执行节点缓存的数据的状态信息。因此,在执行节点发生故障的情况下,可以用另一个节点透明地替换发生故障的节点。由于没有与发生故障的执行节点相关联的状态信息,因此新的(替换)执行节点可以轻松替换发生故障的节点,而无需考虑重新创建特定状态。
尽管图3中所示的执行节点包括一个数据高速缓存和一个处理器,但是替代实施例可以包括包含任意数量的处理器和任意数量的高速缓存的执行节点。另外,高速缓存的大小在不同执行节点之间可能有所不同。图3中所示的高速缓存在本地执行节点中存储从云计算服务平台104中的一个或更多个数据存储设备检索的数据。因此,高速缓存减小或消除了在从远程存储系统中不断检索数据的平台中出现的瓶颈问题。本文描述的系统和方法不是从远程存储设备重复访问数据,而是从执行节点中的高速缓存访问数据,这明显更快并且避免了上面讨论的瓶颈问题。在一些实施例中,使用提供对高速缓存的数据的快速访问的高速存储器设备来实现高速缓存。每个高速缓存可以存储来自云存储平台104中的任何存储设备的数据。
此外,高速缓存资源和计算资源可以在不同的执行节点之间变化。例如,一个执行节点可包含大量的计算资源和最少的高速缓存资源,从而使该执行节点可用于需要大量计算资源的任务。另一个执行节点可包含大量的高速缓存资源和最少的计算资源,从而使该执行节点可用于需要高速缓存大量数据的任务。又一个执行节点可包含提供更快的输入-输出操作的高速缓存资源,这对于需要快速扫描大量数据的任务很有用。在一些实施例中,基于执行节点将要执行的预期任务,在创建执行节点时确定与特定执行节点相关联的高速缓存资源和计算资源。
另外,与特定执行节点相关联的高速缓存资源和计算资源可以基于由执行节点执行的改变的任务而随时间改变。例如,如果执行节点执行的任务变得更加处理器密集,则可以为执行节点分配更多的处理资源。类似地,如果执行节点执行的任务需要更大的高速缓存容量,则可以为执行节点分配更多的高速缓存资源。
尽管虚拟仓库1、2和N与同一执行平台110相关联,但是可以使用在多个地理位置处的多个计算系统来实现虚拟仓库1、……N。例如,虚拟仓库1可以由第一地理位置处的计算系统来实现,而虚拟仓库2和n由第二地理位置处的另一计算系统来实现。在一些实施例中,这些不同的计算系统是由一个或更多个不同的实体维护的基于云的计算系统。
另外,每个虚拟仓库在图3中被示为具有多个执行节点。可以使用位于多个地理位置处的多个计算系统来实现与每个虚拟仓库相关联的多个执行节点。例如,虚拟仓库1的实例在一个地理位置处的一个计算平台上实现执行节点302-1和302-2,而在另一个地理位置处的不同计算平台处实现执行节点302-N。选择特定的计算系统以实施执行节点可以取决于各种因素,诸如特定的执行节点所需的资源水平(例如,处理资源要求和高速缓存要求)、特定计算系统处可用的资源、地理位置内或地理位置之间的网络的通信能力以及哪些计算系统已在虚拟仓库中实现其他执行节点。
执行平台110也是容错的。例如,如果一个虚拟仓库发生故障,那么该虚拟仓库将很快被位于不同地理位置处的不同虚拟仓库替换。
特定执行平台110可以包括任意数量的虚拟仓库。另外,特定执行平台中虚拟仓库的数量是动态的,使得在需要附加的处理和/或高速缓存资源时创建新的虚拟仓库。类似地,当不再需要与虚拟仓库关联的资源时,可以删除现有的虚拟仓库。
在一些实施例中,虚拟仓库可以对云存储平台104中的相同数据进行操作,但是每个虚拟仓库具有其执行节点,这些执行节点具有独立处理资源和高速缓存资源。此配置允许对不同虚拟仓库上的请求进行独立处理,并且请求之间不会相互干扰。这种独立的处理与动态添加和移除虚拟仓库的能力相结合,支持为新用户添加新的处理能力,而不会影响现有用户观察到的性能。
如本文所用,术语“表”指示可变的行包,支持直到保留期的时间旅行(timetravel)。
如本文所用,术语“视图”指示命名的SELECT语句,在概念上类似于表。在一些方面,视图可以是安全的,这可以防止查询间接获得基础数据(underlying data)的信息。
如本文所用,术语“物化视图”指示被即时计算而不是延迟计算的视图(例如,作为标准视图)。在一些方面,物化视图的有效实现与变换跟踪功能有重叠。
如本文所用,术语“CHANGES子句”指示FROM子句上的语法修饰符,该FROM子句指示SELECT语句应该返回在两个给定时刻(docs)之间指定表发生的变更。在一些方面,可以请求几种不同的变更类型:
(a)默认类型(也称为delta)查找能够解释给定时刻的表之间差异的最小变更集;
(b)仅追加(append-only)类型仅会查找被添加到表中的行;和
(c)审计类型(目前不是公开的)计算给定时刻之间所做的所有变更,即使它们相互抵消。
图4是根据本公开的一些实施例的结合查询处理使用CHANGES子句的图400。参考图4,查询或数据处理命令(插入404、删除406和更新408)被应用于源表402。如图4所示,SELECT语句412可以被用于返回在时段410(例如,一小时)期间发生的对源表402的变更。
如本文所用,术语“流”指的是表和时间戳。在一些方面,流可以被用于迭代对表的变更。当在数据操纵语言(DML)语句中读取流时,其时间戳可能会事务性地前进到其时间间隔(docs)的较大时间戳。在与连接操作(或连接)相关的一些方面,术语“流”可以指表到时间戳的映射。
图5是根据本公开的一些实施例的用于表的流对象配置的图500。参考图5,查询或数据处理命令(插入504、删除506和更新508)被应用于源表502。如图5所示,在时刻X1、X2(在从X1开始的时间间隔510之后)和X3(在从X2开始的时间间隔512之后)在源表T1 502上生成流514。另外,在操作516处,在表T2上创建流S1。在操作518处,来自时刻X1的流S1的流条目被插入到表T2中。在操作520处,来自时刻X2的流S1的流条目被插入到表T2中。
如本文所用,术语“访问控制”指示消费者可以控制谁可以访问其组织(docs)内的数据库对象。
如本文所用,术语“数据共享”指示消费者可以将对数据库对象的访问权限授予其他组织(docs)。
在一些方面,任何带有CHANGES子句或流的查询都可以被称为变更查询。视图上的变更查询可以类似地被定义。
在一些实施例中,流管理器128被配置为提供对视图(例如,视图上的流)的变更,以便可以进一步处理和操作这些变更。更具体地,流管理器128可以被配置为提供或处理与以下三个用例相关的视图上的流:共享视图、复杂视图和视图演变。在一些方面,在给定的时刻可以应用超过一个的用例。
共享(安全)视图可以被用于提供(例如,用户或组织)对敏感数据的有限访问。数据的消费者通常希望观察与他们共享的数据的变更。该用例隐含的一些考虑因素包括让消费者了解共享视图的保留期,以及如何对变更查询实施安全视图限制。
图6是根据本公开的一些实施例的共享视图的图600。参考图6,数据提供者602管理源表604。数据提供者602将不同的过滤器应用于源表604,以生成视图606和视图608。视图606与消费者610共享,视图608与消费者614共享。在一些实施例中,流管理器128被用于在对应的视图606和视图608上配置流612和流616,以供消费者610和消费者614消费。
视图的定义可能相当复杂,但是观察这种视图的变更可能是有用的,与它的复杂性无关。手动构造查询来计算这些变更是可以实现的,但是可能很费力,容易出错,并且存在性能问题。在一些方面,视图上的变更查询可以自动重写视图查询,从而减轻用户的负担。在一些方面,可以使用仅包含逐行运算符(例如,选择、投影、联合所有)的简单视图。在一些方面,也可以使用将事实表(fact table)与(可能是几个)缓慢变化维度(DIM)表连接的复杂视图。其他类型的运算符,如聚合、窗口函数和递归,也可以用于与复杂视图一起使用。
图7是根据本公开的一些实施例的基于复杂视图的流对象的图700。参考图7,可以基于源表702、704和706生成复杂视图708。在一些实施例中,流管理器128基于源表702、704和706的复杂视图708来配置流710。
在一些方面,视图可以被用于创建抽象边界,其中基础表(underlying tables)可以在消费者不知道的情况下被修改。例如,经历向后不兼容模式(schema)变更的表上的视图可能会被在不同查询中呈现相同数据的新查询所替换,从而导致视图演变。在一些方面,变更查询可以跨视图重定义来工作,允许对视图的变更观察不受对其定义的修改的干扰。这个用例的考虑因素可以包括模式兼容性和性能。一些视图重定义可以使用全连接(fulljoin)来解析,而其他视图(诸如涉及表克隆的工作流)可以更有效地被解析。
图8是根据本公开的一些实施例的视图演变的图800。参考图8,在操作804处,基于选择操作创建视图V1 802。视图V1 802的流S1 812在时刻X1、X2(在从X1开始的时间间隔808之后)和X3(在从X2开始的时间间隔810之后)生成。另外,在操作814处,来自时刻X2的流S1的流条目被插入到表T2中。在时刻X3之前,当使用联合所有操作时,视图V1 802在操作806处演变。在操作816处,来自流S1的流条目(基于时刻X3处的演变的视图V1)被插入到表T2中。
在一些实施例中,为了提供或处理与上面列出的用例相关的视图上的流,流管理器128可以配置有以下功能:直观的语义(intuitive semantics)、不令人意外的安全性(unsurprising security)、线性成本扩展(linear cost scaling)和易操作性。
在与直观语义相关的一些方面,视图上的变更查询可以直观且一致地工作。变更查询的本质是获取时变的对象和时间间隔,然后返回一组解释该间隔内对象差异的变更。该定义自然适用于视图,但是还有一些附加的配置在下文讨论。
由于流管理器128可能不支持所有操作,因此可以配置视图上的属性,其显式地允许对其进行变更查询:CHANGE_TRACKING=true。当在启用该属性的情况下创建视图时,将执行验证,以确定视图仅包含受支持的运算符,并且基表已启用变更跟踪。当对视图发出变更查询时,如果视图启用了变更跟踪,则该变更查询可能会成功。
在一些方面,持久变更查询(standing change query)(例如,流)可以表现出引用语义(reference semantics)。也就是说,当用户在变更查询中指定视图时,这种指定可以被解释为引用视图本身,而不是视图当前被定义为什么。采用值语义(value semantics)可能会导致意外的行为,尤其是在访问管理方面。
采用引用语义与可以修改视图的方式相关联。以下技术可以被用于视图修改:
(a)“ALTER VIEW…RENAME TO…”当视图被重命名时,引用它的对象可能会被更新。遵循该先例意味着如果流的视图被重命名,那么流应该中断。
(b)“ALTER VIEW…SET SECURE…”如果视图是安全的,对它的后续变更查询应该实施安全视图约束。
(c)“CREATE OR REPLACE VIEW…”如果视图被替换,则有处理选项。根据视图演变用例,一些用户可能希望视图保持工作,只要替换是模式兼容的。然而,这可能会增加实现的复杂性。
在与不令人意外的安全相关的一些方面,视图上的变更查询的消费者可能与他们对视图本身具有相同的访问权限。以下配置可能适用于所有视图:如果基础表没有启用变更跟踪,并且创建者没有启用它的权限,则在视图上创建流会失败;消费者可以看到由视图引用的表的最短保留期(他们看不到保留适用于哪个表);如果视图中的表在保留期开始之前启用了变更跟踪,消费者可以看到它是何时启用的。
在一些方面,以下配置可以被应用于安全视图:消费者看不到视图的定义;在授予视图访问权限之前,消费者不能发出变更查询;优化遵守安全视图限制(它们不会将运算符重新排序到扩展视图中),并且安全视图中表的保留期不会自动延长,以防止消费流过时。
在与线性成本扩展相关的一些方面,表上变更查询的关键属性是它们的成本(就延迟和信用而言)可能与结果大小成比例。当这种扩展对于增量查询不成立时,可以引入仅追加变更查询来解决。在一些方面,视图上的变更查询可能在成本上具有类似的扩展性。也就是说,增量变更查询和仅追加变更查询可以根据结果大小成比例地扩展。
在与易操作性相关的一些方面,在视图上引入变更查询可能会增加视图提供者和消费者之间的距离(共享视图用例可能围绕这一点)。距离使得提供者和消费者之间的合作更加困难。反过来,这意味着视图上的变更查询的流畅操作体验比传统的变更查询更重要。在一些方面,流管理器128可以解决以下操作挑战:处理视图修改和表面错误(surfaceerror)。
在与视图修改的处理相关的一些方面,如果视图提供者重命名或替换他们的视图,其上的流将中断。然后消费者会想要采取行动来修复它。这种修复的细节是特定于用例的,但它可能涉及尝试用新定义重新创建流,并从中断的流释放(let off)的地方恢复。为了支持这一点,流管理器128可以被配置为支持以下形式的语句:CREATE OR REPLACESTREAM s…AT(STREAM=>s)。流S正在被查询和替换。
在与表面错误相关联的一些方面,视图消费者可能试图发出由于各种原因而无效的变更查询。消费者可能会清楚地看到这些错误。这样的错误的示例包括:基础表可能没有启用变更跟踪;变更查询可能超出了表的保留期;变更查询可能包含不支持的运算符;以及视图可能已被修改,中断了变更查询。
视图提供者可以对视图及其衍生的任何对象发生的事情拥有控制权。然而,他们将受益于如何使用视图的可见性,以避免意外地打断消费者。这种通知的示例包括:当提供者试图对视图进行破坏性修改(breaking modification)时,警告提供者消费者将被影响;当消费者的变更查询由于保留或变更跟踪而失败时,向提供者发送通知;并且还支持一些自省(introspection),诸如视图提供者查看消费它的流的数量及其偏移量。
视图上的流–用于流管理器128的一般配置
表(包括外部表)上的流对象可以被配置为让用户在表中的基础数据发生变更时检索变更集(changeset)的流。流对象被配置为在变更集的该列表中保持一个位置,并且只有在DML语句中使用它时才会前进。从流中读取可以返回从当前位置到当前事务时间戳的变更集。随着基础数据的变更,变更集的大小将会增加,直到流前进。在一些方面,前进可能是事务性的。
在一些实施例中,流管理器128被配置为创建和处理视图上的流对象,特别是对于数据共享场景进行。在一方面,共享数据消费者可以从共享数据提供者获得最新的变更。由于暴露共享数据是通过安全视图完成的,那么可以在消费者侧上的来自提供者的视图上创建流。在一些方面,物化视图上的流也可以被配置为允许在基础物化视图(MV)变更时检索变更集。
在一些实施例中,在视图(例如,查询)上提供变更集类似于增量物化视图维护问题。在MV的情况下,随着基础数据源的变更,物化的数据集可以被增量地更新。在一些方面,该处理可以在微分区级别执行,以创建查询计划,该查询计划使用来自添加的/删除的分区的数据,并将其与MV数据合并以产生更新的数据。
在视图上的流对象(或流)的情况下,返回的变更集可以是视图在当前事务时刻返回的数据与视图在流位置的事务时刻返回的数据相比的增量。在一些方面,有效地计算增量可以是考虑因素,因为可能没有可以利用和增量更新的物化数据集。在一些方面,为了缓解当前物化视图(MV)支持的查询的限制,可以在后台创建物化视图,这是有意义的,尤其对于聚合查询。
在一些方面,可以有效地生成用于某些类别的查询的增量(例如,如果只有一个数据源)。在这种情况下,视图的数据源可以逻辑地替换为由数据源上的流提供的增量。在一些实施例中,流管理器128也可以支持在视图进行投影和过滤。例如,在增量上应用运算符与在两个端点处的数据集上计算增量提供相同的结果的情况下,可以允许数据处理运算符。在初始解决方案中,当在视图上创建流时,将验证对视图的支持,定位数据源表,并为表设置变更跟踪。当从流中请求数据时,查询计划中的底层视图(underlying view)被扩展,数据源表被替换为生成增量(类似于如果一开始就在该表上配置了流,那么所应用的处理方式)。对于安全视图,该处理也可以被支持,因为内部的数据源被交换,而且不会有外部过滤器(outside filters)被推送进来。
除了保持变更集起点的位置之外,流还可以隐式地将基础表上的保留期扩展到两周,这取决于流位置指向过去的表版本历史中多远的位置。这种处理也可以针对非远程数据源执行。对于共享数据源,可能不使用相同的机制,因为远程侧上的表压缩状态数据需要更新。就这一点而言,共享数据源上的流可能会在一天后过时,这是表的默认保留期。为了减轻该影响,共享数据的提供者可以增加表上的保留期,以允许提供者侧的流有更多的时间被消费(和前进)。
图9是根据本公开的一些实施例的由流管理器128执行的流扩展的图900。参考图9,查询可以包括应用于源表T的投影操作902和过滤操作904。在操作906处,(例如,由流管理器128)在源(基)表T上生成流S。如图9所示,对流S执行流扩展901以用连接操作908替换流S,其中该连接操作908被应用于表扫描操作910和912之间。表扫描操作910可以基于为添加的文件扫描源表T,并且表扫描操作912可以基于为删除的文件扫描源表T。
在与流扩展相关联的一些实施例中,通过考虑流S的基表T中添加的和删除的文件(微分区)并在逻辑行id上连接这些表中的行来计算流增量变更。在一些方面,逻辑行ID在示例DML操作期间由变更跟踪系统维护。如图9所示,流扩展901将生成连接操作908(以及可能的图9中为简单起见未示出的可能的其他操作),并将基于增量信息生成插入的和删除的行。如果基表T中一行被更新,将会在这些中生成具有特殊的行id的删除的和插入的一行,以允许匹配这些行。以下是针对可以结合图9使用的查询的高级查询计划的示例:CREATESTREAM S ON TABLE T;以及SELECT C1,C2 FROM S WHERE C3>2。
图10是根据本公开的一些实施例,由流管理器128结合单个源表执行的视图扩展和流扩展的图1000。参考图10,流管理器128可以处理包括视图上的投影操作1002和流S1004的查询1001。该视图可以包括基于投影操作1006、过滤操作1008以及在源表(基表)T上的表扫描操作1010的示例视图1005。
流管理器128可以执行视图扩展操作1003,并且包括代替视图上的流S1004的投影操作1012、过滤操作1014和基表T上的流S1016。流管理器128可以执行流扩展操作1007以用连接操作1018替换流S1016。连接操作1018可以应用于表扫描操作1020和1022之间。表扫描操作1020可以基于为添加的文件扫描源表T,并且表扫描操作1022可以基于为删除的文件扫描源表T。
在一些实施例中,为了在具有一个表源的视图上生成流变更集,流管理器128可以根据视图扩展期间的流偏移用变更集替换表源。以下是针对可以结合图10使用的查询的高级查询计划的示例:CREATE VIEW V AS SELECT C1,C2 FROM T WHERE C3>2;CREATESTREAM S ON VIEW V;以及SELECT C1 FROM S。
在与数据共享场景和处理具有至少两个表内连接(inner join)的视图相关联的一些方面中,流管理器128可以使用表来限制在共享表中哪些行是可见的。这种类型的处理可以使用安全视图来完成,这样用户只能从表中检索特定的数据集。在这种情况下,表源可能不会被流替换,因为自上次流被消费以来,两个表都可能发生了变更。在这方面,流管理器128可以通过生成以下项的联合(union)来生成用于两个表的连接的变更集:将先前的表数据与增量进行连接,以及将增量本身进行连接(例如,如图11所示)。在某些方面,可以考虑仅插入变更。在这种情况下,A[T1]的符号是事务时间的表数据集,ΔA[T1-T2]是T1和T2之间的变更集。表1所示的以下处理可由流管理器128执行:
表1
在一些方面,可以由流管理器128执行表2中所示的以下处理以仅删除变更:
表2
在一些方面,视图和流扩展可以通过在适用的情况下用适当的变更集替换表源来被变更,并且连接可以用两个连接的联合来替换。
图11是根据本公开的一些实施例,由流管理器128结合多个源表执行的视图扩展和流扩展的图1100。参考图11,流管理器128可以处理包括视图V上的投影操作1102和流S1104的查询1101。视图V可以包括基于投影操作1106和连接操作1108的示例视图1105。连接操作1108与用于源表A的表扫描操作1110和用于源表B的表扫描操作1112相关联。
流管理器128可以执行视图扩展1103,并且包括代替流S1104的投影操作1114和连接操作1116。连接操作1116与源表A上的流1118和源表B上的流1120相关联。
流管理器128可以执行流扩展1107,以用联合操作1122替换连接操作1116。联合操作1122可以在连接操作1124和连接操作1126上执行。连接操作1124可以在表扫描操作1128和表扫描操作1130上执行,以及连接操作1126可以在表扫描操作1132和表扫描操作1134上执行。
逐行视图管理器228的示例配置
在与示例语法相关联的一些实施例中,可以为逐行视图管理器228配置视图上的新属性,以基于以下表3中的语法启用变更跟踪特征:
表3
在一些实施例中,基于以下表4中的语法,可以为逐行视图管理器228配置在变更跟踪视图上创建流的新的语法:
表4
在一些实施例中,CHANGES子句可以由行视图管理器228使用以下语法应用于变更跟踪视图:SELECT…FROM<view>CHANGES…
在一些实施例中,基于以下表5中的语法,SHOW STREAMS的输出中的新列可以由逐行视图管理器228应用:
表5
在与支持的视图相关联的一些实施例中,逐行视图管理器228可以支持包含以下操作的视图:
(a)过滤:“SELECT…WHERE<predicate>”。
(b)投影:“SELECT c1,c2,…FROM v”。
(c)确定性标量函数。以下函数可能被明确禁止:如CURRENT_TIME的上下文函数(可能支持如CURRENT_SCHEMA的半确定性上下文函数)和如SYSTEM$EXPLAIN_PLAN_JSON的系统函数(可能支持SYSTEM$TYPEOF)。
(d)UNION ALL:此操作可能对物化工作流有用。在一些方面,对安全视图的查询可能会阻止优化将视图之外的运算符移动到视图中。
在与改变(alter)视图操作相关联的一些实施例中,逐行视图管理器228被配置成支持如下改变视图。
(a)RENAME TO<new_name>:该操作可用于变更视图的用户可见名称,但不能变更其ID。流可以继续工作,就像什么都没有变更一样。未来的SHOW STREAMS查询可以显示新的视图名称。
(b){SET|UNSET}SECURE:该操作可用于将视图变更为{secure|not-secure}。未来从流中的读取将{apply|not apply}安全约束到查询。
(c){SET|UNSET}COMMENT:该操作可用于将字符串与视图相关联。
在与视图创建时的流相关联的一些方面中,逐行视图管理器228可以被配置用于处理以下语法格式:
(a)允许VIEW关键字;
(b)在SqlParser::generateParseTreeCreateDDL中处理VIEW表类型。视图可以在创建时被扩展和验证。这可以通过以下方法中的一个来实现:
(b.1)使用SqlObjectRef::setDontExpandView并让验证器访问解析树;
(b.2)手动获取视图定义并使用Statement.compile来验证它;
(b.3)这两种方法都可以包括通知SqlValidator访问者它正在变更查询中工作,这可以用布尔字段SqlValidator::inChangeQuery来配置。可以使用DefaultSqlNodeVisitor提取用于视图的源表。使用这些表,处理可以绑定到现有代码中,该代码检查是否对它们启用了变更跟踪(并尝试启用它或启用失败),并查找和存储最新的表版本作为当前流状态。对于安全视图,逐行视图管理器228可以检查流的初始偏移量是否在视图被共享的时间之前。
在与CHANGES子句相关联的方面中,逐行视图管理器228可以被配置为处理SqlObjectNameResolver::visitPost(SqlFrom)中的该查询类型,从其调用Stream::expandImplementation。可以通过检查FROM引用是否是物理表来保护扩展。在一些实施例中,该保护可以被放松以允许视图。
在与显示(Show)和描述(Describe)相关联的一些实施例中,可以添加以下两列来显示ExecShow中的流(SHOW STREAMS in ExecShow):source_kind是流的源(表或视图)的域,source_name是该源的名称。在一些方面,可以添加包含源的保留时间的行。
在与流扩展相关联的一些实施例中,逐行视图管理器228可以配置有扩展的Stream::expandImplementation,以使用SqlObjectNameResolver::expandViewDefinition扩展视图。一旦视图被扩展,处理代码可以正常地进入expandGeneratedViewText,其中流被扩展。表流扩展可以配置为具有对叶子表(leaftable)的立即访问。在视图流的情况下,逐行视图管理器228可以遍历视图并在每个叶子表上执行流扩展。由于逐行视图的代数属性,也可以在视图内部执行当前流扩展。
逐行视图管理器228可以被配置为区分源表和偏移表,源表是变更查询所针对的视图,偏移表是扩展视图内部的叶子表。在查询扩展期间,逐行视图管理器228可以处理以下几种异常:(a)如果流的源视图被替换,表查找将返回空值,就像表的情况一样;以及(b)如果流的源表超出了它们的保留时间,则当获取EP文件时,扩展的变更查询将在流扩展期间失败。
在与查询验证相关联的一些实施例中,查询验证可以由逐行视图管理器228使用SqlValidator树访问者来执行。验证可以在完全扩展的树上运行。在一些方面,验证可以基于物化视图验证建模,并重用相同的工具。在一些方面,相同的检查可能不会被重用。在一些方面,验证逻辑可以被重构(refactor)。
在一些实施例中,如果访问者正在遍历以下任一个的后代,则可以启用视图流验证:
(a)SqlCreateStream节点,其指示被遍历的树是流的源。为了通知该上下文的访问者,我们向SqlValidator添加了一个布尔字段,类似于SqlValidator::inMaterializedViewCreation。
(b)流上的SqlFrom节点或带有变更子句的SqlFrom节点。可以检查queryBlocksdeque以确定当前节点是否具有作为祖先的from-with-changes节点。在一些实施例中,该信息可以在QueryBlockVisitState中物化以提高性能。
在一些实施例中,当访问者处于变更查询上下文中时,可以检查以下约束:
(a)在visit(SqlObjectRef)中:例如,基于没有内置视图、物化视图、表函数等。
(b)在visit(SqlQueryBlock)中:例如,基于无窗口函数(no window functions);无不同(no distinct);无分组(no group by);无限制(no limit);无排序(no order by);FROM子句只有单一的物理源表或……,只有UNION ALL、没有CHANGS子句的连接树。
(c)在visit(SqlSessionVariableRef)中,错误。
(d)在visitPre(SqlFunction)中:只有确定性函数,没有聚合函数。
在与偏移量泛化相关联的一些实施例中,流的偏移量可以存储为一对表ID和时间戳。这种配置可能适用于单表视图,但也可以泛化以处理多表视图。
在一些实施例中,引入了前沿(Frontier)类来抽象地表示流的进度。该类可以具有以下子类型:TableFrontier(对于表流,前沿是单一的表和时间戳),ViewFrontier(对于视图流,前沿是从表id到时间戳的映射,包含扩展视图中的表),以及<external source>Frontier。可扩展的前沿类型可以促进扩展流以覆盖这样的用例。
在一些实施例中,可以使用以下中的一种或更多种对前沿进行编码:JavaScript对象表示法(JSON)、由整数对的数组组成的简单二进制格式,以及使用另一种编码方式将前沿编码成二进制格式。
为了存储,STREAM_OFFSET、STREAM_ADVANCE和STREAM_TABLE_ID值可以迁移到包含编码的前沿的单个字符串。具体来说:
(a.1)在STREAM_STATE_SLICE中,弃用STREAM_OFFSET和STREAM_TABLE_ID,并添加CURRENT_FRONTIER。
(a.2)在TXN_STREAM_STATE_SLICE中,弃用STREAM_OFFSET、STREAM_ADVANCE和TABLE_VERSIONS_COUNT,并添加CURRENT_FRONTIER和NEXT_FRONTIER。
(a.3)在CHANGELOG_SLICE中,弃用STREAM_OFFSET和STREAM_TABLE_ID,并添加CURRENT_FRONTIER。
连接视图管理器230的示例配置
在与多表流状态相关联的一些实施例中,连接视图管理器230可以被配置为将流的偏移量存储在3个字段中:表ID(table ID)、偏移量(offset)和水印(watermark)。此模型可用于单表视图,但可以泛化以表示多个偏移量。
可以引入前沿类来抽象地表示流的进度。在一些方面,该类可以只有单一子类型表前沿。对于常规表、外部表、目录表和视图上的流,前沿是从表id到偏移量和水印的映射,包含扩展视图中的表。在一些方面,可扩展的前沿类型可以促进扩展流。
在与前沿前进(frontier advance)相关联的一些方面中,当查询流时,可以参考给定END()时间(或者当前时间,如果没有提供END()时间的话)之前的基表的最新版本来计算新的偏移量。新的偏移量可以被称为流的前进。这种计算可以被泛化以计算所有基表的前进前沿(advanced frontier)。
在一些实施例中,可以使用以下项中的一种或更多种对前沿进行编码:JavaScript对象表示法(JSON)、由整数对的数组组成的简单二进制格式,以及使用另一种编码方式将前沿编码成二进制格式。
为了存储,STREAM_OFFSET、STREAM_ADVANCE和STREAM_TABLE_ID值可以迁移到包含编码的前沿的单个字符串。具体来说:
(a.1)在STREAM_STATE_SLICE中,添加CURRENT_FRONTIER并弃用STREAM_OFFSET、STREAM_WATERMARK和STREAM_TABLE_ID。
(a.2)在TXN_STREAM_STATE_SLICE中,添加CURRENT_FRONTIER和NEXT_FRONTIER,并弃用STREAM_OFFSET、STREAM_WATERMARK、STREAM_ADVANCE、STREAM_ADVANCE_WATERMARK和TABLE_VERSIONS_COUNT。
(a.3)在CHANGELOG_SLICE中,添加CURRENT_FRONTIER并弃用STREAM_OFFSET、STREAM_WATERMARK和STREAM_TABLE_ID。
在与流DDL、DML和系统功能相关联的一些方面中,当在单表视图上创建流时,可以扩展该视图并且可以提取其基表ID。对于多表视图,可以找到并存储所有这样的表ID。对于用户提供的初始偏移量,可以创建流状态,其中初始偏移量存储在StreamDPO中,这可以被前沿替换。
在一些实施例中,单对象克隆可以被配置为解析当前前沿而不是基表的当前版本。对于模式和数据库克隆,如果源视图和基表中的任何一个被克隆,可能需要使用从旧到新的映射来解析源视图和基表。
在一些实施例中,SHOW和DESCRIBE STREAM命令具有指示流当前是否过时以及何时将变得过时的列。可以更新该计算,以找到所有基表的最小过时时间(stale time)。
在一些实施例中,每当流的基表具有未消费的表版本,STREAM_HAS_DATA系统函数就返回真值(true)。当任一基表具有未消费的表版本时,该函数可以泛化以返回真值。
流刷新发生在调用STREAM_HAS_DATA期间,这是在流为空时向上移动流的偏移量和水印的过程。该过程可以泛化以刷新多个基表上的前沿。因为视图可以过滤表中的大部分数据,但STREAM_HAS_DATA只检查是否有任何表已变更,所以检查视图上的流是否有数据比表上的流更容易出现误报(false positives)。在一些实施例中,可以使用对整个流查询的查询剪枝(query pruning)来降低误报率。
在一些实施例中,STREAM_GET_TABLE_TIMESTAMP系统函数获取流的当前偏移量作为时间戳。对于具有多个基表的流,该函数可能会返回错误。
在与Get_DDL()相关联的方面中,定义流的DDL可以独立于定义它的视图的定义。
在与DML和事务相关联的方面,流和连接视图管理器230之间的交互可以不受影响,因为流状态封装了实现细节。然而,可以对StreamStateDAO中的代码进行变更,该代码将未提交的流状态存储在流的事务工作区中。这可以支持存储前沿以及(table id,offset,advance)。此外,对于流中的每个基表,流保留扩展可以泛化到EpFileCompactStatus::setStreamOldestTableVersionToKeep。
在与多表变更查询相关联的方面,流可以在名称解析期间(在类型检查和优化之前)扩展成变更查询。这种扩展创建并扩展了内置视图来计算流中的变更,并解析了计划需要扫描的微分区。
在名称解析期间扩展内置视图可以与仅计算基表和简单选择/投影视图中的变更的流结合使用。在这种情况下,扩展可以类似于扩展常规内置视图来执行。然而,当查询更复杂时,可能需要重写整个视图。在名称解析期间这样做可能会带来挑战,这些挑战可以基于重构流扩展和将变更查询重写移动到优化器中来解决。
在一些实施例中,并且结合提供编译器概述,由连接视图管理器230使用的编译器阶段可以包括:
(a)解析(SqlParser):将查询文本转换为表示查询语法的解析树。
(b)类型检查(SqlTypechecker):名称解析(SqlObjectNameResolver::resolve):将解析树中的名称解析为字典实体(dictionary entities),检查权限,并扩展视图。类型解析(SqlTypechecker::typeResolution):推断表达式的类型,在遇到矛盾时引发类型错误。验证(SqlValidator::validityCheck):确保解析树符合类型检查以外的约束,诸如MV或变更查询支持哪些操作。解析树优化(SqlTypechecker::optimizeTypecheckStatement):对解析树进行一系列初步重写,包括表达式重写(将标量表达式重写为更简单的形式)、早期的常量折叠、过滤下推(filter pushdown)和剪枝。
(c)查询计划(QueryPlanner::generateQueryPlan):解析树转换(SqlQueryBlockTranslator):将SQL语法结构转换为接受输入并产生输出的运算符的统一表示。例如,SELECT表达式被分解为用于扫描、选择、投影、连接和聚合的节点。计划优化(QueryPlanRewriter):对查询计划进行一组更全面的重写,包括更多的常量折叠、过滤下推、剪枝、聚合下推(aggregation pushdown)和基于成本的优化。
(d)代码生成(CodeGenerator::generateSDL):采用优化的查询计划并生成SDL程序供XP执行。
在与流扩展重构相关联的一些实施例中,将流扩展移动到查询计划优化器中可以提供以下处理效率:
(a)更简单的表示。解析树直接表示称为SqlQueryBlock的类中的SQL构造。就具有输入和输出的运算符而言,查询计划更统一地表示相同的逻辑。由于这种统一性,重写更容易在查询计划上实现。
(b)代码重用(code reuse)。计划重写规则框架可以用来实现许多优化器重写规则。
(c)灵活性。优化器中的重写可以提供对重写调用的顺序的控制,这允许改进与现有的优化(如过滤下推、剪枝和连接排列)的集成。
对于重构,可以为连接视图管理器230提供以下配置:
(a)在名称解析中,将流重写为带有CHANGS子句的视图(可以称为变更视图)。变更视图是通过以下方式创建的:从源中选择所有列,并将变更元数据列(ROW_ID、ACTION、ISUPDATE)定义为稍后要解析的系统函数;并从流的源读取。基于以下内容创建变更视图的对象引用:设置视图查询块变更视图;将AT和END时间设置为流的偏移量和前进前沿;并将CHANGES子句设置为流类型。可以将流状态放入到DmlTargetCollector中。
(b)在验证期间,在变更视图中只能允许受支持的操作。
(c)在解析树优化期间,可以防止优化进行与变更视图不兼容的重写。例如,包含常量子查询的过滤器可能不会被下推到变更视图中。此外,带有变更元数据列的列表达式不能从带有CHANGES子句的查询块中移出。变更视图可以通过SqlObjectRef中存在CHANGES子句来识别。
(d)在解析树转换期间,变更视图可以被转换为具有附加的QueryPlanNode,该QueryPlanNode指示其下的子树应该被重写为变更查询。可以创建新的类QueryPlanNodeChanges,其包含要解析的变更类型和前沿。变更类型可以是MIN_DELTA、APPEND_ONLY和INSERT_ONLY,还有一个额附加的内部类型NON_MIN_DELTA,其可以为同一行产生INSERT和DELETE。包含变更元数据系统函数的列表达式可以从查询块移动到计划节点,这会在其输出行向量中添加这些列。
(e)在计划优化期间,可以防止不兼容的重写破坏变更视图。
在与View Evolution/AT(Stream=>…)相关联的一些实施例中,当视图发生变更,或者在AT子句中使用流时,当前状态中的表集合可能与请求的表集合不匹配。在这些情况下,可以选择新表的表偏移量。为了解决该问题,每次流前进时,可以在前沿中存储事务时间戳。然后,新表可以使用早于该时间戳的最新版本。另外,对于创建为show_initial_rows=true的流,状态可以会被记住,并且初始行可以被包含在通过视图演变添加的新表中。
在与变更重写相关联的一些实施例中,连接视图管理器230被配置为执行变更重写,以通过计划树向下推QueryPlanNodeChanges节点,直到树中不再有变更节点。连接视图管理器230可以被配置为将请求变更的查询重写为计算变更的查询。该算法通过应用重写规则来继续,该重写规则模式匹配于变更节点下的计划,如图12所示。
图12示出了根据本公开的一些实施例的与联合所有查询相关的变更重写的图1200。参考图12,查询1202经由变更重写操作1211被转换成查询1210。节点1203表示两个子查询的连接,其中一个子查询由变更节点1204表示。变更节点1204与用于子查询1208的联合所有的节点(union all node)1206相关联。
在变更重写操作1211期间,变更节点1204下面的所有节点/操作可以被重写以产生变更。更具体地,转换后的查询1210包括上移的联合所有的节点1206,并且变更节点1204现在作为变更节点1212被复制到用于子查询1208的分支中。
在一些实施例中,连接视图管理器230可以配置有以下重写规则。
(a)表示法(notation)的快速概述:Δ表示变更节点。Δmin、Δapp、Δins和Δnon指定变更类型。σ+和σ-是选择插入和删除的运算符。T+和T–是修改过的扫描节点,它们产生的行可以在变更间隔期间被插入或删除。πμ是添加变更元数据列的投影。
(b)如果变更类型为MIN_DELTA,则产生全外连接(full outer join),以消除被插入和删除的行,并在下面具有NON_MIN_DELTA节点。其中ξ是表函数,其合并冗余增量并确定变更是否为更新。在一些情况下,当所有基表都只有插入时,可以优化这种合并。
(c)如果变更节点在扫描的正上方,则重写类似于流扩展。MetaPhysicalCache中的代码可以被重用以生成带有正确剪枝信息的扫描。当变更类型为NON_MIN_DELTA时,将产生在变更时间间隔期间可能已从基表中插入或删除的行的多重集合(multiset)。这可能包括相互抵消的行。例如,
当变更类型为APPEND_ONLY时,可以产生在变更时间间隔期间插入的行的多重集合。例如,
当变更类型为INSERT_ONLY时,可以产生在变更时间间隔期间已经从基表插入的行的多重集合。在一些方面,该模式适用于外部表。例如,
(d)如果变更节点位于选择上方,其中在列列表中没有子查询,那么运算符将被交换。例如,
(e)如果变更节点位于投影上方,其中在列列表中没有子查询,那么在添加变更元数据列之后,运算符将被交换:
(f)如果变更节点在联合所有之上,则变更节点分布在分支之间:
(g)如果变更节点在内部连接之上,将应用连接分配律(join distributivity)将其向下推移,如下表6所示。
表6
(h)否则,变更查询可能不会被重写并产生错误。将变更元数据列添加到计划节点列列表的逻辑,其在上文使用πμ运算符进行了精略描述,具体如下:
(h.1)变更节点在概念上包括将变更元数据列添加到其输出列列表的投影。
(h.2)它保存查询计划中在它上方的操作所需的变更元数据列的列表。首次创建时,这些是标准的用户可见的变更元数据列:ACTION、ISUPDATE和ROW_ID。
(h.3)每当通过运算符下推变更节点时,其变更元数据列将被添加到该运算符的列列表中,根据重写以不同的方式进行定义。MIN_DELTA重写通过在全外连接中使用行比较来定义ISUPDATE,并从变更节点的变更元数据列集合中移除它。连接重写通过合并连接的两个分支的ROW_ID来定义ROW_ID。组合函数可以是可交换的(例如,加法),以在连接-重排序优化中保持ID(preserve ID)。对于那些在计划中多次出现的表,为了处理与自身进行连接或联合的表,可以在行ID计算中插入盐值(salt)。
连接重写将ACTION定义为它们所代表的多重性的乘积:INSERT=1,DELETE=–1。在这方面,还有两个插入操作仍要执行,其中一个变为删除,两个删除变为插入。
表扫描可以根据物理变更跟踪列来定义可见的变更元数据列。其他运算符可以透明地传递ACTION和ROW_ID。
(i)在一些实施例中,可以为其他运算符实现重写规则,其可以适合于本文公开的结构。在一些实施例中,对于这样的用例,可以支持物化视图上的流。
在与合并冗余变更相关的方面,在现有流中,可以通过在行ID上使用全外连接以找到相互抵消的插入和删除操作,从而消除冗余变更。然而,当对于行ID有多于一个插入或多于一个删除时,这会计算出错误的增量。例如,考虑如果我们插入0,然后增加1会发生什么。对表的变更可以表示为:{+0,-0,+1}.该增量可以合并为{+1}。如果使用全外连接来配对插入和删除,结果是其中第一个元素被过滤掉,因为它没有变更。由于这种处理是不正确的,对于表上的流和逐行视图上的流,单行可以被认为没有一个以上的插入或一个以上的删除。但是对于连接上的流,这种类型的处理可能不再适用,并且可能会有所不同。
图13是示出根据本公开的一些实施例的数据库系统在执行用于处理视图上的流对象的方法1300时的操作的流程图。方法1300可以体现在由一个或更多个硬件部件(例如,一个或更多个处理器)执行的计算机可读指令中,使得方法1300的操作可以由基于网络的数据库系统102的部件(诸如计算服务管理器108的部件(例如,流管理器128)和/或执行平台110的部件(例如,其可以实现为图14的机器1400))来执行。相应地,方法1300在下面通过参考其示例来描述。然而,应当理解,方法1300可以被部署在各种其他硬件配置上,并且不旨在限于被部署在基于网络的数据库系统102内。
在操作1302处,在视图上检测第一流对象,其中视图可以包括与源表相关联的查询。例如,以及关于图10,流管理器128检测视图1005上的流对象1004。在操作1304处,基于视图的定义(例如,基于与视图1005相关联的投影-过滤-表扫描操作)确定查询的语法树。
在操作1306处,基于用语法树替换第一流对象来扩展视图,语法树包括源表上的第二流对象。例如,通过用视图1005的语法树替换流对象1004来执行视图扩展操作1003。视图1005的语法树包括源表T上的第二流对象(例如,1016)。
在操作1308处,基于计算源表上的变更来执行第二流对象的流扩展。例如,基于计算源表T上的变更(例如,基于应用连接操作1018)来执行流扩展操作1007。
图14示出了根据示例实施例的计算机系统形式的机器1400的图解表示,在该计算机系统形式的机器1400内可以执行指令集以使机器1400执行本文所讨论方法中的任何一种或更多种方法。具体地,图14以计算机系统的示例形式示出了机器1400的图解表示,用于使机器1400执行本文所讨论方法中的任何一种或更多种方法的指令1416(例如,软件、程序、应用、小程序、app、或其他可执行代码)可以在该计算机系统内执行。例如,指令1416可以使机器1400执行方法1300的任何一个或更多个操作(或本文讨论的任何其他技术,例如结合图4-图13)。作为另一示例,指令1416可以使机器1400实现本文讨论的功能的一个或更多个部分。以这种方式,指令1416可以将通用的、未编程的机器转换成特定的机器1400(例如,计算服务管理器108或执行平台110中的节点),该特定的机器1400被特别配置成以本文描述的方式执行所描述和示出的功能中的任何一个。在又一实施例中,指令1416可以配置计算服务管理器108和/或执行平台110中的节点,来以本文描述的方式执行所描述和示出的功能中的任何一个。
在替代实施例中,机器1400作为独立的设备操作或者可以耦合(例如,联网)到其它机器。在联网部署中,机器1400可以在服务器-客户端网络环境中以服务器机器或客户端机器的身份来操作,或者作为对等(或分布式)网络环境中的对等机器来操作。机器1400可以包括但不限于服务器计算机、客户端计算机、个人计算机(PC)、平板计算机、膝上型计算机、上网本(netbook)、智能电话、移动设备、网络路由器、网络交换机、网络桥接器(networkbridge)或能够顺序地或以其它方式执行指令1416的任何机器,指令1416指定要由机器1400采取的动作。此外,虽然仅示出了单个机器1400,但术语“机器”还应被理解为包括单独或联合地执行指令1416以执行本文所讨论方法中的任何一种或更多种方法的机器1400的集合。
机器1400包括处理器1410、存储器1430和输入/输出(I/O)部件1450,它们被配置成例如经由总线1402彼此通信。在一些示例实施例中,处理器1410(例如,中央处理单元(CPU)、精简指令集计算(RISC)处理器、复杂指令集计算(CISC)处理器、图形处理单元(GPU)、数字信号处理器(DSP)、专用集成电路(ASIC)、射频集成电路(RFIC)、另一处理器或其任何合适的组合)可以包括例如可以执行指令1416的处理器1412和处理器1414。术语“处理器”旨在包括多核处理器1410,多核处理器1410可以包括可以同时执行指令1416的两个或更多个独立处理器(有时称为“核”)。尽管图14示出了多个处理器1410,但是机器1400可以包括具有单核的单个处理器、具有多核的单个处理器(例如,多核处理器)、具有单核的多个处理器、具有多核的多个处理器或者它们的任意组合。
存储器1430可以包括主存储器1432、静态存储器1434和存储单元1436,它们都可以由处理器1410例如经由总线1402访问。主存储器1432、静态存储器1434和存储单元1436存储指令1416,指令1416体现本文描述的方法或功能中的任何一种或更多种。在由机器1400执行期间,指令1416也可以全部或部分地驻留在主存储器1432内、静态存储器1434内、存储单元1436的机器存储介质1438内、至少一个处理器1410内(例如,在处理器的高速缓冲存储器内)或其任何合适的组合内。
I/O部件1450包括用于接收输入、提供输出、产生输出、传输信息、交换信息、捕获测量值等的部件。包括在特定机器1400中的具体的I/O部件1450将取决于机器的类型。例如,诸如移动电话的便携式机器将有可能包括触摸输入设备或其他这样的输入机构,而无头服务器(headless server)机器将不太可能包括这样的触摸输入设备。将认识到的是,I/O部件1450可以包括图14中未示出的许多其他部件。I/O部件1450根据功能进行分组仅仅是为了简化下面的讨论,并且该分组决不是限制性的。在各种示例实施例中,I/O部件1450可以包括输出部件1452和输入部件1454。输出部件1452可以包括视觉部件(例如,诸如等离子体显示面板(PDP)、发光二极管(LED)显示器、液晶显示器(LCD)、投影仪或阴极射线管(CRT)的显示器)、声学部件(例如,扬声器)、其他信号发生器等。输入部件1454可以包括字母数字输入部件(例如,键盘、被配置成接收字母数字输入的触摸屏、光电键盘或其他字母数字输入部件)、基于指向的输入部件(例如,鼠标、触控板、轨迹球、操纵杆、运动传感器或另一指向仪器)、触觉输入部件(例如,物理按钮、提供触摸或触摸手势的位置和/或力的触摸屏或其他触觉输入部件)、音频输入部件(例如,麦克风)等。
可以使用多种技术来实现通信。I/O部件1450可以包括通信部件1464,通信部件1464可操作来分别经由耦合1482和耦合1472将机器1400耦合到网络1480或设备1470。例如,通信部件1464可以包括网络接口部件或与网络1480对接的另一合适的设备。在进一步的示例中,通信部件1464可以包括有线通信部件、无线通信部件、蜂窝通信部件和经由其他模态提供通信的其他通信部件。设备1470可以是另一台机器或多种外围设备中的任一种(例如,经由通用串行总线(USB)耦合的外围设备)。例如,如上所述,机器1400可以对应于计算服务管理器108或执行平台110中的任何一个,并且设备1470可以包括客户端设备114或本文描述为与基于网络的数据库系统102或云存储平台104通信的任何其他计算设备。
各种存储器(例如,1430、1432、1434和/或处理器1410的存储器和/或存储单元1436)可以存储指令1416和数据结构(例如,软件)的一个或更多个集合,这些指令1416和数据结构(例如,软件)体现本文所描述的方法或功能中的任何一种或更多种或被本文所描述的方法或功能中的任何一种或更多种利用。当由处理器1410执行时,这些指令1416使各种操作实现所公开的实施例。
如本文所使用的,术语“机器存储介质”、“设备存储介质”和“计算机存储介质”意思相同,并且可以在本公开中互换使用。这些术语指的是存储可执行指令和/或数据的单个或多个存储设备和/或介质(例如,集中式或分布式数据库和/或相关联的高速缓存和服务器)。相应地,这些术语应当被认为包括但不限于固态存储器以及光介质和磁介质,包括在处理器内部或外部的存储器。机器存储介质、计算机存储介质和/或设备存储介质的具体示例包括非易失性存储器,非易失性存储器包括例如:半导体存储器设备,诸如可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、现场可编程门阵列(FPGA)和闪存设备;磁盘,例如内部硬盘和可移除磁盘;磁光盘;以及CD-ROM和DVD-ROM光盘。术语“机器存储介质”、“计算机存储介质”和“设备存储介质”具体排除了载波、经调制的数据信号和其他这样的介质(其中的至少一些包含在下面讨论的术语“信号介质”中)。
在各种示例实施例中,网络1480的一个或更多个部分可以是自组织网络(ad hocnetwork)、内联网、外联网、虚拟专用网络(VPN)、局域网(LAN)、无线LAN(WLAN)、广域网(WAN)、无线WAN(WWAN)、城域网(MAN)、互联网、互联网的一部分、公共交换电话网络(PSTN)的一部分、普通老式电话服务(POTS)网络、蜂窝电话网络、无线网络、网络、另一种类型的网络、或两种或更多种这样的网络的组合。例如,网络1480或网络1480的一部分可以包括无线或蜂窝网络,并且耦合1482可以是码分多址(CDMA)连接、全球移动通信系统(GSM)连接或另一种类型的蜂窝或无线耦合。在该示例中,耦合1482可以实现多种类型的数据传输技术中的任何一种,例如单载波无线电传输技术(1xRTT)、演进数据优化(Evolution-Data Optimized,EVDO)技术、通用分组无线电服务(GPRS)技术、增强型数据速率GSM演进(EDGE)技术、包括3G、第四代无线(4G)网络、通用移动电信系统(UMTS)、高速分组接入(HSPA)、全球微波接入互操作性(WiMAX)、长期演进(LTE)标准的第三代合作伙伴计划(3GPP)、由各种标准设置组织定义的其他技术、其他长程协议、或其他数据传输技术。
指令1416可以使用传输介质经由网络接口设备(例如,包括在通信部件1464中的网络接口部件)并利用若干众所周知的传输协议(例如,超文本传输协议(HTTP))中的任何一种在网络1480上被传输或接收。类似地,指令1416可以使用传输介质经由耦合1472(例如,对等耦合)被传输或接收到设备1470。术语“传输介质”和“信号介质”意思相同,并且在本公开中可以互换使用。术语“传输介质”和“信号介质”应被理解为包括能够存储、编码或携带用于由机器1400执行的指令1416的任何无形介质,并且包括数字或模拟通信信号或便于这样的软件的通信的其他无形介质。因此,术语“传输介质”和“信号介质”应被理解为包括任何形式的经调制的数据信号、载波等。术语“经调制的数据信号”意指这样的信号:其具有以对信号中的信息进行编码的这样的方式设置或变更的其特性中的一个或更多个特性。
术语“机器可读介质”、“计算机可读介质”和“设备可读介质”意思相同,并且在本公开中可以互换使用。这些术语被定义为包括机器存储介质和传输介质二者。因此,这些术语包括存储设备/介质和载波/经调制的数据信号二者。
本文描述的示例方法的各种操作可以至少部分地由被临时配置(例如,通过软件)或永久配置为执行相关操作的一个或更多个处理器来执行。类似地,本文描述的方法可以至少部分地是处理器实现的。例如,方法1300的至少一些操作可以由一个或更多个处理器执行。某些操作的执行可以在一个或更多个处理器之间分配,该一个或更多个处理器不仅驻留在单个机器内,而且跨若干机器部署。在一些示例实施例中,一个或更多个处理器可以位于单个位置(例如,在家庭环境、办公室环境或服务器场内)中,而在其他实施例中,处理器可以分布在若干位置上。
所述主题的实施方式可包括一个或更多个单独或组合的特征,如下文通过示例所示。
示例1是一种系统,包括:至少一个硬件处理器;以及存储指令的至少一个存储器,这些指令使得至少一个硬件处理器执行包括以下项的操作:检测视图上的第一流对象,该视图包括与源表相关联的查询;基于视图的定义确定查询的语法树;基于用语法树替换第一流对象来扩展视图,该语法树包括源表上的第二流对象;以及基于计算源表上的变更来执行第二流对象的流扩展。
在示例2中,示例1的主题包括一主题,其中在执行流扩展期间,指令还使至少一个硬件处理器执行包括以下项的操作:将源表上的第二流对象转换成第二查询;以及执行第二查询以计算源表上的变更。
在示例3中,示例2的主题包括一主题,其中在执行第二查询期间,指令还使至少一个硬件处理器执行包括以下项的操作:确定源表中添加的和删除的微分区。
在示例4中,示例3的主题包括一主题,其中在执行第二查询期间,指令还使至少一个硬件处理器执行包括以下项的操作:连接来自添加的和删除的微分区的行,以计算源表中的变更。
在示例5中,示例1-4的主题包括一主题,其中查询与多个源表相关联,该多个源表包括源表和至少一个第二源表。
在示例6中,示例5的主题包括一主题,其中指令还使至少一个硬件处理器执行包括以下项的操作:基于用语法树替换视图上的第一流对象来扩展视图,语法树包括源表上的第二流对象和至少一个第二源表上的至少一个第三流对象。
在示例7中,示例6的主题包括一主题,其中指令还使至少一个硬件处理器执行包括以下项的操作:将源表上的第二流对象转换成第二查询;以及将至少一个第二源表上的第三流对象转换成第三查询。
在示例8中,示例7的主题包括一主题,其中指令还使至少一个硬件处理器执行包括以下项的操作:基于执行第二查询以计算源表上的变更来执行第二流对象的流扩展;以及基于执行第三查询以计算至少一个第二源表上的变更来执行第三流对象的流扩展。
在示例9中,示例8的主题包括一主题,其中语法树包括第二流对象和至少一个第三流对象之间的连接操作,并且其中,指令还使至少一个硬件处理器执行包括以下项的操作:用与第二流对象的流扩展和第三流对象的流扩展相关联的两个连接操作的联合来替换与视图的扩展相关联的连接操作。
在示例10中,示例8-9的主题包括一主题,其中第二查询或第三查询包括请求变更操作的变更节点,并且指令还使至少一个硬件处理器执行包括以下项的操作:在第二流对象的流扩展或第三流对象的流扩展期间:重写第二查询或第三查询以计算与变更操作相关联的变更。
示例11是一种方法,包括:检测视图上的第一流对象,该视图包括与源表相关联的查询;基于视图的定义确定查询的语法树;基于用该语法树替换第一流对象来扩展视图,语法树包括源表上的第二流对象;以及基于计算源表上的变更来执行第二流对象的流扩展。
在示例12中,示例11的主题包括一主题,其中执行流扩展还包括:将源表上的第二流对象转换成第二查询;以及执行第二查询以计算源表上的变更。
在示例13中,示例12的主题包括一主题,其中执行第二查询还包括:确定源表中添加的和删除的微分区。
在示例14中,示例13的主题包括一主题,其中执行第二查询还包括:连接来自添加的和删除的微分区的行以计算源表中的变更。
在示例15中,示例11-14的主题包括一主题,其中查询与多个源表相关联,多个源表包括源表和至少一个第二源表。
在示例16中,示例15的主题包括,基于用语法树替换视图上的第一流对象来扩展视图,语法树包括源表上的第二流对象,以及至少一个第二源表上的至少一个第三流对象。
在示例17中,示例16的主题包括,将源表上的第二流对象转换成第二查询;以及将至少一个第二源表上的第三流对象转换成第三查询。
在示例18中,示例17的主题包括,基于执行第二查询以计算源表上的变更来执行第二流对象的流扩展;以及基于执行第三查询以计算至少一个第二源表上的变更来执行第三流对象的流扩展。
在示例19中,示例18的主题包括一主题,其中语法树包括第二流对象和至少一个第三流对象之间的连接操作,并且其中,该方法还包括:用与第二流对象的流扩展和第三流对象的流扩展相关联的两个连接操作的联合来替换与视图的扩展相关联的连接操作。
在示例20中,示例18-19的主题包括一主题,其中第二查询或第三查询包括请求变更操作的变更节点,并且其中,该方法还包括:在第二流对象的流扩展或第三流对象的流扩展期间:重写第二查询或第三查询以计算与变更操作相关联的变更。
示例21是一种计算机存储介质,其包括指令,当这些指令由机器的一个或更多个处理器执行时,将机器配置为执行包括以下项的操作:检测视图上的第一流对象,该视图包括与源表相关联的查询;基于视图的定义确定该查询的语法树;基于用该语法树替换第一流对象来扩展视图,该语法树包括源表上的第二流对象;以及基于计算源表上的变更来执行第二流对象的流扩展。
在示例22中,示例21的主题包括一主题,其中用于执行流扩展的操作还包括:将源表上的第二流对象转换成第二查询;以及执行第二个查询以计算源表上的变更。
在示例23中,示例22的主题包括一主题,其中用于执行第二查询的操作还包括:确定源表中添加的和删除的微分区。
在示例24中,示例23的主题包括一主题,其中用于执行第二查询的操作还包括:连接来自添加的和删除的微分区的行以计算源表中的变更。
在示例25中,示例21-24的主题包括一主题,其中查询与多个源表相关联,该多个源表包括源表和至少一个第二源表。
在示例26中,示例25的主题包括操作,这些操作还包括:基于用语法树替换视图上的第一流对象来扩展视图,语法树包括源表上的第二流对象,以及至少一个第二源表上的至少一个第三流对象。
在示例27中,示例26的主题包括操作,这些操作还包括:将源表上的第二流对象转换成第二查询;以及将至少一个第二源表上的第三流对象转换成第三查询。
在示例28中,示例27的主题包括操作,这些操作还包括:基于执行第二查询以计算源表上的变更来执行第二流对象的流扩展;以及基于执行第三查询以计算至少一个第二源表上的变更来执行第三流对象的流扩展。
在示例29中,示例28的主题包括一主题,其中语法树包括第二流对象和至少一个第三流对象之间的连接操作,并且其中所述操作还包括:用与第二流对象的流扩展和第三流对象的流扩展相关联的两个连接操作的联合来替换与视图的扩展相关联的连接操作。
在示例30中,示例28-29的主题包括一主题,其中第二查询或第三查询包括请求变更操作的变更节点,并且其中该操作还包括:在第二流对象的流扩展或第三流对象的流扩展期间:重写第二查询或第三查询以计算与变更操作相关联的变更。
示例31是包括指令的至少一种机器可读介质,当由处理电路执行时,该指令使得处理电路执行操作以实现示例1-示例30中的任一项。
示例32是包括用于实现示例1-示例30中任一项的装置的设备。
示例33是用于实现示例1-示例30中任一项的系统。
示例34是用于实现示例1-示例30中任一项的方法。
尽管关于具体的示例实施例描述了本公开的实施例,但显然地,在不偏离本发明主题的更广泛范围的情况下,可以对这些实施例做出各种修改和变更。因此,说明书和附图被认为是说明性的而不是限制性的。形成本申请的一部分的附图通过说明而非限制的方式示出了其中可以实施主题的具体实施例。所示出的实施例以充分的细节被描述,以使本领域的技术人员能够实施本文公开的教导。可以使用其他实施例和从其中衍生的实施例,使得可以做出结构和逻辑的替换和改变而不偏离本公开的范围。因此,此详细描述不应被理解为限制性意义,并且各种实施例的范围仅由所附权利要求连同这些权利要求所享有的完整范围的等同物一起限定。
本发明主题的这样的实施例可以在本文中单独地和/或共同地由术语“发明”提到,这仅仅是为了便利,并不意图自愿将本申请的范围局限于任何单一发明或发明构思(如果公开了多于一种发明或发明构思的话)。因此,虽然本文中已经说明和描述了特定实施例,但是应当理解,可以用经计算以实现相同目的的任何布置来替换所示出的特定实施例。本公开旨在覆盖各种实施例的任何修改或变型。在阅读以上描述后,本领域的技术人员将明白以上实施例的组合以及本文未具体描述的其他实施例。
在本文档中,术语“一个(a)”或“一个(an)”,如专利文档中常见的那样,用于包括一个或多于一个,与“至少一个”或“一个或更多个”的任何其他实例或用法无关。在本文档中,术语“或”用于指非排他性的或,因此除非另有说明,否则“A或B”包括“A但不包括B”、“B但不包括A”和“A和B”。在所附权利要求中,术语“包括(including)”和“其中(in which)”被用作相应术语“包括(comprising)”和“其中(wherein)”的纯英语等效词。此外,在所附权利要求中,术语“包括(including)”和“包括(comprising)”是开放式的;也就是说,包括除了权利要求中在这样的术语之后列出的那些元素之外的元素的系统、设备、物品或过程仍然被认为落入该权利要求的范围内。
Claims (30)
1.一种系统,包括:
至少一个硬件处理器;和
至少一个存储器,所述至少一个存储器存储指令,所述指令使所述至少一个硬件处理器执行包括以下项的操作:
检测视图上的第一流对象,所述视图包括与源表相关联的查询;
基于所述视图的定义确定所述查询的语法树;
基于用所述语法树替换所述第一流对象来扩展所述视图,所述语法树包括所述源表上的第二流对象;和
基于计算所述源表上的变更来执行所述第二流对象的流扩展。
2.根据权利要求1所述的系统,其中,在执行所述流扩展期间,所述指令还使所述至少一个硬件处理器执行包括以下项的操作:
将所述源表上的所述第二流对象转换成第二查询;和
执行所述第二查询以计算所述源表上的变更。
3.根据权利要求2所述的系统,其中,在执行所述第二查询期间,所述指令还使所述至少一个硬件处理器执行包括以下项的操作:
确定所述源表中添加的和删除的微分区。
4.根据权利要求3所述的系统,其中,在执行所述第二查询期间,所述指令还使所述至少一个硬件处理器执行包括以下项的操作:
连接来自所述添加的和删除的微分区的行,以计算所述源表中的变更。
5.根据权利要求1所述的系统,其中,所述查询与多个源表相关联,所述多个源表包括所述源表和至少一个第二源表。
6.根据权利要求5所述的系统,其中,所述指令还使所述至少一个硬件处理器执行包括以下项的操作:
基于用所述语法树替换所述视图上的所述第一流对象来扩展所述视图,所述语法树包括所述源表上的所述第二流对象和所述至少一个第二源表上的至少一个第三流对象。
7.根据权利要求6所述的系统,其中,所述指令还使所述至少一个硬件处理器执行包括以下项的操作:
将所述源表上的所述第二流对象转换成第二查询;和
将所述至少一个第二源表上的所述第三流对象转换成第三查询。
8.根据权利要求7所述的系统,其中,所述指令还使所述至少一个硬件处理器执行包括以下项的操作:
基于执行所述第二查询以计算所述源表上的变更来执行所述第二流对象的流扩展;和
基于执行所述第三查询以计算所述至少一个第二源表上的变更来执行所述第三流对象的流扩展。
9.根据权利要求8所述的系统,其中,所述语法树包括所述第二流对象和所述至少一个第三流对象之间的连接操作,并且其中,所述指令还使所述至少一个硬件处理器执行包括以下项的操作:
用与所述第二流对象的流扩展和所述第三流对象的流扩展相关联的两个连接操作的联合来替换与所述视图的扩展相关联的连接操作。
10.根据权利要求8所述的系统,其中,所述第二查询或所述第三查询包括请求变更操作的变更节点,并且所述指令还使所述至少一个硬件处理器执行包括以下项的操作:
在所述第二流对象的流扩展或所述第三流对象的流扩展期间:
重写所述第二查询或所述第三查询以计算与所述变更操作相关联的变更。
11.一种方法,包括:
检测视图上的第一流对象,所述视图包括与源表相关联的查询;
基于所述视图的定义确定所述查询的语法树;
基于用所述语法树替换所述第一流对象来扩展所述视图,所述语法树包括所述源表上的第二流对象;和
基于计算所述源表上的变更来执行所述第二流对象的流扩展。
12.根据权利要求11所述的方法,其中,执行所述流扩展还包括:
将所述源表上的所述第二流对象转换成第二查询;和
执行所述第二查询以计算所述源表上的变更。
13.根据权利要求12所述的方法,其中,执行所述第二查询还包括:
确定所述源表中添加的和删除的微分区。
14.根据权利要求13所述的方法,其中,执行所述第二查询还包括:
连接来自所述添加的和删除的微分区的行,以计算所述源表中的变更。
15.根据权利要求11所述的方法,其中,所述查询与多个源表相关联,所述多个源表包括所述源表和至少一个第二源表。
16.根据权利要求15所述的方法,还包括:
基于用所述语法树替换所述视图上的所述第一流对象来扩展所述视图,所述语法树包括所述源表上的所述第二流对象和所述至少一个第二源表上的至少一个第三流对象。
17.根据权利要求16所述的方法,还包括:
将所述源表上的所述第二流对象转换成第二查询;和
将所述至少一个第二源表上的所述第三流对象转换成第三查询。
18.根据权利要求17所述的方法,还包括:
基于执行所述第二查询以计算所述源表上的变更来执行所述第二流对象的流扩展;和
基于执行所述第三查询以计算所述至少一个第二源表上的变更来执行所述第三流对象的流扩展。
19.根据权利要求18所述的方法,其中,所述语法树包括所述第二流对象和所述至少一个第三流对象之间的连接操作,并且其中,所述方法还包括:
用与所述第二流对象的流扩展和所述第三流对象的流扩展相关联的两个连接操作的联合来替换与所述视图的扩展相关联的连接操作。
20.根据权利要求18所述的方法,其中,所述第二查询或所述第三查询包括请求变更操作的变更节点,并且其中,所述方法还包括:
在所述第二流对象的流扩展或所述第三流对象的流扩展期间:
重写所述第二查询或所述第三查询以计算与所述变更操作相关联的变更。
21.一种计算机存储介质,其包括指令,所述指令在由机器的一个或更多个处理器执行时将所述机器配置成执行操作,所述操作包括:
检测视图上的第一流对象,所述视图包括与源表相关联的查询;
基于所述视图的定义确定所述查询的语法树;
基于用所述语法树替换所述第一流对象来扩展所述视图,所述语法树包括所述源表上的第二流对象;和
基于计算所述源表上的变更来执行所述第二流对象的流扩展。
22.根据权利要求21所述的计算机存储介质,其中,用于执行所述流扩展的操作还包括:
将所述源表上的所述第二流对象转换成第二查询;和
执行所述第二查询以计算所述源表上的变更。
23.根据权利要求22所述的计算机存储介质,其中,用于执行所述第二查询的操作还包括:
确定所述源表中添加的和删除的微分区。
24.根据权利要求23所述的计算机存储介质,其中,用于执行所述第二查询的操作还包括:
连接来自所述添加的和删除的微分区的行,以计算所述源表中的变更。
25.根据权利要求21所述的计算机存储介质,其中,所述查询与多个源表相关联,所述多个源表包括所述源表和至少一个第二源表。
26.根据权利要求25所述的计算机存储介质,所述操作还包括:
基于用所述语法树替换所述视图上的所述第一流对象来扩展所述视图,所述语法树包括所述源表上的所述第二流对象和所述至少一个第二源表上的至少一个第三流对象。
27.根据权利要求26所述的计算机存储介质,所述操作还包括:
将所述源表上的所述第二流对象转换成第二查询;和
将所述至少一个第二源表上的所述第三流对象转换成第三查询。
28.根据权利要求27所述的计算机存储介质,所述操作还包括:
基于执行所述第二查询以计算所述源表上的变更来执行所述第二流对象的流扩展;和
基于执行所述第三查询以计算所述至少一个第二源表上的变更来执行所述第三流对象的流扩展。
29.根据权利要求28所述的计算机存储介质,其中,所述语法树包括所述第二流对象和所述至少一个第三流对象之间的连接操作,并且其中,所述操作还包括:
用与所述第二流对象的流扩展和所述第三流对象的流扩展相关联的两个连接操作的联合来替换与所述视图的扩展相关联的连接操作。
30.根据权利要求28所述的计算机存储介质,其中,所述第二查询或所述第三查询包括请求变更操作的变更节点,并且其中,所述操作还包括:
在所述第二流对象的流扩展或所述第三流对象的流扩展期间:
重写所述第二查询或所述第三查询以计算与所述变更操作相关联的变更。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17/460,974 US11301451B1 (en) | 2021-08-30 | 2021-08-30 | Database object type for querying and transactional consumption of changes in queries results |
US17/460,974 | 2021-08-30 | ||
PCT/US2022/075440 WO2023034714A1 (en) | 2021-08-30 | 2022-08-25 | Querying and transactional consumption of result changes |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117999551A true CN117999551A (zh) | 2024-05-07 |
Family
ID=81123893
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202280059399.3A Pending CN117999551A (zh) | 2021-08-30 | 2022-08-25 | 对结果变更的查询和事务性消费 |
Country Status (3)
Country | Link |
---|---|
US (4) | US11301451B1 (zh) |
CN (1) | CN117999551A (zh) |
WO (1) | WO2023034714A1 (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11301451B1 (en) | 2021-08-30 | 2022-04-12 | Snowflake Inc. | Database object type for querying and transactional consumption of changes in queries results |
Family Cites Families (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030164856A1 (en) * | 1996-06-28 | 2003-09-04 | Randy Prager | Desktop, stream-based, information management system |
US20040139396A1 (en) * | 1996-06-28 | 2004-07-15 | Gelernter David H. | Stream-based information management system |
US7574652B2 (en) * | 2002-06-20 | 2009-08-11 | Canon Kabushiki Kaisha | Methods for interactively defining transforms and for generating queries by manipulating existing query data |
US7644361B2 (en) * | 2002-12-23 | 2010-01-05 | Canon Kabushiki Kaisha | Method of using recommendations to visually create new views of data across heterogeneous sources |
AU2002953555A0 (en) * | 2002-12-23 | 2003-01-16 | Canon Kabushiki Kaisha | Method for presenting hierarchical data |
US7865481B2 (en) * | 2006-06-29 | 2011-01-04 | International Business Machines Corporation | Changing documents to include changes made to schemas |
US8396852B2 (en) * | 2010-09-20 | 2013-03-12 | International Business Machines Corporation | Evaluating execution plan changes after a wakeup threshold time |
US9361308B2 (en) * | 2012-09-28 | 2016-06-07 | Oracle International Corporation | State initialization algorithm for continuous queries over archived relations |
US20140258832A1 (en) * | 2013-03-11 | 2014-09-11 | Dartmouth Journal Services, Inc. | Computer Implemented System and Method for Author Editing of XML Documents With Structured Element Protection |
US10679428B1 (en) * | 2017-05-26 | 2020-06-09 | Snap Inc. | Neural network-based image stream modification |
US11182125B2 (en) * | 2017-09-07 | 2021-11-23 | Ocient Inc. | Computing device sort function |
US11243960B2 (en) * | 2018-03-20 | 2022-02-08 | Data.World, Inc. | Content addressable caching and federation in linked data projects in a data-driven collaborative dataset platform using disparate database architectures |
US11615102B2 (en) * | 2019-10-18 | 2023-03-28 | Splunk Inc. | Swappable online machine learning algorithms implemented in a data intake and query system |
US11334594B2 (en) * | 2019-10-19 | 2022-05-17 | Microsoft Technology Licensing, Llc | Data model transformation |
US11829606B2 (en) * | 2020-06-12 | 2023-11-28 | Rubrik, Inc. | Cloud object storage and versioning system |
US11301451B1 (en) | 2021-08-30 | 2022-04-12 | Snowflake Inc. | Database object type for querying and transactional consumption of changes in queries results |
-
2021
- 2021-08-30 US US17/460,974 patent/US11301451B1/en active Active
-
2022
- 2022-02-10 US US17/650,604 patent/US11514023B1/en active Active
- 2022-08-25 WO PCT/US2022/075440 patent/WO2023034714A1/en active Application Filing
- 2022-08-25 CN CN202280059399.3A patent/CN117999551A/zh active Pending
- 2022-10-24 US US18/048,912 patent/US11860850B2/en active Active
-
2023
- 2023-08-31 US US18/459,256 patent/US20230418807A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
US20230418807A1 (en) | 2023-12-28 |
US20230092367A1 (en) | 2023-03-23 |
US11301451B1 (en) | 2022-04-12 |
WO2023034714A1 (en) | 2023-03-09 |
US11514023B1 (en) | 2022-11-29 |
US11860850B2 (en) | 2024-01-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110023923B (zh) | 生成数据变换工作流 | |
US10769148B1 (en) | Relocating data sharing operations for query processing | |
US20220253433A1 (en) | Maintaining data stream history for generating materialized views | |
US10885032B2 (en) | Query execution pipelining with shared states for query operators | |
US10474658B2 (en) | User-defined loading of data onto a database | |
US10733184B2 (en) | Query planning and execution with source and sink operators | |
US11514022B2 (en) | Streams on shared database objects | |
US11132366B2 (en) | Transforming directed acyclic graph shaped sub plans to enable late materialization | |
US20230252039A1 (en) | Configuring an event table using computing node processes | |
US20230409589A1 (en) | Processing functionality to store sparse feature sets | |
US20230418807A1 (en) | Query processing of stream objects using stream expansion | |
US11461327B1 (en) | Query plan caching for networked database systems | |
US11372882B1 (en) | Reverse extract, transform, load (ETL) tool | |
US10860579B2 (en) | Query planning and execution with reusable memory stack | |
US20230401199A1 (en) | Query execution using materialized tables | |
US11762855B1 (en) | Incremental maintenance of query results | |
US11726976B1 (en) | Database encoding and decoding for database functions | |
US20230350911A1 (en) | Task configuration using a dynamic data processing statement | |
US11907212B1 (en) | Trace events in a database system | |
US11921716B1 (en) | Inexact timestamp range matching join for time series data (AS OF JOIN) | |
US11909743B1 (en) | Organization-level account on data platform | |
US11921898B2 (en) | Identity resolution and data enrichment framework | |
Akhtar et al. | Tools & Tuning |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication |