CN116917882A - 用于访问由数据处理系统管理的数据实体的系统和方法 - Google Patents
用于访问由数据处理系统管理的数据实体的系统和方法 Download PDFInfo
- Publication number
- CN116917882A CN116917882A CN202280012563.5A CN202280012563A CN116917882A CN 116917882 A CN116917882 A CN 116917882A CN 202280012563 A CN202280012563 A CN 202280012563A CN 116917882 A CN116917882 A CN 116917882A
- Authority
- CN
- China
- Prior art keywords
- query
- data
- executable
- attribute
- queries
- 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
- 238000012545 processing Methods 0.000 title claims abstract description 354
- 238000000034 method Methods 0.000 title claims abstract description 245
- 238000003860 storage Methods 0.000 claims description 87
- 230000003068 static effect Effects 0.000 claims description 49
- 230000004044 response Effects 0.000 claims description 31
- 230000006870 function Effects 0.000 claims description 12
- 230000002708 enhancing effect Effects 0.000 claims description 11
- 230000002776 aggregation Effects 0.000 claims description 10
- 238000004220 aggregation Methods 0.000 claims description 10
- 230000008569 process Effects 0.000 description 75
- 238000005516 engineering process Methods 0.000 description 64
- 238000010586 diagram Methods 0.000 description 47
- 230000009466 transformation Effects 0.000 description 32
- 230000002688 persistence Effects 0.000 description 31
- 230000000875 corresponding effect Effects 0.000 description 30
- 230000009471 action Effects 0.000 description 21
- 238000007726 management method Methods 0.000 description 15
- 238000004590 computer program Methods 0.000 description 14
- 230000014509 gene expression Effects 0.000 description 13
- 238000000844 transformation Methods 0.000 description 11
- 230000008859 change Effects 0.000 description 10
- 230000007246 mechanism Effects 0.000 description 8
- 230000008901 benefit Effects 0.000 description 6
- 238000004891 communication Methods 0.000 description 6
- 230000003287 optical effect Effects 0.000 description 6
- 230000035945 sensitivity Effects 0.000 description 6
- 239000008186 active pharmaceutical agent Substances 0.000 description 5
- 238000013459 approach Methods 0.000 description 5
- 239000007787 solid Substances 0.000 description 5
- 238000012800 visualization Methods 0.000 description 5
- 230000002093 peripheral effect Effects 0.000 description 4
- 230000015572 biosynthetic process Effects 0.000 description 3
- 150000001875 compounds Chemical class 0.000 description 3
- 238000013461 design Methods 0.000 description 3
- 230000005055 memory storage Effects 0.000 description 3
- 230000006855 networking Effects 0.000 description 3
- 238000005457 optimization Methods 0.000 description 3
- 238000003786 synthesis reaction Methods 0.000 description 3
- 230000001131 transforming effect Effects 0.000 description 3
- 230000004075 alteration Effects 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 2
- 238000007796 conventional method Methods 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 235000017399 Caesalpinia tinctoria Nutrition 0.000 description 1
- 241000699670 Mus sp. Species 0.000 description 1
- 241000388430 Tara Species 0.000 description 1
- 230000001133 acceleration Effects 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 238000013070 change management Methods 0.000 description 1
- 230000002596 correlated effect 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
- 230000000694 effects Effects 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 238000013442 quality metrics Methods 0.000 description 1
- 230000002123 temporal effect Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000007723 transport mechanism Effects 0.000 description 1
- 238000012384 transportation and delivery Methods 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/24—Querying
- G06F16/242—Query formulation
- G06F16/2425—Iterative querying; Query formulation based on the results of a preceding query
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/25—Integrating or interfacing systems involving database management systems
- G06F16/252—Integrating or interfacing systems involving database management systems between a Database Management System and a front-end application
-
- 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/248—Presentation of query results
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Communication Control (AREA)
Abstract
用于获得关于由数据处理系统使用至少一个数据存储管理的数据实体实例的信息的技术。这些技术包括:获得查询,该查询包括:第一部分,该第一部分包括用于标识存储在至少一个数据存储中的第一数据实体的实例的信息;以及第二部分,该第二部分指示该第一数据实体的至少一个属性;从该查询生成多个可执行查询,该多个可执行查询包括第一组一个或多个可执行查询和第二组一个或多个可执行查询,该生成包括:使用该第一部分生成用于标识该第一数据实体的实例的该第一组可执行查询,并且使用该第二部分生成用于获得该第一数据实体的实例的属性值的该第二组可执行查询;以及执行该多个可执行查询以获得该查询的结果。
Description
相关申请的交叉引用
本申请根据35U.S.C.119(e)要求于2021年1月31日提交的名称为“SYSTEMS ANDMETHODS FOR ACCESSING DATA ENTITIES MANAGED BY ADATA PROCESSING SYSTEM[用于访问由数据处理系统管理的数据实体的系统和方法]”的美国临时专利申请序列号63/143,895的优先权权益,该美国临时专利申请特此通过援引以其全文并入本文。
技术领域
本披露内容的各方面涉及用于管理对由数据处理系统使用数据实体和数据实体实例管理的数据的访问(例如,查询、创建、更新或删除)的技术。
背景技术
现代数据处理系统管理大量的数据(例如,数百万、数十亿或数万亿条数据记录)并管理可以如何访问这些数据。数据处理系统可以提供多个接口来访问其所管理的数据。例如,数据处理系统可以提供图形用户界面(GUI),用户可以通过该图形用户界面对由数据处理系统管理的数据执行动作(例如,查询、更新、删除、创建)。作为另一个示例,数据处理系统可以提供应用编程接口(API),软件程序可以通过该应用编程接口对由数据处理系统管理的数据执行动作。
发明内容
一些实施例提供了一种由数据处理系统执行的用于响应于查询以计算上高效的方式获得数据实体的第一实例的第一属性值的方法,该方法包括:通过该数据处理系统的应用编程接口(API)获得用于访问数据的查询,该查询包括:第一部分,该第一部分包括用于标识存储在至少一个数据存储中的该数据实体的至少第一实例的信息;以及第二部分,该第二部分指示要获得其值的数据实体的至少一个属性;生成多个可执行查询,该多个可执行查询包括第一组一个或多个可执行查询和第二组一个或多个可执行查询,该生成包括:使用该查询的第一部分生成该第一组可执行查询,该第一组可执行查询用于标识存储在该至少一个数据存储中的该数据实体的至少第一实例;使用该查询的第二部分生成该第二组可执行查询,该第二组可执行查询用于获得使用该第一组可执行查询标识的该数据实体的至少第一实例的属性值,这些属性值包括该第一属性值;通过执行该多个可执行查询来获得经由该API提供的该查询的结果,这些结果至少包括该数据实体的第一实例的第一属性值;以及输出至少包括该数据实体的第一实例的第一属性值的这些结果中的至少一些结果。
一些实施例提供了一种数据处理系统,该数据处理系统包括:至少一个计算机硬件处理器;以及至少一种非暂态计算机可读存储介质,该至少一种非暂态计算机可读存储介质存储处理器可执行指令,这些指令在由该至少一个计算机硬件处理器执行时使该至少一个计算机硬件处理器执行用于响应于查询获得数据实体的第一实例的第一属性值的方法,该方法包括:通过该数据处理系统的应用编程接口(API)获得用于访问数据的查询,该查询包括:第一部分,该第一部分包括用于标识存储在至少一个数据存储中的该数据实体的至少第一实例的信息;以及第二部分,该第二部分指示要获得其值的数据实体的至少一个属性;生成多个可执行查询,该多个可执行查询包括第一组一个或多个可执行查询和第二组一个或多个可执行查询,该生成包括:使用该查询的第一部分生成该第一组可执行查询,该第一组可执行查询用于标识存储在该至少一个数据存储中的该数据实体的至少第一实例;使用该查询的第二部分生成该第二组可执行查询,该第二组可执行查询用于获得使用该第一组可执行查询标识的该数据实体的至少第一实例的属性值,这些属性值包括该第一属性值;通过执行该多个可执行查询来获得经由该API提供的该查询的结果,这些结果至少包括该数据实体的第一实例的第一属性值;以及输出至少包括该数据实体的第一实例的第一属性值的这些结果中的至少一些结果。
一些实施例提供了至少一种非暂态计算机可读存储介质,该至少一种非暂态计算机可读存储介质存储处理器可执行指令,这些指令在由至少一个计算机硬件处理器执行时使该至少一个计算机硬件处理器执行用于响应于查询获得数据实体的第一实例的第一属性值的方法,该方法包括:通过该数据处理系统的应用编程接口(API)获得用于访问数据的查询,该查询包括:第一部分,该第一部分包括用于标识存储在至少一个数据存储中的该数据实体的至少第一实例的信息;以及第二部分,该第二部分指示要获得其值的数据实体的至少一个属性;生成多个可执行查询,该多个可执行查询包括第一组一个或多个可执行查询和第二组一个或多个可执行查询,该生成包括:使用该查询的第一部分生成该第一组可执行查询,该第一组可执行查询用于标识存储在该至少一个数据存储中的该数据实体的至少第一实例;使用该查询的第二部分生成该第二组可执行查询,该第二组可执行查询用于获得使用该第一组可执行查询标识的该数据实体的至少第一实例的属性值,这些属性值包括该第一属性值;通过执行该多个可执行查询来获得经由该API提供的该查询的结果,这些结果至少包括该数据实体的第一实例的第一属性值;以及输出至少包括该数据实体的第一实例的第一属性值的这些结果中的至少一些结果。
在一些实施例中,该第一组可执行查询和该第二组可执行查询包括可执行的结构化查询语言(SQL)查询。
在一些实施例中,该第一部分包括用于标识多个数据实体中的每个数据实体的一个或多个实例的信息,该多个数据实体包括该数据实体;其中,生成该第一组可执行查询包括针对该多个数据实体中的每个特定数据实体生成用于标识存储在该至少一个数据存储中的该数据实体的实例的相应可执行查询。
在一些实施例中,该至少一个属性包括该数据实体的多个属性,并且生成该第二组可执行查询包括针对该多个属性中的至少一些属性中的每个特定属性生成用于获得使用该第一组可执行查询标识的该数据实体的实例的该特定属性的值的相应可执行查询。
在一些实施例中,该多个属性包括多个动态属性,并且其中,生成该第二组可执行查询包括:将该多个动态属性分组为多组动态属性,这些组中的每一组具有该多个动态属性中的至少一个;以及针对该多组动态属性中的每一组生成针对该数据实体的实例获得该组中的属性值的相应可执行查询。
在一些实施例中,对该多个动态属性进行分组是基于这些动态属性的类型来执行的。在一些实施例中,对该多个动态属性进行分组是基于动态属性是否存储在该至少一个数据存储中的同一表中来执行的。在一些实施例中,对该多个动态属性进行分组是基于动态属性是否沿着公共继承路径继承其值来执行的。
在一些实施例中,执行该多个可执行查询包括:执行该第一组可执行查询以获得标识该数据实体的至少第一实例的信息;以及在执行该第一组可执行查询之后,使用标识该数据实体的至少第一实例的信息来执行该第二组可执行查询。
在一些实施例中,生成该第二组可执行查询是在执行该第一组可执行查询之后执行的。在一些实施例中,生成该第二组可执行查询是在执行该第一组可执行查询之前执行的。
在一些实施例中,该至少一个属性包括该数据实体的多组动态属性,该第二组可执行查询包括分别对应于该多组动态属性的多个可执行查询,并且执行该第二组可执行查询包括执行该多个可执行查询中的每一个以获得相应的多个动态属性值结果。
在一些实施例中,该方法进一步包括:在执行该第二组可执行查询之后,组合该多个动态值属性结果以获得该查询的结果。
在一些实施例中,该查询的第二部分包括内嵌视图,并且生成该第二组可执行查询包括使用该内嵌视图中指定的信息来生成可执行查询。在一些实施例中,该内嵌视图包括表格查询。在一些实施例中,该表格查询用于执行聚合函数。在一些实施例中,该内嵌视图指定内部和外部连接键。
在一些实施例中,其中,该数据实体的该至少一个属性包括至少一个静态属性和至少一个动态属性。
在一些实施例中,该数据实体的该至少一个属性包括第一动态属性,该第一动态属性被配置成从第二数据实体的属性继承其值。
在一些实施例中,该查询的第二部分指示包括该至少一个属性的属性层次。在一些实施例中,该查询的第二部分使用嵌套来指示该属性层次的至少一部分。
在一些实施例中,该查询的第二部分使用递归来指示该属性层次的至少一部分。
在一些实施例中,输出这些结果中的至少一些结果包括:以与该属性层次相对应的分层格式来格式化这些结果中的该至少一些结果;以及以该分层格式输出这些结果中的至少一些结果。
在一些实施例中,其中,输出这些结果中的至少一些结果包括以分层格式输出这些结果中的至少一些结果。在一些实施例中,输出这些结果中的至少一些结果包括以非表格格式输出这些结果。
在一些实施例中,该查询的第一部分通过一系列变换来变换,该一系列变换利用由该数据处理系统管理的信息来增强该第一部分中的信息,以生成被配置成针对该至少一个数据存储执行的该第一组可执行查询,并且该查询的第二部分通过一系列变换来变换,该一系列变换利用由该数据处理系统管理的信息来增强该第二部分中的信息,以生成被配置成针对该至少一个数据存储执行的该第二组可执行查询。
在一些实施例中,生成该第一组可执行查询包括至少部分地通过以下各项来生成第一可执行查询:使用该查询的第一部分生成中间查询表示;使用唯一标识符信息、动态属性参考信息、视图类型信息和/或权限信息来增强该中间查询表示,以获得增强的中间查询表示;以及使用该增强的中间查询表示生成该第一可执行查询。在一些实施例中,生成该第一可执行查询包括生成可执行SQL查询。在一些实施例中,生成该中间查询表示包括生成抽象语法树。
在一些实施例中,生成该第二组可执行查询包括至少部分地通过以下各项来生成第二可执行查询:使用该查询的第二部分生成中间查询表示;使用唯一标识符信息、动态属性参考信息、视图类型信息和/或权限信息来增强该中间查询表示,以获得增强的中间查询表示;以及使用该增强的中间查询表示生成该第二可执行查询。
在一些实施例中,执行该多个可执行查询包括执行该第一组可执行查询以获得标识多个数据实体实例的信息,并且其中,生成该第二组一个或多个可执行查询是使用该查询的第二部分和标识该多个数据实体实例的信息来执行的。
在一些实施例中,该至少一个属性包括多个属性,该多个属性中的每个属性被配置成从相同的其他数据实体实例的一个或多个属性继承其值,该方法进一步包括:由该数据处理系统将该多个属性分组为单个组;针对该单个组生成单个可执行查询;以及由该数据处理系统执行该单个可执行查询,以使该数据处理系统获得该多个属性的属性值。
在一些实施例中,该至少一个属性包括多个属性,该多个属性中的每个属性被配置成从另一个数据实体实例的一个或多个属性继承其值,该方法进一步包括:由该数据处理系统使用分组标准将该多个属性分组为一个或多个组;以及针对这些组中的每一组生成单独的可执行查询,所述单独的可执行查询在由该数据处理系统执行时使该数据处理系统获得相应组的属性的属性值。
在一些实施例中,该分组标准是将这些属性中共享公共继承路径的属性分组为单个组,以便使用这些单独的可执行查询中的单个可执行查询来访问这些分组的属性的继承值。
在一些实施例中,该至少一个数据存储被配置成存储多个数据实体实例和相关联的属性值以及定义不同数据实体实例之间的关系的信息,其中,该至少一个数据存储被配置成使用该多个数据实体实例来存储描述存储在与该数据处理系统通信地连接的计算系统的分布式网络的分布式数据库中的数据的信息。
在一些实施例中,该至少一个数据存储被配置成针对由这些分布式计算系统的分布式数据库存储的多个数据集中的每一个、针对被配置成由这些分布式计算系统的某个系统部分执行的多个软件应用程序的每一个、或针对这些分布式计算系统的每一个或多个系统部分来存储该多个数据实体实例中的数据实体实例。
在一些实施例中,该查询是声明性查询。
一些实施例提供了一种用于使用查询来获得关于由数据处理系统使用至少一个数据存储管理的数据实体实例的信息的方法,该方法包括使用至少一个计算机硬件处理器来进行以下操作:获得查询,该查询包括:第一部分,该第一部分包括用于标识存储在该至少一个数据存储中的至少一个数据实体的实例的信息;以及第二部分,该第二部分指示该至少一个数据实体的至少一个属性;从该查询生成多个可执行查询,该多个可执行查询包括第一组一个或多个可执行查询和第二组一个或多个可执行查询,该生成包括:使用该查询的第一部分生成该第一组一个或多个可执行查询,该第一组一个或多个可执行查询用于标识存储在该至少一个数据存储中的该至少一个数据实体的实例;使用该查询的第二部分生成该第二组一个或多个可执行查询,该第二组一个或多个可执行查询用于获得使用该第一组可执行查询标识的该至少一个数据实体的实例的属性值;执行该多个可执行查询以获得该查询的结果;以及输出这些结果。
一些实施例提供了一种数据处理系统,该数据处理系统被配置成使用至少一个数据存储来管理多个数据实体实例,该数据处理系统包括:至少一个计算机硬件处理器;以及至少一种非暂态计算机可读存储介质,该至少一种非暂态计算机可读存储介质存储处理器可执行指令,这些指令在由该至少一个计算机硬件处理器执行时使该至少一个计算机硬件处理器执行包括以下各项的方法:获得查询,该查询包括:第一部分,该第一部分包括用于标识存储在该至少一个数据存储中的至少一个数据实体的实例的信息;以及第二部分,该第二部分指示该至少一个数据实体的至少一个属性;从该查询生成多个可执行查询,该多个可执行查询包括第一组一个或多个可执行查询和第二组一个或多个可执行查询,该生成包括:使用该查询的第一部分生成该第一组一个或多个可执行查询,该第一组一个或多个可执行查询用于标识存储在该至少一个数据存储中的该至少一个数据实体的实例;使用该查询的第二部分生成该第二组一个或多个可执行查询,该第二组一个或多个可执行查询用于获得使用该第一组可执行查询标识的该至少一个数据实体的实例的属性值;执行该多个可执行查询以获得该查询的结果;以及输出这些结果。
一些实施例提供了至少一种非暂态计算机可读存储介质,该至少一种非暂态计算机可读存储介质存储处理器可执行指令,这些指令在由至少一个计算机硬件处理器执行时使该至少一个计算机硬件处理器执行包括以下各项的方法:获得查询,该查询包括:第一部分,该第一部分包括用于标识存储在至少一个数据存储中的至少一个数据实体的实例的信息;以及第二部分,该第二部分指示该至少一个数据实体的至少一个属性;从该查询生成多个可执行查询,该多个可执行查询包括第一组一个或多个可执行查询和第二组一个或多个可执行查询,该生成包括:使用该查询的第一部分生成该第一组一个或多个可执行查询,该第一组一个或多个可执行查询用于标识存储在该至少一个数据存储中的该至少一个数据实体的实例;使用该查询的第二部分生成该第二组一个或多个可执行查询,该第二组一个或多个可执行查询用于获得使用该第一组可执行查询标识的该至少一个数据实体的实例的属性值;执行该多个可执行查询以获得该查询的结果;以及输出这些结果。
一些实施例提供了一种用于使用查询来获得关于由数据处理系统使用至少一个数据存储管理的数据实体实例的信息的方法,该方法包括使用至少一个计算机硬件处理器来进行以下操作:获得查询,该查询包括:第一部分,该第一部分包括用于标识存储在该至少一个数据存储中的至少一个数据实体的实例的信息;以及第二部分,该第二部分指示该至少一个数据实体的至少一个属性;使用该查询的第一部分生成第一组一个或多个可执行查询,该第一组一个或多个可执行查询用于标识存储在该至少一个数据存储中的该至少一个数据实体的实例;执行该第一组一个或多个可执行查询以获得标识第一多个数据实体实例的信息;使用该查询的第二部分和标识第一多个数据实体实例的信息来生成用于获得该第一多个数据实体实例的属性值的第二组一个或多个可执行查询;以及执行该第二组一个或多个可执行查询以获得该第一多个数据实体实例的属性值。
一些实施例提供了一种方法,该方法包括:使用至少一个计算机硬件处理器进行以下操作:获得查询,该查询包括:第一部分,该第一部分包括用于标识存储在至少一个数据存储中的至少一个数据实体的实例的信息;以及第二部分,该第二部分指示包括该至少一个数据实体的至少一个属性的属性层次;从该查询生成多个可执行查询,该多个可执行查询用于从至少一个数据存储中获得该至少一个数据实体的实例和该至少一个数据实体的实例的属性值;执行该多个可执行查询以获得该查询的结果;以及以与该属性层次相对应的分层格式输出这些结果。
一些实施例提供了一种数据处理系统,该数据处理系统包括:至少一个计算机硬件处理器;以及至少一种非暂态计算机可读存储介质,该至少一种非暂态计算机可读存储介质存储处理器可执行指令,这些指令在由该至少一个计算机硬件处理器执行时使该至少一个计算机硬件处理器执行包括以下各项的方法:获得查询,该查询包括:第一部分,该第一部分包括用于标识存储在至少一个数据存储中的至少一个数据实体的实例的信息;以及第二部分,该第二部分指示包括该至少一个数据实体的至少一个属性的属性层次;从该查询生成多个可执行查询,该多个可执行查询用于从至少一个数据存储中获得该至少一个数据实体的实例和该至少一个数据实体的实例的属性值;执行该多个可执行查询以获得该查询的结果;以及以与该属性层次相对应的分层格式输出这些结果。
一些实施例提供了至少一种非暂态计算机可读存储介质,该至少一种非暂态计算机可读存储介质存储处理器可执行指令,这些指令在由至少一个计算机硬件处理器执行时使该至少一个计算机硬件处理器执行包括以下各项的方法:获得查询,该查询包括:第一部分,该第一部分包括用于标识存储在至少一个数据存储中的至少一个数据实体的实例的信息;以及第二部分,该第二部分指示包括该至少一个数据实体的至少一个属性的属性层次;从该查询生成多个可执行查询,该多个可执行查询用于从至少一个数据存储中获得该至少一个数据实体的实例和该至少一个数据实体的实例的属性值;执行该多个可执行查询以获得该查询的结果;以及以与该属性层次相对应的分层格式输出这些结果。
一些实施例提供了一种方法,该方法包括使用至少一个计算机硬件处理器进行以下操作:获得查询,该查询包括:第一部分,该第一部分包括用于标识存储在至少一个数据存储中的至少一个数据实体的实例的信息;以及第二部分,该第二部分指示该至少一个数据实体的至少一个属性;从该查询生成多个可执行查询,该多个可执行查询用于从至少一个数据存储中获得该至少一个数据实体的实例和该至少一个数据实体的实例的属性值;执行该多个可执行查询以获得该查询的结果;以及输出这些结果。
一些实施例提供了一种数据处理系统,该数据处理系统包括:至少一个计算机硬件处理器;以及至少一种非暂态计算机可读存储介质,该至少一种非暂态计算机可读存储介质存储处理器可执行指令,这些指令在由该至少一个计算机硬件处理器执行时使该至少一个计算机硬件处理器执行包括以下各项的方法:获得查询,该查询包括:第一部分,该第一部分包括用于标识存储在至少一个数据存储中的至少一个数据实体的实例的信息;以及第二部分,该第二部分指示该至少一个数据实体的至少一个属性;从该查询生成多个可执行查询,该多个可执行查询用于从至少一个数据存储中获得该至少一个数据实体的实例和该至少一个数据实体的实例的属性值;执行该多个可执行查询以获得该查询的结果;以及输出这些结果。
一些实施例提供了至少一种非暂态计算机可读存储介质,该至少一种非暂态计算机可读存储介质存储处理器可执行指令,这些指令在由至少一个计算机硬件处理器执行时使该至少一个计算机硬件处理器执行包括以下各项的方法:获得查询,该查询包括:第一部分,该第一部分包括用于标识存储在至少一个数据存储中的至少一个数据实体的实例的信息;
以及第二部分,该第二部分指示该至少一个数据实体的至少一个属性;从该查询生成多个可执行查询,该多个可执行查询用于从至少一个数据存储中获得该至少一个数据实体的实例和该至少一个数据实体的实例的属性值;执行该多个可执行查询以获得该查询的结果;以及输出这些结果。
一些实施例提供了一种用于使用查询来获得关于由数据处理系统使用至少一个数据存储管理的数据实体实例的信息的方法,该方法包括使用至少一个计算机硬件处理器来进行以下操作:获得表格查询;从该表格查询生成一组一个或多个可执行查询,该一组一个或多个可执行查询用于使用一个或多个数据实体实例来访问存储在该至少一个数据存储中的数据,该生成包括:生成该表格查询的中间查询表示;使用唯一标识符信息、动态属性参考信息、视图类型信息和/或权限信息来增强该中间查询表示,以获得增强的中间查询表示;以及
使用该增强的中间查询表示生成该一组一个或多个可执行查询;执行该一组可执行查询以获得该表格查询的结果;以及输出这些结果中的至少一些结果。
前述内容为本发明的非限制性发明内容,其由所附权利要求限定。
附图说明
将参照以下附图描述各个方面和实施例。应当理解,附图不一定按比例绘制。出现在多个附图中的项在其出现的所有附图中由相同或相似的附图标记指示。
图1A示出了根据本文所描述的技术的一些实施例的数据处理系统可以在其中运行的示例环境。
图1B是进一步展示了根据本文所描述的技术的一些实施例的数据处理系统可以在其中运行的图1A的示例环境的图。
图1C是展示了根据本文所描述的技术的一些实施例的在一些应用中数据处理系统可以被配置成管理数百万或数十亿个数据实体实例的图。
图1D是展示了根据本文所描述的技术的一些实施例的示例数据处理系统105和与数据处理系统105集成的实体应用编程接口(API)120的各方面的框图。
图1E是根据本文所描述的技术的一些实施例的用于响应于用于获得关于一个或多个数据实体的实例的信息的声明性查询而生成查询结果的说明性过程101的图。
图1F示出了根据本文所描述的技术的一些实施例的通过图1E所示的说明性过程101处理声明性查询的说明性示例。
图2A示出了根据本文所描述的技术的一些实施例的具有一个或多个静态属性和/或一个或多个动态属性的数据实体的说明性图。
图2B和图2C示出了根据本文所描述的技术的一些实施例的“业务项(BizTerm)”数据实体的说明性图。
图2D是展示了根据本文所描述的技术的一些实施例的图2C所示的数据实体的至少一些属性的属性性质(包括其属性是静态还是动态)的表。
图2E是展示了根据本文所描述的技术的一些实施例的数据处理系统如何存储静态属性值和动态属性的各方面的图。
图2F是根据本文所描述的技术的一些实施例的示出数据实体实例及其属性值的可视化的说明性图形用户界面的截屏。
图2G是示出了根据本文所描述的技术的一些实施例的根据示例实体模型的数据实体之间的关系的图。
图3是根据本文所描述的技术的一些实施例的用于响应于用于获得关于一个或多个数据实体的实例的信息的声明性查询而生成查询结果的说明性过程300的流程图。
图4A是展示了根据本文所描述的技术的一些实施例的包括标识部分和丰富部分的示例声明性查询402的图。
图4B是展示了根据本文所描述的技术的一些实施例的通过处理图4A所示的声明性查询生成的示例结果的图。
图4C是根据本文所描述的技术的一些实施例的另一说明性声明性查询410的图。
图4D是根据本文所描述的技术的一些实施例的声明性查询420的图,该声明性查询指定了将响应于处理该声明性查询而返回其值的属性的层次。
图4E展示了根据本文所描述的技术的一些实施例的响应于处理图4D所示的声明性查询420而返回的示例结果。
图4F是根据本文所描述的技术的一些实施例的图4D所示的声明性查询420的变型的图,该变型被设计成减少在处理查询时所返回的相关数据实体实例结果的数量。
图5A是展示了根据本文所描述的技术的一些实施例的包括标识部分和丰富部分的示例声明性查询502的图。
图5B是展示了根据本文所描述的技术的一些实施例的可以由数据处理系统通过处理图5A所示的声明性查询502来生成的可执行SQL查询的图。
图5C是展示了根据本文所描述的技术的一些实施例的图5A所示的声明性查询502的标识部分、可以使用声明性查询502的标识部分生成的可执行SQL查询的示例、以及可以通过执行可执行SQL查询获得的结果的至少一部分的图示的图。
图5D是展示了根据本文所描述的技术的一些实施例的图5A所示的声明性查询502的丰富部分、可以使用声明性查询502的丰富部分生成的可执行SQL查询的示例、以及可以通过执行可执行SQL查询获得的结果的至少一部分的图示的图。
图5E是展示了根据本文所描述的技术的一些实施例的图5A所示的声明性查询502的丰富部分、可以使用声明性查询502的丰富部分生成的另一可执行SQL查询的示例、以及可以通过执行可执行SQL查询获得的结果的至少一部分的图示的图。
图5F是展示了根据本文所描述的技术的一些实施例的图5A所示的声明性查询502的丰富部分、可以使用声明性查询502的丰富部分生成的另一可执行SQL查询的示例、以及可以通过执行可执行SQL查询获得的结果的至少一部分的图示的图。
图5G是展示了根据本文所描述的技术的一些实施例的在SQL外部旋转SQL查询结果的图。
图6A是展示了根据本文所描述的技术的一些实施例的声明性查询的丰富部分以及针对在该丰富部分中标识的每个属性生成的相应可执行SQL查询的图。
图6B是展示了根据本文所描述的技术的一些实施例的可以针对具有相同类型的动态属性生成一组可执行SQL查询的图。
图6C-1、图6C-2和图6C-3是展示了根据本文所描述的技术的一些实施例的具有指定多个动态属性(其中一些动态属性是常见类型)的丰富部分的声明性查询610的图。
图6D是展示了根据本文所描述的技术的一些实施例的用于获得相同类型的动态属性x区域(xRegion)和x业务范围(xLineOfBusiness)的值的示例SQL查询的图。
图6E是展示了根据本文所描述的技术的一些实施例的数据实体的不同动态属性可以从不同数据实体的相应属性继承其值的图。
图6F是展示了根据本文所描述的技术的一些实施例的用于访问共享公共继承路径的所继承动态属性的值的示例SQL查询的图。
图7A是根据本文所描述的技术的一些实施例的用于从声明性查询的至少一部分生成一个或多个数据库特定的可执行SQL查询的说明性过程700的流程图。
图7B至图7F示出展示了根据本文所描述的技术的一些实施例的对声明性查询的至少一部分执行以生成一个或多个数据库特定的可执行SQL查询的一系列变换。
图8A示出了根据本文所描述的技术的一些实施例的具有分层结构的数据实体的说明性实例。
图8B示出了根据本文所描述的技术的一些实施例的用于使用递归来检索分层数据的示例声明性查询805。
图8C-1、图8C-2和图8C-3示出了由数据处理系统通过处理图8B所示的示例声明性查询805而获得的说明性结果。
图8D示出了根据本文所描述的技术的一些实施例的用于使用递归来检索分层数据的另一个示例声明性查询810。
图8E示出了由数据处理系统通过处理图8D所示的示例声明性查询810而获得的说明性结果。
图9A示出了根据本文所描述的技术的一些实施例的实体关系图的一部分。
图9B示出了根据本文所描述的技术的一些实施例的用于检索分层数据的声明性查询的伪代码规范。
图9C示出了根据本文所描述的技术的一些实施例的图9B所示的伪代码声明性查询规范的JavaScript对象符号(JSON)实施方式。
图9D示出了根据本文所描述的技术的一些实施例的可以通过处理图9C的JSON声明性查询获得的结果的说明性视图。
图9E示出了根据本文所描述的技术的一些实施例的用于检索分层数据的另一个声明性查询的伪代码规范。
图9F-1和图9F-2示出了根据本文所描述的技术的一些实施例的图9E所示的伪代码声明性查询规范的JSON实施方式。
图9G示出了根据本文所描述的技术的一些实施例的可以通过处理图9F-1和图9F-2的JSON声明性查询获得的结果的说明性视图。
图10A示出了根据本文所描述的技术的一些实施例的说明性声明性表格查询。
图10B示出了根据本文所描述的技术的一些实施例的图10A所示的声明性表格查询的说明性结果。
图10C示出了根据本文所描述的技术的一些实施例的另一说明性声明性表格查询。
图10D示出了根据本文所描述的技术的一些实施例的图10C所示的声明性表格查询的说明性结果。
图10E和图10F示出了根据本文所描述的技术的一些实施例的具有内嵌视图的说明性声明性查询。
图10G-1和图10G-2示出了根据本文所描述的技术的一些实施例的执行图10E的声明性查询的说明性结果。
图10H-1、图10H-2和图10H-3示出了根据本文所描述的技术的一些实施例的执行图10F的声明性查询的说明性结果。
图11是可以用于实施本文所描述的技术的一些实施例的说明性计算系统环境的框图。
具体实施方式
本发明人已经开发了允许高效地访问(例如,查询、创建、更新和删除)由数据处理系统使用数据实体及其实例管理的数据的新技术。如本文所描述的,在一些实施例中,数据处理系统可以使用数据实体来管理数据,这些数据实体可以用于使用面向对象的范例来组织数据。类似于面向对象编程涉及类及其实例的方式类似,数据处理系统可以配置有数据实体的定义,并使用数据实体的实例和数据实体定义来管理数据。数据实体的实例在本文中可以被称为“数据实体实例”。数据实体可以包括多个属性,这些属性在实例化时可以采用不同的值,如数字、字符串或对其他数据实体的引用。本发明人开发的技术允许高效地访问由数据处理系统管理的数据实体实例。
特别地,本发明人已经开发了一种接口,该接口可以体现在应用编程接口(API)中,用于提供对由数据处理系统管理的数据实体实例的高效访问。由于接口/API用于提供对数据实体实例的访问,因此其在本文中有时被称为“实体”API。实体API向用户和计算机程序提供声明性语言,该声明性语言用于指定要执行的期望动作,例如,向数据处理系统查询满足一个或多个标准的数据实体实例、创建新的数据实体实例、更新数据实体实例的值、以及删除现有的数据实体实例。实体API接收指示期望动作并以声明性语言(例如,使用JavaScript对象符号(JSON)或任何其他合适的格式)指定的输入,根据该输入生成可执行语句(例如,当期望动作是向数据处理系统查询数据实体实例并且数据实体实例存储在支持SQL的关系数据库中时的可执行SQL查询),并执行这些可执行语句以执行期望动作。
本发明人已经认识到,数据处理系统可以被配置成管理数百万或数十亿个数据实体实例。例如,如下文参考图1A更详细描述的,在一些实施例中,本文所描述的技术可以用于企业设置中的元数据管理,由此,数据实体实例存储关于存储在包括许多数据库、数据仓库、数据湖等的全球分布式信息技术(IT)基础设施上的各个数据集(例如,表、事务、文档、数据记录等)的信息。在这种情况下,数据实体实例可以存储关于对应数据集的信息,例如,数据集何时被创建、存储在何处、其大小、允许编辑该数据集的(多个)用户的身份、标识哪些应用程序使用该数据集的信息、标识数据的敏感级别的信息等。由于大型组织(例如,如银行或信用卡公司等金融机构、如电话或电力公司等公用事业单位等)通常将管理数百万或数十亿个这样的数据集,因此可能有数百万或数十亿个将由数据处理系统管理的存储关于这样的数据集的信息的数据实体实例。在该示例应用中,由于数据处理系统将存储关于其他数据(有时被称为“元数据”)的信息,因此该示例应用可以被称为“元数据管理”。然而,应当理解,本文所描述的技术不限于将数据处理系统用于元数据管理,并且可以适用于使用数据实体和数据实体实例来管理数据的任何数据处理系统,无论被管理的数据是元数据还是任何其他类型的数据。
不论由数据处理系统使用其数据实体实例管理的数据的类型如何,以上示例清楚地表明,在许多实际应用中,可能期望数据处理系统管理数百万或数十亿个数据实体实例。因此,本发明人已经设计和开发了实体API,以提供对由数据处理系统管理的数据实体实例的高效访问,使得优选地,在最小化数据处理系统上的计算负担的同时,快速而无延迟地提供对数据实体实例的访问。
为此,实体API的有益特征是提供给实体API的输入(例如,声明性语句,例如,声明性查询)在两个独立的阶段中进行处理——一个阶段用于标识感兴趣的数据实体(或其实例),另一个阶段用于访问所标识的数据实体的属性值。这些阶段在本文中有时被称为“标识”和“丰富”阶段。例如,可以被称为“声明性查询”的用于检索关于数据实体实例的信息的声明性语句可以包括两个部分——用于标识感兴趣的数据实体实例(例如,图4A的示例中的数据实体“业务项”的所有实例)的标识部分(例如,图4A中的声明性查询402的标识部分404)和用于指示将针对所标识的数据实体实例检索其值的属性(例如,图4A的示例中的属性“名称”和“描述”)的丰富部分(例如,图4A的示例中的声明性查询402的丰富部分406)。进而,在处理声明性查询的第一阶段期间,对其标识部分进行处理以生成一个或多个可执行(例如,SQL)查询,当针对数据处理系统中存储数据实体实例的(多个)数据存储执行时,该一个或多个可执行查询返回标识感兴趣的数据实体实例的信息(例如,唯一标识符)。在第一阶段的同时或之后,在处理声明性查询的第二阶段期间,对其丰富部分进行处理以生成用于获得在丰富部分中被指示为感兴趣的属性的值的一个或多个其他可执行(例如,SQL)查询。在该阶段,可以针对不同属性或属性组生成单独的可执行查询。随后,组合并输出所有可执行查询的结果(例如,输出到输入声明性查询的用户或计算机程序)。
应当理解,在一些实施例中,实体API的输入可以是声明性语句,当该语句用于从实体API检索信息时,其可以被称为“声明性查询”。然而,实体API不限于仅接收声明性查询作为输入,并且可以被配置成接收任何合适类型的查询(无论在本文所描述的意义上是否是声明性的)或语句(无论在本文所描述的意义上是否是声明性的)作为输入。
上述用于指定和执行输入查询(例如,声明性查询)和/或语句(例如,声明性语句)的阶段性架构提供了许多技术优势。首先,将“标识”与“丰富”分开允许使用“流式”架构来执行处理,由此,只有在“标识”阶段期间标识的一些数据实体实例是用其属性值丰富的,并且附加的数据实体实例仅在其被请求之后进行丰富。这在以下称为“批处理和流式查询执行,限制返回结果的范围”的章节中更详细地描述。这种流式架构提供了对数据实体实例的快速访问,而没有等待所有数据实体实例被丰富的延迟,并且在一些情况下减少了数据处理系统的计算负担,因为并非所有的数据实体实例都需要被丰富。
其次,应当理解,单个数据实体实例的属性值不一定存储在一个表的单行中,而是可能存储在数据处理系统中的多个不同的表中。例如,如本文所描述的,数据实体可以具有静态属性和动态属性,并且动态属性可以使用名称-值对存储在不同的表中。阶段性架构使得生成多个可执行查询成为可能,从而允许更高效地访问这些属性值。例如,如以下在称为“访问属性组的属性值”的章节中更详细地描述的,声明性查询的丰富部分可以通过首先将具有相同类型和/或存储在同一表中的属性进行分组并针对每组属性生成单个可执行查询来处理,这大大减少了检索属性值时要执行的计算量,因为:(1)每个表将被查询一次,而不是多次;以及(2)不同于将连接底层数据库中存储属性值的所有表的常规SQL查询(在实际应用中,这将需要在底层数据库中连接许多表),属性值可以使用单独的可执行查询来检索并在底层数据库之外连接(例如,通过旋转,如以下在称为“旋转”的章节中更详细地描述的)。阶段性架构提供了本文(包括以下在称为“优化丰富查询的执行”的章节中)所描述的许多其他效益和益处。
实体API的另一个有益特征是其允许用户或计算机程序以不知道数据实体实例如何被数据处理系统存储的方式访问(例如,查询、创建、更新、删除)数据实体实例。常规数据处理系统需要查询系统的用户知道被查询的数据是如何存储的。例如,为了编写查询,查询常规数据处理系统的用户需要知道数据处理系统用来存储数据的数据库系统的类型(例如,关系数据库、面向对象数据库、NoSQL数据库以及数据库系统的制造商或供应商)以及该数据库系统如何存储被查询的数据(例如,存储感兴趣的值的一个或多个表的名称)。没有该信息,用户将根本无法编写查询。另外,用户可能希望知道数据库系统的确切版本和供应商,以便能够优化对感兴趣的数据的访问。
相比之下,由实体API启用的查询可以以不知道数据处理系统如何存储被查询的数据实体实例的方式指定。以这种方式,可以使用相同的确切查询来查询数据实体实例,而不论这些数据实体实例是使用关系数据库、面向对象数据库、NoSQL数据库、使用缓存、使用搜索索引(例如,如以下在称为“使用一个或多个搜索索引检索数据”的章节中更详细地讨论的)还是以任何其他方式存储在数据处理系统内。
如本文所描述的,在一些实施例中,数据实体属性可以是静态的或动态的,这意味着其值使用不同的机制来存储(例如,如本文(包括参考图2E)所描述的)。然而,由实体API启用的查询(例如,声明性查询)(特别是可以标识其值将被返回的属性的查询的丰富部分)可以以不知道感兴趣的属性是被实施为静态变量还是动态变量的方式被指定。
在一些实施例中,为了处理不包括关于底层数据实体实例如何存储在数据处理系统中的信息的语句(例如,查询,如声明性查询),实体API被配置成通过一系列变换来变换输入语句以获得可以针对存储数据实体实例及其属性值的(多个)数据库系统执行的可执行语句(例如,可执行SQL查询)。当作为实体API的输入提供的语句不能是声明性语句时,它们不能针对存储数据实体实例的(多个)数据库系统执行;这些语句是“声明性的”,因为它们“声明”了要执行的期望动作(例如,通过“声明”哪些数据实体实例及其哪些属性将被返回、更新、创建等),但正是因为它们不知道数据实体实例是如何存储的,因此它们本身并不是“可执行的”。因此,在一些实施例中,声明性语句(例如,声明性查询)可以不用标识存储期望的数据实体实例和属性值的表,并且可以不包括在针对存储数据实体实例的(多个)数据库系统执行语句时可以应用的任何低级优化。
从这个意义上说,与SQL语句不同,实体API的声明性语句(例如,声明性查询)不能由RDBMS(例如,ORACLE、DB2、POSTGRES、SQL SERVER等)或其他数据存储系统直接执行;更确切地说,其被变换为一个或多个可执行语句,然后由RDBMS或其他存储系统执行。虽然可以使用SQL来指定实体API的声明性语句的一部分,如本文所描述的,但实体API的声明性语句的其他部分却不是使用SQL来指定的,而是作为整个声明性语句的一部分首先由实体API处理,以便将实体API的声明性语句变换为一个或多个可执行(例如,SQL或其他类型的)语句(例如,可执行SQL查询或其他类型的可执行查询)。此外,与SQL不同,实体API的声明性语句用于指定要关于数据实体实例执行的动作——这是一种更高级别的语言,其语句可以被翻译成可执行SQL(或其他类型的查询),但其语句本身不是SQL查询。
因此,在一些实施例中,声明性语句可以通过一系列变换来变换,该一系列变换利用由数据处理系统和实体API内部管理的信息来增强声明性语句中的信息,以生成可以针对数据处理系统用来存储数据实体实例及其属性值的(多个)数据库或其他系统执行的多个可执行语句(例如,多个可执行SQL语句,例如SQL查询)。本文(包括以下在称为“生成可执行查询”的章节中参考图7A至图7F)描述了这些变换的各方面。
如上所述,一些数据实体属性可以引用其他数据实体,并且因此,数据实体实例可以彼此相关。实体API的另一个有益特征是,可以使用单个声明性查询来检索关于多个相关数据实体的信息。在一些实施例中,声明性查询可以明确地指定其值将被检索的相关属性的层次(这在本文中可以被称为“嵌套”),或者使用递归来这样做。
因此,在一些实施例中,单个声明性查询就可以指定属性层次(一些属性是不同相关数据实体的属性),并且可以通过处理单个声明性查询来检索层次中的属性值。在一些实施例中,检索到的属性值可以以与声明性查询中指定的属性层次的分层结构相对应的分层格式输出。例如,分层格式可以具有与声明性查询中指定的属性层次中的属性的嵌套结构相同的嵌套结构。本文(包括以下在称为“检索分层数据”的章节中)描述了分层查询和分层结果输出的各方面。如本文所描述的,由实体API启用的分层查询允许使用单个声明性查询来获得多个不同数据实体层次的结果并在其上执行聚集操作。
因此,一些实施例提供了一种使用声明性查询来获得关于由数据处理系统使用至少一个数据存储管理的数据实体实例的信息的方法,该方法包括使用至少一个计算机硬件处理器来进行以下操作:获得查询(例如,声明性查询),该查询包括:第一部分(本文中有时称为“标识部分”),该第一部分包括用于标识存储在至少一个数据存储中的至少一个数据实体的实例的信息;以及第二部分(本文中有时称为“丰富部分”),该第二部分指示该至少一个数据实体的至少一个属性;从该查询生成多个可执行查询(例如,可执行SQL查询),该多个可执行查询包括第一组一个或多个可执行查询和第二组一个或多个可执行查询,该生成包括:(1)使用该查询的第一部分生成该第一组一个或多个可执行查询,该第一组一个或多个可执行查询用于标识存储在该至少一个数据存储中的该至少一个数据实体的实例;(2)使用该查询的第二部分生成该第二组一个或多个可执行查询,该第二组一个或多个可执行查询用于获得使用该第一组可执行查询标识的该至少一个数据实体的实例的属性值;执行该多个可执行查询以获得该查询的结果;以及输出这些结果中的至少一些(例如,所有)结果。
在一些实施例中,该至少一个数据实体包括多个数据实体,并且生成该第一组可执行查询包括针对该多个数据实体中的每个数据实体生成用于标识存储在该至少一个数据存储中的数据实体的实例的相应可执行(例如,SQL)查询。
在一些实施例中,该至少一个数据实体包括第一数据实体,该至少一个属性包括该第一数据实体的第一多个属性,并且生成该第二组可执行查询包括针对该第一多个属性中的至少一些属性的每个属性生成用于获得使用该第一组可执行查询标识的该至少一个数据实体的实例的属性的值的相应可执行(例如,SQL)查询。
如本文所描述的,在一些实施例中,数据实体可以具有可以被分组的多个属性,并且可以针对每组属性生成单个相应可执行查询,这显著提高了整体性能。因此,在一些实施例中,该第一多个属性包括多个动态属性,并且生成该第二组可执行查询包括:(1)将该多个动态属性分组为多组动态属性,这些组中的每一组具有该多个动态属性中的至少一个;以及(2)针对该多组动态属性中的每一组生成用于获得该第一数据实体的实例的组中的属性值的相应可执行查询。
在一些实施例中,对多个动态属性进行分组是基于动态属性的类型、基于动态属性是否存储在至少一个数据存储中的同一表中和/或基于动态属性是否沿着公共继承路径继承其值来执行的。
在一些实施例中,执行该多个可执行查询包括:(1)执行第一组可执行查询以获得数据实体实例结果(例如,满足输入查询的标识部分中指定的标准的数据实体实例的标识符);以及(2)在执行该第一组可执行查询之后,执行第二组可执行查询以获得通过执行该第一组可执行查询标识的数据实体实例的属性值结果。在一些实施例中,在执行该第一组可执行查询之前生成该第二组可执行查询。在一些实施例中,在执行该第一组可执行查询之后生成该第二组可执行查询。
在一些实施例中,该至少一个属性包括该至少一个数据实体中的第一数据实体的多组动态属性,该第二组可执行查询包括分别对应于该多组动态属性的多个可执行查询,并且执行该第二组可执行查询包括执行该多个可执行查询中的每一个以获得相应的多个动态属性值结果。在一些实施例中,在执行该第二组可执行查询之后,多个动态值属性结果被组合以获得属性值结果。
实体API支持内嵌视图,如本文(包括以下在称为“内嵌视图”的章节中)所描述的。在一些实施例中,查询的第二部分包括内嵌视图,并且生成第二组一个或多个可执行查询包括使用该内嵌视图中指定的信息来生成可执行查询。在一些实施例中,内嵌视图可以包括表格查询(例如,声明性表格查询)。表格查询可以用于执行聚合函数。在一些实施例中,内嵌视图可以指定内部和外部连接键。
在一些实施例中,第一数据实体的至少一个属性包括第一数据实体的第一多个属性,其中,该第一多个属性包括至少一个静态属性和至少一个动态属性。在一些实施例中,第一数据实体的至少一个属性包括第一动态属性,该第一动态属性被配置成从第二数据实体的属性继承其值。
在一些实施例中,查询的第二部分可以指示包括至少一个属性的属性层次。可以使用嵌套或递归或这两者来做出这种指示。在一些实施例中,输出这些结果包括:
以与该属性层次相对应的分层格式来格式化这些结果;以及以该分层格式输出这些结果。这种格式可以是非表格的。
在一些实施例中,生成第一组可执行查询(例如,用于标识感兴趣的数据实体实例)包括至少部分地通过以下各项来生成第一可执行查询:(1)使用查询的第一部分生成中间查询表示(例如,抽象语法树);(2)使用唯一标识符信息、动态属性参考信息、视图类型信息和/或权限信息来增强该中间查询表示,以获得增强的中间查询表示;以及(3)使用该增强的中间查询表示生成第一可执行查询。
在一些实施例中,生成第二组可执行查询(例如,用于访问使用第一组可执行查询标识的数据实体实例的值)包括至少部分地通过以下各项来生成第二可执行查询:(1)使用查询的第二部分生成中间查询表示;(2)使用唯一标识符信息、动态属性参考信息、视图类型信息和/或权限信息来增强该中间查询表示,以获得增强的中间查询表示;以及(3)使用该增强的中间查询表示生成该第二可执行查询。
一些实施例提供了一种方法,该方法包括使用至少一个计算机硬件处理器进行以下操作:获得查询(例如,声明性查询),该查询包括:第一部分,该第一部分包括用于标识存储在至少一个数据存储中的至少一个数据实体的实例的信息;以及第二部分,该第二部分指示包括该至少一个数据实体的至少一个属性的属性层次;从该查询生成多个可执行查询,该多个可执行查询用于从至少一个数据存储中获得该至少一个数据实体的实例和该至少一个数据实体的实例的属性值;执行该多个可执行查询以获得该查询的结果;以及以与该属性层次相对应的分层格式来输出这些结果中的至少一些(例如,所有)结果。
一些实施例提供了一种方法,该方法包括使用至少一个计算机硬件处理器进行以下操作:获得查询(例如,声明性查询),该查询包括:第一部分,该第一部分包括用于标识存储在至少一个数据存储中的至少一个数据实体的实例的信息;以及第二部分,该第二部分指示该至少一个数据实体的至少一个属性;从该查询生成多个可执行查询,该多个可执行查询用于从至少一个数据存储中获得该至少一个数据实体的实例和该至少一个数据实体的实例的属性值;执行该多个可执行查询以获得该查询的结果;以及输出这些结果中的至少一些(例如,所有)结果。
应当理解,可以以多种方式中的任何方式来实施本文所描述的技术,因为这些技术不限于任何特定实施方式。本文仅出于说明性目的提供了实施方式细节的示例。此外,由于本文所描述的技术的方面不限于使用任何特定技术或技术组合,因此本文所披露的技术可以单独使用或以任何合适的组合使用。
说明性数据处理系统和应用
如上所述,本发明人已经认识到,数据处理系统可以被配置成管理数百万或数十亿个数据实体实例。例如,在一些实施例中,本文所描述的技术可以用于企业设置中的元数据管理,由此,数据实体实例存储关于存储在包括许多数据库、数据仓库、数据湖等的全球分布式信息技术(IT)基础设施上的各个数据集(例如,表、交易、文档、数据记录等)的信息。如上所述,在这种情况下,数据实体实例可以存储关于对应数据集的信息,例如,数据集何时被创建、存储在何处、其大小、允许编辑该数据集的(多个)用户的身份、标识哪些应用程序使用该数据集的信息、标识数据的敏感级别的信息等。由于大型组织(例如,如银行或信用卡公司等金融机构、如电话或电力公司等公用事业单位等)通常将管理数百万或数十亿个这样的数据集,因此可能有数百万或数十亿个将由数据处理系统管理的存储关于这样的数据集的信息的数据实体实例。
图1A示出了根据本文所描述的技术的一些实施例的数据处理系统可以用于元数据管理的示例环境。应当理解,本文所描述的技术不限于将数据处理系统用于元数据管理,并且可以适用于使用数据实体和数据实体实例来管理数据的任何数据处理系统,无论被管理的数据是元数据还是任何其他类型的数据。
图1A展示了包括(例如,在一个或多个数据库系统、数据仓库、数据湖等中)各自存储大量数据的分布在多个不同地理位置(例如,不同的城市、国家、大陆等)的系统140、142、144的企业系统。例如,系统140、142、144可以是全球银行的企业系统的组成部分,其中,系统140位于美国,系统142位于巴西,并且系统144位于欧洲。
如图1A的示例实施例所示,系统140、142、144中的每一个包括相应的一组计算设备。系统140包括服务器140A和数据库系统140B。系统142包括服务器142A和数据库系统142B。系统144包括服务器144A和数据库系统144B。在企业系统的操作期间,系统140、142、144中的每一个都可以生成和/或存储大量数据(例如,万亿字节的数据)。例如,企业系统可以用于信用卡公司,其中,系统140、142、144中的每一个生成和/或存储交易数据、信用评分和/或任何其他合适的数据。在另一个示例中,企业系统可以用于银行,其中,系统140、142、144中的每一个生成和/或存储关于银行记录、贷款、账户持有人的数据和/或任何其他合适的数据。在另一个示例中,企业系统可以用于电话公司,其中,系统140、142、144中的每一个生成和/或存储关于电话呼叫、文本消息、数据使用的数据和/或任何其他合适的数据。
在一些实施例中,数据库系统140B、142B、144B可以被配置成存储(例如,企业系统的)数据。数据库系统140B、142B、144B中的每一个可以包括数据库、数据仓库、数据湖和/或任何其他数据库系统。数据库系统140B、142B、144B可以是任何(多种)合适的类型,要么是相同类型,要么是不同类型。例如,这些系统中的每一个都可以包括一个或多个关系数据库系统(例如,ORACLE、SQL SERVER等)。作为另一个示例,在一些实施例中,这些系统中的每一个都可以包括一个或多个其他类型的数据库系统(例如,非关系(例如,NoSQL)数据库系统、多文件系统或任何其他合适类型的数据库系统)。
在图1A的示例实施例中,数据处理系统105可以被配置成存储描述存储在企业系统140、142、144中的数据的信息107。从这个意义上说,信息107可以被认为是元数据。元数据可以包括关于存储在企业系统140、142、144中的数据的多种类型的信息中的任何一种。例如,元数据可以包括关于处理数据的系统(例如,服务器140A、142A、144A)、在用于处理数据的企业系统上执行的软件应用程序和/或应用程序存储数据的规则的信息。在另一个示例中,元数据可以包括关于整个企业软件系统中的数据的信息,如数据是如何生成的、数据的大小、对数据的描述、允许哪个(哪些)用户读取、更新、创建、删除或执行关于数据的任何其他动作,和/或关于数据的任何其他合适的信息。
在一些实施例中,数据处理系统可以使用数据实体实例和数据实体定义来管理元数据。例如,数据处理系统105可以针对由企业系统存储的多个数据集(例如,表)中的每一个存储数据实体实例。每个这样的数据实体实例可以存储关于数据集的信息(例如,数据集何时被创建或更新、数据集被存储在何处、数据集的大小、允许读取、编辑、删除或执行关于数据集的任何其他合适的动作的(多个)用户的身份、标识哪些软件应用程序使用数据集的信息、标识数据集中的数据的敏感级别的信息和/或任何其他合适的元数据)。作为另一个示例,数据处理系统105可以针对企业系统中表的相应列存储数据实体实例。每个这样的数据实体实例可以存储关于列的信息(例如,列中值的含义、谁被授权读取、写入、更新和/或删除列中的值、列中条目的允许值的范围和/或任何其他合适的元数据)。作为又另一个示例,数据处理系统105可以针对被配置成由企业系统的某个系统或设备部分执行的多个软件应用程序中的每一个存储数据实体实例。这样的数据实体实例可以存储关于软件应用程序的信息(例如,软件应用程序处理哪些数据集、应用程序将其输出放在何处、对应用程序功能的描述、应用程序的版本、应用程序对数据和/或其他应用程序的依赖性、在何处可以找到应用程序的可执行文件和/或任何其他合适的元数据)。作为又另一个示例,数据处理系统105可以针对企业系统的多个系统部分中的每一个存储数据实体实例。
从前述内容可以容易地理解,在这样的元数据管理场景中,数据处理系统105可以管理数百万或数十亿个这样的数据实体实例,这就是为什么尽可能高效地执行关于数据实体实例的查询、创建、更新、删除或执行任何其他合适的动作是重要的。
图1B是进一步展示了根据本文所描述的技术的一些实施例的数据处理系统可以在其中运行的图1A的示例环境的图。
如图1B所示,数据处理系统105可以被配置成至少部分地通过使用实体模型160来使用数据实体管理数据,该实体模型包括数据实体定义和数据实体关系。在一些实施例中,由实体模型160定义的数据实体的实例可以存储在数据持久层150中。因此,与数据实体实例相关联的至少一些或全部数据可以存储在数据持久层150中。本文(包括参考图1D)更详细地描述了实体模型160和持久层150的各方面。
而且,如图1B所示,在一些实施例中,实体API 120提供对由数据处理系统105管理并保存在数据持久层150中的数据实体实例的访问。例如,实体API 120展示了可以创建、更新、删除和查询数据实体实例的功能。在一些实施例中,数据处理系统可以被配置成使得由数据处理系统105管理的数据实体实例可以仅通过实体API 120来访问(例如,创建、更新、删除和/或查询),如图1B中也封装了数据持久层150的边界定义实体API 120所示。由实体API展示的功能可以通过多种类型的实体API接口110中的任何一种来访问。
在一些实施例中,声明性语句(例如,声明性查询)可以作为输入被提供给实体API120,以执行关于由数据持久层150管理的一个或多个数据实体实例的动作。声明性语句可以使用输入变换模块130变换为一个或多个可执行查询。然后执行查询,并将结果提供给输出变换模块165,该输出变换模块可以在将结果提供回提供声明性语句的用户或计算机程序之前进一步处理(例如,组合、格式化、组织等)这些结果。本文(包括参考图1D)更详细地描述了实体API接口110、实体API 120、输入变换模块130和输出变换模块164的各方面。
在元数据管理的背景下,在一些实施例中,接口110可以被配置成生成图形用户界面(GUI),用户可以通过该图形用户界面从关于存储在系统140、142、144中的数据的信息107中访问数据。GUI可以允许用户进行以下操作:(1)请求关于由数据处理系统存储的数据实体实例的信息;以及(2)查看关于由数据处理系统存储的数据实体实例的信息。在一些实施例中,GUI可以允许用户访问所存储的关于由系统140、142、144存储的数据的信息107(例如,元数据)。例如,GUI可以允许用户102跟踪在企业软件系统中生成的数据(例如,质量度量和数据的其他特性)。在另一个示例中,GUI可以允许用户102可视化沿袭信息。沿袭信息可以包括关于不同数据实体实例之间的关系的信息。沿袭信息的各方面在名称为“SYSTEMSAND METHODS FOR DETERMINING RELATIONSHIPS AMONG DATA ELEMENTS[用于确定数据元素之间的关系的系统和方法]”的美国专利号10,489,384中进行了描述,该美国专利特此通过援引以其全文并入本文。
为了进一步说明数据处理系统背景下的元数据管理的概念,图1B展示了存储关于数据库系统144B中的相应数据的信息的两个示例数据实体实例。数据库系统144B存储包括关于(例如,银行的)客户的信息的表146。表146的列包括“标识符”、“姓名”、“信用评分”和“评分日期”。数据处理系统105存储关于表146的元数据,并且在该示例中,通过存储数据持久层150(即存储关于表146的信息的“数据集”数据实体的实例147)来实现这一点。
在该示例中,数据实体实例147存储属性值,包括属性“类型”(指示表中信息的类型)、“业务经理”(指示负责表中数据的人)、“条目数量”(指示表中条目的数量)、“私有”(指示隐私设置)、“存储大小”(指示表占用的存储器的量)以及“数据ID”。在一些实施例中,除了或代替图1B所示的那些属性值,“数据集”数据实体实例147可以存储其他属性值。
在数据实体实例包含关于数据的元数据(例如,关于表的信息)的应用中,在一些实施例中,数据实体实例可以包括可以用于标识和/或访问数据的信息。如图1B的示例所示,“数据ID”属性标识了“数据集”数据实体实例147中的信息所描述的数据(例如,表)。例如,“数据ID”的值可以是表146的标识符。在一些实施例中,“数据ID”的值可以允许用户导航到表146。例如,“数据ID”的值可以是导航到数据库144B中的表146的超链接。在一些实施例中,数据实体实例本身可能不存储如何访问表的信息,尽管数据处理系统可以存储将数据实体实例与可以用于标识和/或访问数据本身的信息相关联的信息。例如,数据处理系统可以将这样的信息存储在一个或多个表中(例如,在数据持久层150内)或者以任何其他合适的方式存储。
如图1B的示例所示,数据持久层150进一步存储“信用评分”数据实体实例149。“信用评分”数据实体实例149可以是图2C和图2E所示的“业务项”数据实体220的实例。“信用评分”数据实体实例149包括属性“类型”、“描述”、“业务所有者”、“有效下限”、“有效上限”、“私有”和“数据ID”的值。如“数据ID”属性与表146的“信用评分”列之间的箭头所指示的,“信用评分”数据实体实例158描述了表146的“信用评分”列中的数据。如图1B的示例所示,“数据ID”属性指示“数据集”数据实体实例149中的信息所描述的数据。例如,“数据ID”的值可以是表146中“信用评分”列的标识符。在一些实施例中,“数据ID”的值可以允许用户访问存储在表146的“信用评分”列中的数据。例如,“数据ID”的值可以是可以用于访问用户的“信用评分”列中的数据的超链接。
图1C是展示了根据本文所描述的技术的一些实施例的在一些应用中数据处理系统可以被配置成管理数百万或数十亿个数据实体实例的图。如图1C的示例实施例所示,在一些实施例中,数据持久层150存储大量(例如,数千、数百万、数十亿)数据实体实例,这些数据实体实例存储关于图1A的企业系统的相应组成部分(例如,数据集、软件应用程序、系统、或企业系统的任何其他组成部分)的信息。来自图1C的每个数据实体实例的箭头指示数据实体实例中的信息所描述的组成部分。组成部分可以是数据集、应用程序(例如,一个或多个计算机程序)、系统(例如,数据库系统)和/或企业系统的其他组成部分。例如,数据实体实例可以存储关于企业系统中的数据(例如,表)的信息。在另一个示例中,数据实体实例可以存储关于企业系统的应用程序的信息。在又另一个示例中,数据实体实例可以存储关于企业系统的用户的信息。
如图1C的示例实施例所示,存储在数据持久层150的数据实体实例中的元数据可以用于向用户102提供可视化109。可视化109可以包括与数据实体实例相关联的沿袭信息的可视化。沿袭信息可以包括关于不同数据实体实例之间的关系的信息。沿袭信息的各方面在名称为“SYSTEMS AND METHODS FOR DETERMINING RELATIONSHIPS AMONG DATAELEMENTS[用于确定数据元素之间的关系的系统和方法]”的美国专利号10,489,384中进行了描述,该美国专利特此通过援引以其全文并入本文。
图1D是展示了根据本文所描述的技术的一些实施例的示例数据处理系统105和与数据处理系统105集成的实体应用编程接口(API)120的各方面的框图100。
在一些实施例中,数据处理系统105可以被配置成使用数据实体及其实例来管理数据。数据处理系统105可以被配置成至少部分地通过使用实体模型160来使用数据实体管理数据,该实体模型包括数据实体定义162和数据实体关系164。
数据处理系统可以被配置成使用任何合适数量的数据实体来管理数据。例如,实体模型160可以定义数十个、数百个、数千个或数万个数据实体,如可能在企业计算环境的情况下。
在一些实施例中,数据实体定义162包括由数据处理系统支持的每个数据实体的定义或规范。数据实体定义可以定义数据实体的结构。为此,数据实体定义可以定义数据实体的属性。实体属性可以是标量值,并且可以是如字符串和数字等值。可替代地,实体属性可以引用另一个或多个数据实体。数据实体定义有时可以被称为“数据实体类”或“数据实体规范”,并且在本文中可以简称为“数据实体”。本文(包括以下参考图2A至图2G)更详细地描述了数据实体定义。
在一些实施例中,数据实体关系164定义了数据实体之间的关系。例如,数据实体关系164可以定义特定数据实体是否可以具有引用另一个数据实体的属性(这样的属性在本文中可以被称为“引用”属性,因为其值引用另一个数据实体实例)。
在一些实施例中,一个数据实体的属性可以被配置成从另一个数据实体的属性继承或获取其值。同一数据实体的不同属性可以被配置成从不同数据实体继承其值。在一些实施例中,继承配置可以使用引用属性来实现。例如,一个属性(引用属性)可以指示第二个属性将从中继承其值的数据实体实例。例如,数据实体“D1”可以具有两个属性“A1”和“A2”,其中,A2是引用属性,并且属性“A2”的值可以标识将从中继承属性“A1”的值的另一个数据实体“D2”。将属性“A2”的值变更为不同数据实体“D3”将变更属性“A1”从中继承其值的数据实体。
因此,如本文所描述的属性继承的概念不同于“继承”,因为该术语是在面向对象编程的背景下使用的。在面向对象编程中,继承是指子类从基类继承性质(例如,变量、函数的定义、函数的实施方式)。这允许代码重用以及经由公共类和接口扩展软件。相比之下,本文所描述的“继承”是指数据实体的属性可以被配置成从另一个数据实体的属性获取或“继承”其值的情况。该配置将指示属性将从中继承数据的数据实体——它不像面向对象设置中的基类那样是固定的。由于继承的配置在属性级别上,因此同一底层数据实体的不同属性可以被配置成从多个其他数据实体的不同属性获取或“继承”其值。这为可以如何设置属性值提供了很大的灵活性,并且提供了面向对象编程中没有的间接性水平。实际上,单个数据实体可以被配置成不仅从多个其他数据实体继承属性值,而且该配置可以在单个数据实体的实例级别上变更,如以上所描述的。
从前述内容可以理解,数据实体的继承可以在属性级别上进行配置。为此,在一些实施例中,数据处理系统可以针对数据实体的至少一些(例如,所有)属性中的每一个存储“继承配置”。“继承配置”可以指示属性是否从另一个数据实体属性继承其值以及(如果是)从哪一个继承。
相反,常规的面向对象系统不具有本文所描述的属性级别的继承配置。如上所述,常规的面向对象系统不支持数据实体实例的属性级别的值的继承。更确切地说,面向对象继承是在类级别上,使得数据实体实例属性从单个父数据实体继承所有值。进一步地,本文(包括参考图6E和图6F)描述了继承的各方面。
在一些实施例中,实体模型160(例如,数据实体定义162和数据实体关系164)可以部分或全部存储在数据持久层150中。在其他实施例中,可以以任何其他合适的存储装置来存储实体模型160,因为本文所描述的技术的各方面在这方面不受限制。
在一些实施例中,由实体模型160定义的数据实体的实例可以存储在数据持久层150中。因此,与数据实体实例相关联的至少一些或全部数据可以存储在数据持久层150中。与数据实体实例相关联的数据的非限制性示例包括数据实体实例的任何属性的值、数据实体实例的标识信息(例如,数据实体实例的唯一标识符,数据处理系统105可以通过该标识符唯一地标识数据实体实例)、数据实体的定义、指示具有数据实体实例可以被配置成继承其值的属性的一个或多个其他数据实体的信息、指示被授权创建、读取、写入和/或更新数据实体实例的(多个)用户的权限信息、和/或任何其他合适的数据。这些类型的数据中的一些或全部可以针对一个或多个数据实体实例中的每一个存储在数据持久层150中。在图1D的说明性实施例中,数据持久层150包括用于存储数据实体实例(与数据实体实例相关联的数据)的一个或多个数据存储152。在一些实施例中,(多个)数据存储152可以包括关系数据库系统,使得与数据实体实例相关联的数据存储在关系数据库系统的表中。例如,(多个)数据存储152可以包括ORACLE数据库系统、MICROSOFT SQL SERVER数据库系统、POSTGRESQL数据库系统、IBM DB2数据库系统和/或任何其他合适的关系数据库系统,因为本文所描述的披露内容的各方面在这方面不受限制。然而,(多个)数据存储152不限于仅包括关系数据库系统,并且可以被配置成以任何合适的方式存储数据。例如,(多个)数据存储152可以包括面向对象数据库、分布式数据库、NoSQL数据库(例如,MONGODB数据库)、一个或多个文本文件、或用于管理数据的任何其他合适的数据库和/或系统。作为另一个示例,在一些实施例中,(多个)数据存储152可以包括一个或多个搜索索引(例如,用于优化数据检索)、缓存(例如,用于预取被重复访问的小数据集,例如,用于分类、归类或解释其他数据的参考数据)或其任何合适的组合。本文(包括以下在称为“使用一个或多个搜索索引检索数据”的章节中)描述了搜索索引的各方面。
如本文所描述的,实体API架构的益处是对实体API的调用可以与存储无关。以这种方式,数据处理系统(例如,数据处理系统105)可以使用任何(多个)合适的存储解决方案(RDBMS、文件、面向对象数据库、搜索索引、缓存、其任何合适的组合等)来实施,并且对实体API的调用不必适应特定部署或实施方式中采用的存储解决方案。
更一般地,每个数据存储152可以包括以一种或多种任何合适类型的格式存储数据的一个或多个存储设备。例如,数据存储的(多个)存储设备部分可以使用一个或多个数据库表、电子表格文件、平面文本文件和/或任何其他合适格式(例如,主机的本机格式)的文件来存储数据。(多个)存储设备可以是任何合适的类型,并且可以包括一个或多个服务器、一个或多个数据库系统、一个或多个便携式存储设备、一个或多个非易失性存储设备、一个或多个易失性存储设备、和/或被配置成以电子方式存储数据的任何其他(多个)设备。在数据存储包括多个存储设备的实施例中,存储设备可以共同位于一个物理位置中(例如,在一个建筑物中)或分布在多个物理位置(例如,在多个建筑物中,在不同的城市、州或国家)。存储设备可以被配置成使用一个或多个任何合适类型的网络来彼此通信,因为本文所描述的技术的各方面在这方面不受限制。
数据持久层150可以被配置成存储任何合适数量的数据实体实例。如上所述,数据处理系统可以被配置成支持数十个、数百个、数千个或数万个数据实体。并且在企业计算环境中,数据持久层150可以被配置成存储数千个、数百万个或数十亿个数据实体实例。例如,数据持久层150可以存储至少10,000个数据实体实例、至少50,000个数据实体实例、至少100,000个数据实体实例、至少500,000个数据实体实例、至少1000,000个数据实体实例、至少500万个数据实体实例、至少1000万个数据实体实例、至少5000万个数据实体实例、至少1亿个数据实体实例、至少5亿个数据实体实例、至少10亿个数据实体实例、至少50亿个数据实体实例、100,000至500万个数据实体实例、100万至5亿个数据、100万至50亿个数据实体实例,或这些范围内的任何其他范围。
在一些实施例中,实体API 120提供对由数据处理系统105管理并保存在数据持久层150中的数据实体实例的访问。例如,实体API 120展示了可以创建、更新、删除和查询数据实体实例的功能。在一些实施例中,数据处理系统可以被配置成使得由数据处理系统105管理的数据实体实例可以仅通过实体API 120来访问(例如,创建、更新、删除和/或查询),如图1D中的粗边界定义实体API 120所示。在这样的实施例中,实体API 120可以在数据实体实例周围提供“栅栏”。
由实体API展示的功能可以通过多种类型的实体API接口110中的任何一种来访问。例如,可以通过一个或多个图形用户界面112(例如,由一个或多个用户102)提供对与数据实体实例相关联的信息的查询,并且可以通过图形用户界面112向(多个)用户呈现查询结果。作为另一个示例,可以通过软件接口(如通过脚本接口114(例如,使用脚本语言编写的基于网络的程序))、基于图的计算机程序116和/或任何其他第三方软件以编程方式提供对与数据实体实例相关联的信息的查询。除了检索信息之外,任何这些类型的接口还可以用于创建或删除数据实体实例或者以其他方式更新数据实体实例(例如,通过更新实体实例属性的值、改变属性继承其值的位置、向数据实体实例添加新属性、从数据实体实例中移除属性等)。应当理解,实体API接口的以上示例是说明性的,并且可以使用其他类型的接口来获得对实体API 120所展示的功能的访问。
关于基于图的计算机程序116,在一些实施例中,基于图的计算机程序可以被开发为数据流图。数据流图可以包括表示要对输入数据进行的数据处理操作的部件(称为“节点”或“顶点”)、以及部件之间的表示数据流的链路。用于执行由数据流图编码的计算的技术在名称为“Executing Computations Expressed as Graphs[执行表示为图的计算]”的美国专利号5,966,072中进行描述,该美国专利通过援引以其全文并入本文。用于将计算机程序开发为数据流图的环境在名称为“Managing Parameters for Graph-BasedApplications[管理基于图的应用程序的参数]”的美国专利公开号2007/0011668中进行描述,该美国专利公开通过援引以其全文并入本文。
在一些实施例中,实体API 120允许通过使用声明性查询来获得关于数据实体实例的信息。声明性查询可以指定:(1)感兴趣的数据实体实例;以及(2)要针对感兴趣的数据实体检索其值的属性。声明性查询不是可以由数据持久层150的一个或多个数据库部分执行的可执行查询。更确切地说,实体API 120可以被配置成处理声明性查询,以便使用由声明性查询指定的信息来生成一组一个或多个可执行查询(其不同于声明性查询),该一组一个或多个可执行查询在由数据处理系统针对数据持久层150中的一个或多个数据存储152执行时可以用于检索由声明性查询指定的感兴趣的信息。使用由声明性查询指定的信息生成的一个或多个可执行查询可以是可执行SQL查询或任何其他合适类型的可执行查询。
在一些实施例中,可以使用JavaScript对象符号(JSON)来指定声明性查询。然而,在其他实施例中,可以以任何其他合适的格式(例如,使用任何合适的标记语言)来指定声明性,因为本文所描述的技术的各方面在这方面不受限制。
在一些实施例中,声明性查询可以包括两个部分:所谓的标识部分和所谓的丰富部分。标识部分可以包括用于标识至少一个数据实体的实例的信息。丰富部分可以包括标识至少一个感兴趣的数据实体的属性的信息。
在一些实施例中,数据处理系统105可以被配置成通过以下各项来处理这样的声明性查询:(1)使用声明性查询的标识部分来标识至少一个数据实体的实例;以及(2)使用声明性查询的丰富部分来获得所标识的数据实体实例的属性值。例如,在一些实施例中,数据处理系统105可以被配置成通过以下各项来处理声明性查询:(1)使用声明性查询的标识部分来生成第一组一个或多个可执行(例如,SQL)查询;(2)使用声明性查询的丰富部分来生成第二组一个或多个可执行(例如,SQL)查询;(3)执行该第一组可执行查询以获得指示一个或多个所标识的数据实体实例的结果;(4)执行该第二组可执行查询以获得指示(多个)所标识的数据实体实例的属性值的结果;(5)组合从第一组查询和第二组查询的执行中获得的结果;以及(6)输出结果,可选地,对这些结果应用格式化(例如,分层格式化)。
例如,如图1D所示,可以从实体API接口110之一向实体API 120提供声明性查询115作为输入。在实体API 120内,输入变换模块130可以从声明性查询115生成多个可执行查询135。声明性查询115可以包括标识部分和丰富部分,并且多个可执行查询135可以包括从声明性查询115的标识部分生成的一个或多个可执行查询以及从声明性查询115的丰富部分生成的一个或多个可执行查询。
如图1D所示,输入变换模块包括实体实例标识模块132、实体实例丰富模块134和查询变换模块136。这些模块可以被配置成从声明性查询115生成可执行查询135。
例如,在一些实施例中,实体实例标识模块132可以解析声明性查询115的标识部分,并生成用于标识数据实体实例的查询的中间表示(例如,作为抽象语法树)。进而,查询变换模块136可以:(1)在一系列一个或多个变换中变换查询的中间表示,以利用附加信息增强该表示;(2)从经变换的中间表示生成可执行查询。本文(包括参考图3和在7A-7F中以优选的示例性方式)更详细地描述了这种处理。
作为另一个示例,在一些实施例中,实体实例丰富模块134可以解析声明性查询115的丰富部分,并为用于获得所标识的数据实体实例的属性值的一个或多个查询(通常是多个查询!)中的每一个生成中间表示。进而,查询变换模块136可以:(1)在一系列一个或多个变换中变换每个中间查询表示,以利用附加信息增强该表示;以及(2)从每个经变换的中间表示生成相应可执行查询。本文(包括参考图3和图7A至图7F)更详细地描述了这种处理。
在生成可执行查询135之后,数据处理系统105可以例如通过使用数据访问模块140调用一个或多个数据存储152内的查询135来执行可执行查询135,以从数据持久层150获得数据137。数据137可以包括两种类型的结果:(1)执行用于标识数据实体实例的一个或多个可执行查询的结果;这些结果包括指示一个或多个所标识的数据实体实例的信息(例如,所标识的实体实例的标识符);以及(2)执行用于获得属性值的一个或多个可执行查询的结果;这些结果包括所标识的数据实体实例的属性值。数据137可以被提供给输出变换模块165,该输出变换模块可以在将数据137作为查询结果155输出到一个或多个实体API接口110之前处理该数据。
如图1D所示,输出变换模块165包括数据合成模块163和分层输出模块167。在一些实施例中,数据合成模块163可以被配置成组合数据137内的结果,以便生成查询结果155。如上所述,数据137可以包括:(1)包含指示一个或多个所标识的数据实体实例的信息的结果;以及(2)包括所标识的数据实体实例的属性值的结果。数据合成模块163可以(例如,使用旋转或以任何其他方式)组合这些结果,使得查询结果155将每个所标识的数据实体实例与其属性值相关联。本文(包括参考图3以及在称为“声明性查询:标识和丰富”和“优化丰富查询的执行”的章节中)描述了组合执行标识和丰富查询的结果的各方面。
如图1D所示,输出变换模块165还包括分层输出模块167。在一些实施例中,分层输出模块可以被配置成将数据137格式化以用于分层表示(例如,在文本中使用标移和/或嵌套、在图形用户界面中使用嵌套容器、在标记语言中使用嵌套标签等)。在一些实施例中,结果的分层结构可以与声明性查询的分层结构(例如,在声明性查询的丰富部分中标识的属性的分层结构)匹配。本文(包括参考图4D至图4F、图8A至图8E和图9A至图9G)描述了分层查询和结果表示的各方面。
尽管图1D的示例部分集中于数据处理系统105如何执行声明性查询,但是应当理解,数据处理系统105不限于仅执行声明性查询。实际上,实体API 120还被配置成(例如,使用模块138)处理声明性语句,以创建、删除或以其他方式更新层150中保存的数据实体实例。本文(包括在称为“附加实体API操作”的章节中)描述了创建、删除和更新数据实体实例的各方面。
图1E中示出了数据处理系统105可以如何被配置成处理声明性查询的另一视图,其是根据本文所描述的技术的一些实施例的用于响应于用于获得关于一个或多个数据实体的实例的信息的声明性查询115而生成查询结果的说明性过程101的图。
如图1E所示,具有实体实例标识部分115a和实体实例丰富部分115b的声明性查询115可以由数据处理系统105的输入变换模块130来处理。因此,可以使用声明性查询115的实体实例标识部分115a来生成一个或多个实体实例标识可执行查询135a。实体实例标识可执行查询135a可以由数据处理系统执行,以从数据持久层150中的一个或多个数据存储获得实体实例标识结果137a。
实体实例丰富部分115b可以用于生成用于访问由结果137a标识的实体实例的属性值的一个或多个实体实例丰富可执行查询135b。如箭头131所示,在该说明性示例中,当执行丰富可执行查询135b时,查询可以引用执行标识查询的结果137a,使得仅获得由结果137a标识的那些数据实体实例(这些是使用声明性查询115的标识部分标识的实例)的属性值。例如,丰富可执行查询135b可以包括对一个或多个表和/或变量(参见例如图5C至图5F的示例中的表“业务项ID0”)的引用,该一个或多个表和/或变量用于存储标识通过使用查询135a标识的数据实体实例的信息。在执行实体实例标识可执行查询135a之后,结果可以存储在所引用的(多个)表和/或(多个)变量中,并且在这些查询被执行时由丰富可执行查询135b访问。
在一些实施例中,可以在生成实体实例丰富查询135b之前执行实体实例标识可执行查询135a。在一些这样的实施例中,数据实体实例标识符可以(但不必)直接插入到丰富查询135b中,因为这些标识符是可用的。在该实施方式中,将基于实体实例丰富部分的内容以及执行标识可执行查询135a的结果来生成可执行丰富查询。然而,在一些实施例中,包括图1E和5C至图5F的实施例,在生成丰富查询135b之前不必执行标识查询135a,因为丰富查询135b可以引用(在执行标识查询135a之后)数据实体实例标识符将被存储在其中的一个或多个表和/或变量(或其他存储),并且(多个)引用(例如,(多个)表和/或(多个)变量的名称)可以在执行实体实例标识查询135a之前包括在丰富查询135b中。因此,在一些实施方式中,可以在执行标识查询之前或之后生成丰富查询,因为本文所描述的技术的各方面在这方面不受限制。
在执行查询135a之后,可以执行实体实例丰富可执行查询135b以从数据持久层150中的(多个)数据存储152获得实体实例丰富结果137b。如本文所描述的,(多个)数据存储152可以包括关系数据库或任何其他合适类型的数据存储解决方案,其示例在本文中提供(例如,参考(多个)数据存储152),因为本文所描述技术的各方面在这方面不受限制。
接下来,可以使用输出变换模块165处理结果137a和/或137b以用于输出,从而获得查询结果155,然后可以输出该查询结果。本文(包括以下参考图3)更详细地描述了过程101的阶段的各个方面。
应当理解,实体实例标识可执行查询135a和实体实例丰富查询135b从数据持久层150获得不同的信息。特别地,查询135a可以用于标识满足实体实例标识部分115a中阐述的标准的数据实体实例,并返回标识这种数据实体实例的信息。然而,查询135a的结果通常不包括数据实体实例属性的值。更确切地说,数据实体实例属性的值是通过处理实体实例丰富可执行查询135b获得的。还应当理解,通过查询135a和135b获得的数据可以存储在(多个)数据存储152的不同表或其他数据结构中。例如,数据实体实例的标识符可以与那些实例的动态属性的值分开存储,这些值可以存储为名称-值对。
图1F示出了根据本文所描述的技术的一些实施例的通过图1E所示的说明性过程101处理声明性查询170的说明性示例。声明性查询170包括实体实例标识部分170a和实体实例丰富部分170b。
标识部分170a指示将标识名称以“A”开头的“业务项”数据实体的实例。丰富部分170b指示,对于使用标识部分170a标识的每个数据实体实例,将检索包括“名称”和“责任方”在内的多个属性的值——省略号指示可以在丰富部分170b中指定更多属性,但是为了表示清楚,在该示例中仅示出了两个。
接下来,输入变换模块130对实体实例标识部分170a进行处理以生成实体实例标识可执行SQL查询172a,该查询在由数据处理系统执行时从数据持久层150检索实体实例ID结果174a。实体实例ID结果174a包括满足实体实例标识部分170a中阐述的条件的数据实体实例的标识符(在表175中示出)。虽然表175只有七行,但这只是为了清楚表示起见,因为任何合适数量的数据实体实例(例如,数十个、数百个、数千个、数百万个等)都可以响应于执行实体实例标识查询(例如,该示例中的查询172a或本文所描述的任何其他实体实例标识查询)而被标识。
输入变换模块130还对实体实例丰富部分170b进行处理以生成实体实例丰富可执行SQL查询172b,该查询在由数据处理系统执行时从数据持久层150检索实体实例丰富结果174b。如箭头171所示,在该说明性示例中,当执行丰富可执行查询172b时,查询可以引用执行标识查询172a的结果174a,使得仅获得由结果174a标识的那些数据实体实例的属性值。例如,丰富可执行查询172b可以包括对一个或多个表和/或其他(多个)变量的引用,该一个或多个表和/或其他变量用于存储标识通过使用查询172a标识的数据实体实例的信息。在执行实体实例标识可执行查询172a之后,结果可以存储在(多个)表和/或其他(多个)变量中,并且在这些查询被执行时由丰富可执行查询172b访问。
在一些实施例中,可以在生成实体实例丰富查询172b之前执行实体实例标识可执行查询172a。在一些这样的实施例中,数据实体实例标识符可以直接插入到丰富查询172b中(如果需要的话),因为这些标识符是可用的。在该实施方式中,将基于实体实例丰富部分的内容以及执行标识可执行查询172a的结果来生成可执行丰富查询172b。然而,如本文所描述的,在生成丰富查询172b之前不必执行标识查询172a,因为丰富查询172b可以引用(在执行查询172a之后)数据实体实例标识符将被存储在其中的一个或多个表和/或变量,并且(多个)引用(例如,(多个)表和/或(多个)变量的名称)可以在执行实体实例标识查询172a之前包括在丰富查询172b中。
如图1F所示,实体实例丰富结果174b包括来自数据持久层150的在实体丰富部分170b中指定的属性的值。例如,表176a包括在实体实例ID结果174a中标识的数据实体的实例的“名称”属性的值。作为另一个示例,表176b包括在实体实例ID结果174a中标识的数据实体的实例的“责任方”属性的值。如果实体实例丰富部分170b指定了附加属性(如170b中的省略号所示),则实体实例丰富结果174b可能已经包括了那些附加属性的值(如174b中的省略号所示)。
如本文所描述的,在一些实施例中,不同的可执行SQL查询可以用于检索不同组的一个或多个属性的值。在图1F的示例中,可执行SQL查询172b包括至少两个可执行SQL查询——用于获得“名称”属性的值的第一可执行SQL查询以及用于获得“责任方”属性的值的第二可执行SQL查询(不同于第一可执行SQL查询并与其分开执行)。这就是为什么在该示例中,通过执行这两个查询获得的结果被显示在单独的表176a和176b中。
在获得实体丰富结果176b之后,这些结果由输出变换模块165进行处理以生成包括表178的查询结果155,在该示例中,该表将针对特定数据实体实例检索的所有属性值分组在该实体实例的表的一行中。如本文所描述的,响应于处理实体API查询而输出的查询结果不必是表格形式的,并且在一些实施例中,可以具有任何其他合适的格式(例如,分层格式),其示例在本文中提供。为了清楚地呈现图1F中的该示例,查询结果被示出为表格178的行。
在图1F的示例中,输出变换模块165被示出为接收实体实例ID结果174a和实体实例丰富结果174b两者,并根据这两个输入生成查询结果。图1E中示出了类似的架构。实体实例ID结果174a可以包括关于每个实体实例ID的附加信息,而不仅仅是其标识符(例如,实体实例的名称、实体的类、在生成引用实体的GUI时显示的名称、一个或多个其他标识符和/或任何其他合适的信息等)。实体实例丰富结果可以包括所标识实例的一个或多个属性的值。查询结果可以包括一些或全部这些类型的信息。
在一些实施例中,例如,查询结果可以直接从实体实例丰富结果生成,而不使用实体实例ID结果174a。例如,如果仅返回实体实例标识符而没有关于每个实体实例的其他信息(例如,其他信息可以是实体实例ID结果174a的一部分),并且丰富结果174b使用实体实例id组织属性值(例如,如图1F中的表176a和176b的第一列所示),则丰富结果可以用于例如直接生成查询结果(例如,表178),而不使用实体实例ID结果174a。
数据实体、静态属性和动态属性、实体之间的关系
在一些实施例中,由数据处理系统管理的数据可以使用数据实体来组织。数据实体可以用于使用面向对象的范例来组织数据。类似于面向对象编程涉及类及其实例的方式类似,数据处理系统可以配置有数据实体的定义,并使用数据实体的实例和数据实体定义来管理数据。
在一些实施例中,数据实体定义定义了数据实体的结构。数据实体定义可以定义数据实体的属性(或变量)。实体属性可以是标量值,如字符串和数字。例如,图2C所示的“业务项”数据实体220具有名为“定义”的字符串值属性。实体属性可以引用其他数据实体。这样的实体属性可以被称为“引用属性”。例如,如图2G所示,数据实体220的业务项组(BizTermGroup)属性引用业务项组数据实体。本文提供了实体属性类型的其他示例。
在一些实施例中,数据实体定义可以为数据实体的一个或多个属性指定附加信息。例如,数据实体定义可以指定属性类型。作为另一个示例,数据实体定义可以指定数据处理系统存储属性的值的方式(例如,属性值是存储在行中还是列中)。作为又另一个示例,数据实体定义可以指定数据实体的属性是否(例如,从另一个数据实体的属性)继承其值。在一些实施方式中,数据实体定义可以为特定属性指定特定值(例如,默认值),在这种情况下,数据实体的所有实例都将特定属性设置为特定值。在其他方面,数据实体实例属性的值可能因数据实体的实例而异。
在一些实施例中,数据实体可以包括一个或多个静态属性和/或一个或多个动态属性。例如,图2A示出了具有多个静态属性202(包括静态属性203a和203b)和多个动态属性204(包括动态属性205a和205b)的数据实体200的说明性图。作为另一个示例,图2B示出了具有多个静态属性212(包括静态属性212a和212b)和动态属性214(包括动态属性214a-214b)的名为“业务项”的数据实体210的说明性图。数据实体可以具有任何合适数量的静态属性(包括0)和任何合适数量的动态属性(包括0),因为本文所描述的技术的各方面在这方面不受限制。
图2C示出了具有静态属性222(“名称”和“描述”)和动态属性224(“遗留URL(LegacyURL)”和“遗留变更日期(LegacyChgDate)”)的“业务项”数据实体220的另一个说明性图。属性225是引用属性,因为其引用其他数据实体。例如,数据实体220的业务项组属性引用业务项组数据实体,PII分类(PIIClassification)属性指向PII分类数据实体,并且数据元素(DataElem)属性指向数据元素数据实体的集合。
图2D是展示了根据本文所描述的技术的一些实施例的图2C所示的数据实体的一些属性的属性性质(包括其属性是静态还是动态)的表230。特别地,表230指示“名称”、“描述”和“遗留URL”属性是字符串值,而“遗留变更日期”采用日期类型的值。表230指示“名称”和“描述”是静态变量,而“遗留URL”和“遗留变更日期”是动态变量。
在一些实施例中,数据处理系统可以以不同方式存储静态属性和动态属性。例如,静态属性的值可以存储在一个数据库表或多个数据库表的列中。相比之下,动态属性的值可以被存储为名称-值对,并且因此,被存储在一个数据库表或多个数据库表的单独的行中。
图2E是展示了根据本文所描述的技术的一些实施例的数据管理系统可以如何存储静态属性值和动态属性值的各方面的图。在一些实施例中,为了存储静态属性值,每个实体实例可以被表示为一个数据库表(或多个数据库表)中的行,并且实例的每个静态属性可以被表示为(多个)表中的列。例如,如图2E所示,数据实体220的实例的静态属性值存储在静态属性存储装置235(其可以包括一个或多个表)中,并且具体地,存储在表240中。表240包括每个静态属性的列,该列的行对应于“业务项”数据实体220的不同实例。因此,该表具有称为“名称”的列,其用于存储数据实体220的不同实例(例如,该示例中的实例1001和1002)的“名称”属性的值,以及称为“描述”的列,其用于存储数据实体220的不同实例的“描述”属性的值。在一些实施例中,表240可以由数据库管理员使用数据定义语言来定义。
另一方面,在一些实施例中,动态属性值可以使用名称-值对来存储。特别地,每个数据库记录可以存储特定实体实例的属性值。例如,如图2E所示,数据实体220的实例的动态属性值使用表250和260存储在动态存储装置245(其可以包括一个或多个表)中。在该示例中,表250为每个动态属性指派相应的唯一标识符,并且表260为每个动态属性值存储一行——动态属性值与数据实体实例的属性和标识符(例如,该示例中的1001、1002…)的唯一标识符(例如,该示例中的1、2…)一起存储。
图2F中示出了数据实体实例265的另一个示例,该图是示出数据实体实例及其至少一些属性的值的可视化的说明性图形用户界面的截屏。数据实体实例265是“业务项”数据实体的实例。在该示例中,数据实体实例265被命名为“信用评分”。数据实体实例265具有许多静态(例如,“名称”、“定义”和“类型”)和动态属性。在该示例中,动态属性被分成属性组,用于存储与银行应用中的数据治理相关的各种类型的信息。例如,数据实体实例265具有与治理相关的动态属性,这些动态属性包括:“业务所有者”、“治理组”、“风险数据域”、“业务范围”、“管理员”、“主题专家”等。作为另一个示例,“信用评分”数据实体实例具有与隐私和安全相关的属性,这些属性包括:“敏感性”、“PII分类”和“安全范围”。图2F的截屏展示了数据实体实例265的这些属性中的一些属性的示例值。
从前述示例可以理解,属性可以被认为是不同类型的,这取决于它们所采用的值的类型。不同类型属性的示例在下文中通过举例而非限制进行描述。例如,属性可以采用标量值,如数字、字符串、日期、时间或日期时间。在本文所描述的一些示例中,这种类型的属性可以被称为“扩展属性”。在一些实施例中,属性可以是多值的并采用值集,每个值可以是数字、字符串、日期、时间或日期时间。
作为另一个示例,属性可以是离散的,由此其采用从离散值集中选择的值。这样的组可以被称为“枚举”。例如,属性可以是“分类”类型,由此其值是从一组标签中选择的标签。这允许用期望的标签来标记数据。作为一个具体的示例,某些数据可以被分类为是或包含例如具有如“是”或“否”等值的个人可识别信息(PII)。在图2F的示例中,PII分类动态属性是“分类”类型,属性“治理组”也是如此。作为另一个示例,属性可以采用表示相应用户或用户组的值。在图2F的示例中,“业务所有者”属性可以是“责任方”类型,并且其值可以表示用户或用户组。在图2F的示例中,“业务所有者”采用值“Wade L.Register”。在一些实施例中,离散值集中的一个或多个(例如,所有)值可以是对另一个数据实体实例的引用。所有这些示例属性都是离散的。
作为离散属性的另一个示例,属性可以采用有序值集中的值。例如,有序集合中的值可以根据层次来排序。作为一个具体示例,属性可以存储与地理区域相关的值,该值可以选自值的分层列表(例如,“美国”、“特拉华州”或“威尔明顿”)。采用有序值集中的值的属性可以是“层次”类型。在图2F的示例中,“风险数据域”、“业务范围”和“区域”属性是“层次”类型的动态属性。在一些实施例中,当访问“层次”类型属性的值时,变量所采用的特定值可以与其他相关值一起返回。例如,如图2F所示,“风险数据域”的值是“信用风险”,并且其与相关值“公司风险”一起显示在图2F中,该相关值是与“风险数据域”的值层次中的“信用风险”相关的值,因为“信用风险”就是一种“公司风险”。在一些实施例中,有序值集中的一个或多个(例如,所有)值可以是对另一个数据实体实例的引用。
作为另一个示例,属性可以是引用属性,并且其值可以是对另一个数据实体的引用(例如,对另一个数据实体的实例的引用)。在一些实施例中,属性可以是多值的并且采用值集,每个值都可以引用数据实体。
作为另一个示例,在一些实施例中,属性可以是“文件附件”类型,并且其值可以标识感兴趣的文件(例如,文档、报告、配置文件、电子表格等)。在图2F的示例中,“设计文档”属性是“附件”类型。
在一些实施例中,相同类型的动态属性的值可以存储在相同的底层关系数据库表中,这允许在检索这些属性的值时最佳化。例如,如下所述,在称为“优化丰富查询的执行”的章节中,单个可执行SQL查询可以用于检索相同类型的多个动态变量的值。
从前述内容可以理解,存储数据实体实例可以涉及存储许多不同类型的数据,因为实体实例可以具有不同类型的属性。此外,数据实体实例可以具有静态和动态变量,这些变量可以由数据处理系统以不同的方式存储。因此,可以使用数据库系统(例如,关系数据库系统、面向对象数据库系统等)中的一个或多个表的行和/或列来存储单个数据实体实例。(多个)表可以存储在一个或多个计算机可读存储介质上。
如上文参考数据处理系统105的实体模型160所描述的,数据处理系统可以配置有通过使用引用属性而彼此相关的数据实体,由此一个数据实体的属性可以引用另一个数据实体。数据处理系统的配置可以包括实体模型160,该实体模型包括数据实体定义162和指定数据实体之间的关系164的信息。这种实体模型的各方面可以在实体关系图(ERD)中可视化,如在图2G所示的说明性ERD中可视化,该图是示出了根据本文所描述的技术的一些实施例的、根据可以配置数据处理系统的示例实体模型的数据实体之间的关系的图270。
在图2G的示例中,“业务项”数据实体272具有属性“名称”、“描述”、“PII分类ID”、“遗留URL”、“遗留变更日期”和“设计文档(DesignDocument)”,这些属性采用各种值。这些属性中的一个或多个可以是静态的(例如,“名称”和“描述”)。这些属性中的一个或多个可以是动态的(例如,“PII分类ID”、“遗留URL”、“遗留变更日期”等)。“业务项”数据实体还具有引用属性“业务项组”、“PII分类”和“数据元素”,这些引用属性分别引用其他数据实体——业务项组数据实体274、PII分类数据实体278和数据元素实体276。业务项组属性可以引用一个或多个业务项组数据实体实例。PII分类属性可以引用零个或一个PII分类数据实体实例。数据元素属性可以指向零个、一个或多个数据元素实体。
数据元素实体276包括属性“名称”以及两个引用属性“业务项”(引用父业务项)和“数据集(DataSet)”(引用数据集实体280的一个或多个实例)。进而,数据集实体280包括指向应用数据实体282的一个或多个实例的引用属性“应用”。
应当理解,图2G所展示的实体模型是说明性的而非限制性的。数据处理系统可以配置有具有任何合适的数据实体及其之间的关系的任何合适的数据实体模型,因为本文所描述的技术的各方面不限于任何特定的实体模型。
使用声明性查询检索关于数据实体实例的信息
图3是根据本文所描述的技术的一些实施例的用于响应于用于获得关于一个或多个数据实体的实例的信息的查询(例如,声明性查询)而生成查询结果的说明性过程300的流程图。
过程300可以由任何合适的(多个)计算设备来执行。过程300可以由在数据处理系统(例如,数据处理系统105)上执行的任何合适的软件来执行。例如,参考图1D所示的数据处理系统105,过程300可以至少部分地通过使用输入变换模块130执行动作304(包括动作304a和304b)以及使用输出变换模块160执行动作308来执行。作为另一个示例,在一些实施例中,数据访问模块140可以被配置成执行动作306。
在图3的说明性实施例中,过程300开始于获得查询(例如,声明性查询)的动作302。该查询可以包括用于标识数据实体的实例的第一部分(查询的“标识部分”)和指示要检索其值的数据实体的至少一个属性的第二部分(查询的“丰富部分”)。在一些实施例中,可以使用JSON来指定查询。然而,在其他实施例中,可以以任何其他合适的格式来指定查询,因为本文所描述的技术的各方面在这方面不受限制。本文提供了查询(例如,声明性查询)的示例。
查询可以从任何合适的来源获得。例如,在一些实施例中,可以通过参考图1D描述的实体API接口110之一来获得查询。作为一个示例,查询可以由用户在图形用户界面中编写。作为另一个示例,可以使用脚本语言、基于图的计算机程序、第三方应用程序或任何其他合适的软件以编程方式生成查询。
在动作302处获得查询之后,过程300进行到动作304,在该动作处,从在动作302处获得的查询生成一个或多个可执行查询。在一些实施例中,可执行查询可以是可执行SQL查询。
在一些实施例中,动作304可以在两个阶段中执行。首先,在动作304a处,从查询的标识部分(“标识查询”)生成一个或多个可执行查询(例如,可执行SQL查询)。接下来,在动作304b处,从查询的丰富部分(“丰富查询”)生成一个或多个可执行查询(例如,可执行SQL查询)。分别在动作304a和304b处生成的可执行标识和丰富查询可以以任何合适的方式生成,包括以在以下名为“生成可执行查询”的章节中描述的方式中的任何方式生成。查询的第一标识部分可以通过一系列变换来变换,该一系列变换利用由数据处理系统管理的信息来增强第一部分中的信息,以生成被配置成针对由数据处理系统用来存储数据实体实例的至少一个数据存储中的数据存储执行的第一组一个或多个可执行查询,并且其中,查询的第二丰富部分可以通过一系列变换来变换,该一系列变换利用由数据处理系统管理的信息来增强第二部分中的信息,以生成被配置成针对由数据处理系统用来存储属性值的至少一个数据存储中的数据存储执行的第二组一个或多个可执行查询。
在一些实施例中,在动作304a处,根据本文参考图7A至图7F描述的过程700,可以使用查询的标识部分来生成单个可执行(SQL)查询。
在一些实施例中,在动作304b处,根据参考图7A至图7F描述的过程700,可以使用查询的丰富部分来生成一个或多个可执行SQL查询。是否使用丰富部分生成多个可执行SQL查询取决于丰富部分中标识的属性数量。当仅标识单个属性时,单个可执行SQL查询可能就足够了。然而,在一些实施例中,当在丰富部分中标识多个属性时,可以使用丰富部分生成多个可执行SQL查询。
特别地,在一些实施例中,当在查询的丰富部分中标识多个属性时,可以将属性分组为组,并且可以针对每组属性生成可执行SQL。在一些实施例中,属性可以如下被分成组:(1)数据实体的静态属性可以被分组为单个组;(2)动态属性可以基于其在实体模型中的类型(例如,图2G所展示的示例实体模型的扩展属性、分类、层次、责任方和附件)和/或基于其存储方式被分组为一个或多个组;以及(3)丰富部分内的每个引用动态属性(即,引用另一个数据实体实例的动态属性)或内嵌视图为一个组。本文(包括以下在称为“访问属性组的属性值”的章节中)描述了将动态属性分组为组的各方面。
在一些实施例中,对于每组静态或动态属性,可以使用参考图7A描述的过程700来生成相应可执行查询(例如,可执行SQL查询)。对于引用第二数据实体的实例的任何引用属性,可以递归地应用相同的整体方法:(1)将所请求的另一个数据实体实例的静态属性和动态属性进行分组;(2)针对每个结果组(例如,使用过程700)生成可执行SQL查询;以及(3)如果第二数据实体实例包括引用第三数据实体实例的引用属性,则:(3a)对其所请求的静态和动态变量进行分组;以及(3b)针对每个结果组(例如,使用过程700)生成可执行SQL查询。如果第三数据实体实例具有引用第四数据实体实例的引用属性,则将静态属性和动态属性分组为组并针对每个组生成可执行查询的过程可以递归地继续,以此类推。
在一些实施例中,查询的丰富部分可以包括包含另一查询的内嵌视图。该另一查询可以是其结果包括一个或多个数据实体的实例的属性值的声明性实体查询或者是声明性表格查询(本文(包括在以下称为“实体API的附加方面”的章节中)描述了声明性表格查询的各方面)。例如,声明性查询920的丰富部分包括两个内嵌视图:包括声明性实体查询的内嵌视图922和包括声明性表格查询的内嵌视图924。以这种方式,声明性查询可以被嵌套。在丰富部分包含内嵌视图的情况下,内嵌视图中的声明性查询可以以类似于上述的方式进行处理;即,静态和动态属性可以被分组,并且可以针对每个组生成相应可执行(例如,SQL)查询,其中,进一步的递归处理被应用于任何引用的数据实体查询或进一步嵌套的内嵌视图。
在动作304处生成可执行实例和丰富查询之后,过程300进行到动作306,在该动作处,执行这些可执行查询以获得查询结果,并且在动作308处可以组合并输出查询结果。
在一些实施例中,执行动作306包括首先执行在动作304a处生成的标识查询以获得标识一个或多个数据实体实例的信息。该信息可以存储在一个或多个表和/或变量中。在执行标识查询之后,动作306可以包括执行在动作304b处生成的丰富查询以获得所标识的数据实体实例的属性值。在动作304b处生成的丰富查询因此可以引用标识通过执行在动作304a处生成的标识查询而获得的(多个)数据实体实例的信息。引用可以是对存储(多个)数据实体实例信息的(多个)表和/或(多个)变量的引用。
而且,如本文所描述的,在一些实施例中,在所展示的过程300的变型中,可以在执行标识查询之后生成丰富查询。在这样的实施例中,该过程可以通过以下方式进行:(1)从声明性查询的标识部分生成一个或多个可执行标识查询;(2)执行一个或多个标识查询以获得标识一个或多个数据实体实例的信息;(3)生成一个或多个可执行丰富查询(可选地,使用在第二步骤处获得的标识(多个)数据实体实例的信息);以及(4)执行一个或多个丰富查询以获得所标识的数据实体实例的属性值。因此,应当理解,可以在执行标识查询之前或之后生成丰富查询,因为本文所描述的技术的各方面在这方面不受限制。
在一些实施例中,在动作306处获得的查询结果可以包括:(1)通过执行使用查询的标识部分获得的可执行查询而标识的每个数据实体实例的标识符;以及(2)通过执行可执行查询或使用查询的丰富部分获得的查询而获得的属性值。可以通过将数据实体实例标识符放置到表中并且由于属性值也与相应实体实例的标识符相关联而将动态属性值放置到同一表中(如下所述,该表有效地执行旋转操作)来组合这样的查询结果。本文(包括在称为“声明性查询:标识和丰富”以及“优化丰富查询的执行”的章节中)进一步描述了组合所生成的可执行查询的查询结果的各方面。
组合的查询结果可以以多种方式中的任何方式输出。例如,在一些实施例中,结果可以被保存到存储器或任何其他一种或多种合适的计算机可读存储介质,使得结果可以随后被访问。在一些实施例中,在从软件程序(例如,脚本、基于图的计算机程序、第三方软件等)接收到查询时,可以将结果提供给软件程序。在一些实施例中,在用户经由图形用户界面输入查询时,可以通过图形用户界面向用户显示结果。
组合的查询结果可以以任何合适的格式输出。例如,查询结果可以以文本格式、JSON或任何其他合适的格式输出。在一些实施例中,查询结果可以被格式化以用于分层表示(例如,在文本中使用标移和/或嵌套、在图形用户界面中使用嵌套容器、在标记语言中使用嵌套标签等)。在一些实施例中,结果的分层结构可以与查询的分层结构(例如,在声明性查询的丰富部分中标识的属性的分层结构)匹配。本文(包括参考图4D至图4F、图8A至图8E和图9A至图9G)描述了分层查询和结果表示的各方面。
声明性查询:标识和丰富
图4A是展示了根据本文所描述的技术的一些实施例的包括标识部分404和丰富部分406的示例声明性查询402的图。在该示例中,声明性查询402以JSON格式指定。然而,应当理解,声明性查询可以以任何其他(多个)合适的格式来指定,因为本文所描述的技术的各方面不限于仅使用JSON格式来指定声明性查询。
如本文所描述的,声明性查询的标识部分包含用于标识一个或多个数据实体的实例的信息,这些实例可以由数据处理系统(例如,使用参考图1D描述的数据持久层150)存储。声明性查询的丰富部分包含标识一个或多个数据实体的一个或多个属性的信息,该一个或多个属性的值将响应于处理声明性查询(针对所标识的数据实体实例)而获得。以这种方式,处理声明性查询涉及:(1)处理其标识部分以选择数据实体实例;以及(2)处理其丰富部分以获得所选数据实体实例的属性值。当属性值是对一个或多个其他数据实体实例的引用时,处理丰富部分可以进一步包括使用该引用值来获得其他(多个)数据实体实例的属性值,或者甚至是与其他(多个)数据实体实例相关的仍其他(多个)数据实体实例的(多个)属性值,如本文所描述的。
在图4A的示例中,声明性查询402用于检索关于其“实体类”是“业务项”的任何数据实体的实例的信息。这在如图4A所示的标识部分404的第二行中指示。进而,丰富部分406指定,对于使用标识部分404标识的每个数据实体实例,应该获得“名称”和“描述”属性的值。
图4B中示出了通过处理图4A的声明性查询402而生成的说明性查询结果422。在该示例中,响应于处理声明性查询402而生成的查询结果422包括单个数据实体实例的信息。(为了清楚起见,这是经删节的示例。实际上,可以返回关于许多数据实体实例的信息)。该单个数据实体实例的信息包括:(1)数据实体实例的标识信息;以及(2)在声明性查询402的丰富部分406中标识的数据实体的属性值(对于单个实例)(即,属性“名称”和“描述”的值,在该示例中,这些值分别是“主账号”和空值)。如果在丰富部分406中标识了附加属性,则这些属性的值也将被包括在查询结果422中。
同样如图4B所示,数据实体实例的标识信息(查询结果422的一部分)包括具有对应值的多个字段,包括例如用于指示具有对应值“业务项”的数据实体实例的实体类的字段(“实体类”)(其与声明性查询402的标识部分404一致)、用于指示具有对应值“主账号”的数据实体的内部名称的字段(“标识名称”)、用于指示用于与对应值“主账号”一起显示的数据实体实例的名称的字段(“显示名称”)、用于指示其对应值为“业务项”的实体类型的字段(“实体类型”)、以及用于指示对应值为“55.1171”的数据实体实例的字母数字(或数字或字母)标识符的字段(“复合ID”)。
从图4A和图4B可以理解,声明性查询402是查询,因为它是用于检索关于由数据处理系统管理的数据实体实例的信息的声明性语句。用于获得关于数据实体的信息的声明性查询可以被称为“实体查询”(参见例如标识部分404的第一行)。如本文所描述的,本文所描述的技术的实施例不限于仅检索关于数据实体的信息(例如,数据实体实例、数据实体的定义、相关配置信息等),而是可以用于在数据处理系统中更新、删除或创建这样的信息。在这种情况下,可以使用声明性语句来实现这样的操作。本文(包括以下在标题为“附加实体操作”的章节中)描述了这种声明性语句的示例(声明性查询是声明性语句的示例)以及这种语句如何被数据处理系统处理的描述。
在图4A的简单示例中,标识部分404指定将标识具有特定类的数据实体的实例。然而,标识部分可以指定将以其他方式选择哪些数据实体实例,这可能更复杂。例如,标识部分可以指定将选择具有某些属性值的数据实体实例。作为一个具体示例,图4C所示的声明性查询410的标识部分411在行412处指示应该检索关于具有类“业务项”并且其“名称”属性是包含值“账户”的字符串的数据实体实例的信息。作为另一个示例,标识部分可以指定将选择与具有某些属性值的其他数据实体相关的数据实体实例。
更一般地,在一些实施例中,用于选择数据实体实例的条件可以取决于数据处理系统存储和/或可访问的任何数据,包括与数据实体实例本身相关的任何数据、全局参数和/或变量、数据处理系统配置、计算环境变量值和/或数据处理系统存储和/或可访问的任何其他合适的数据。在一些实施例中,一个或多个这样的条件可以在声明性查询的标识部分中(例如,使用JSON)明确表达,本文提供了其示例。在一些实施例中,当处理声明性查询时,数据处理系统可以施加一个或多个这样的条件。例如,数据处理系统可以向用户提供仅关于用户被授权访问的那些数据实体实例的信息。在一些实施例中,这样的条件可以自动施加,而不必明确地编写为声明性查询的一部分。
因此,在一些实施例中,用于选择数据实体实例的条件取决于与数据实体实例相关联的数据(例如,数据实体实例的属性值、相关数据实体实例的属性值、数据实体的定义、与访问数据实体相关联的权限、存储在数据实体实例中的数据的版本等)。附加地或可替代地,用于选择数据实体实例的条件可以取决于其他信息。例如,条件可以指定对要返回的结果的数量的数字限制(参见例如图4C所示的声明性查询410的行414,其将返回结果的数量限制为5,000)。也可以在声明性查询的丰富部分中设置对返回结果的数量的限制(参见例如图4C所示的丰富部分415的行416,其将响应于“选择”语句返回的结果的数量限制为500)。作为另一个示例,条件可以指定仅选择数据处理系统的用户(例如,登录的用户)被授权访问的那些数据实体实例。
作为又另一个示例,条件可以指定基于数据实体实例的历史(例如,何时创建、何时最后一次更新、是否在指定的时间段内更新、是否由特定用户或用户组创建和/或编辑等)来选择数据实体实例。
作为又另一个示例,条件可以指定基于数据实体实例的工作流状况来选择数据实体实例。在一些实施例中,数据处理系统可以被配置成使用工作流管理系统来管理对数据实体实例的变更,使得用户对与数据实体实例相关联的任何数据(例如,属性值)做出的至少一些变更必须被一个或多个其他用户批准。工作流管理系统可以跟踪哪些变更需要批准以及哪些变更已经被批准。因此,数据实体实例可以与所有先前提交的变更已经被批准的工作流状态(有时称为“已发布”或“已批准”工作流状态)、先前提交的变更中的一个或多个尚未被批准的工作流状态(有时称为“未决”或“未决批准”工作流状态)、或视情况而定的任何其他工作流状态相关联。更复杂的工作流管理系统可能有其他状态,这取决于实施变更管理的方式。可以如何实施工作流管理系统的各方面在于2020年1月22日提交的名称为“Finite State Machines for Implementing Workflows for Data Objects Managed bya Data Processing System[用于实施由数据处理系统管理的数据对象的工作流的有限状态机]”的美国专利申请公开号2020/0234242中进行了描述,该美国专利申请通过援引以其全文并入本文。
然而,不管如何实施工作流管理系统的细节,在一些实施例中,数据实体可以与对应的工作流状况(例如,工作流状态)相关联,并且用于标识数据实体实例的条件(例如,如在声明性查询的标识部分中明确表达的和/或在处理声明性查询时由数据处理系统隐式应用的)可以指定基于该工作流状况来选择数据实体实例。例如,条件可以指定选择具有特定工作流状态(例如,“已发布”、“未决批准”等)的数据实体实例,选择在阈值时间段内或在指定范围内已被更新(例如,从“未决批准”状态移动到“已批准”状态)的那些数据实体实例,或者以任何其他合适的方式基于数据实体实例的工作流状况来选择数据实体实例,因为本文所描述的技术的各方面在这方面不受限制。例如,如图4C所示,声明性查询410使用“查询视图类型”参数418指示当处理标识部分411时,仅应选择“已发布”的数据实体实例(并且因此,不选择与仍在等待批准的变更相关联的任何数据实体实例)。
在一些实施例中,数据实体实例可以被“版本化”,因为当对数据实体实例做出变更时,经修改的数据实体实例被存储为数据实体实例的新版本,并且数据实体实例的先前版本被保存。在一些这样的实施例中,声明性查询的标识部分可以用于选择数据实体的最新版本、由数据处理系统保存的数据实体的一个或多个先前版本、指示数据实体的当前版本与一个或多个先前版本之间的变化的值、和/或关于当前和/或保存的数据实体实例的任何其他合适的信息。
从前述内容可以理解,存在可以作为声明性查询的标识部分的一部分被包括在内以指示要选择哪些数据实体实例的丰富条件集。由本发明人开发的技术提供了表达这种条件的不同方式。例如,在一些实施例中,声明性查询的标识部分可以使用结构化查询语言(SQL)查询来指定要选择的数据实体实例。作为另一个示例,在一些实施例中,声明性查询的标识部分可以使用所谓的“过滤表达式”语法来指定要选择的数据实体实例。作为又另一个示例,在一些实施例中,声明性查询的标识部分可以使用与数据实体实例相关联的字母数字(或数字或字母)标识符来指定要选择的数据实体实例。当那些字母数字标识符已经可访问时(例如,在创建或更新数据实体实例之后),该第三选项可以适用。作为又另一个示例,在数据处理系统利用一个或多个搜索索引来访问数据实体实例的一些实施例中,如以下在称为“使用一个或多个搜索索引检索数据”的章节中描述的,声明性查询的标识部分可以指定要使用搜索字符串来选择的数据实例。
在一些实施例中,声明性查询的标识部分可以使用SQL查询来指定数据实体实例。例如,SQL查询可以使用符合ANSI SQL标准(例如,任何过去、当前或未来版本)的任何合适的语法和/或命令。在一些实施例中,SQL查询可以符合与ANSI SQL标准一致的任何供应商特定的SQL实施方式(例如,MySQL、Oracle、PostgreSQL、Teradata等的实施方式)。在一些实施例中,SQL查询可以使用ANSI SQL标准的严格子集(即,一些但不是全部语法和/或命令)部分。表1中的SQL查询是可以包括在声明性查询的标识部分中的SQL查询的一个示例。
表1:用于选择作为称为“财务”业务项的(分类组的一部分的数据实体‘业务项’的所有实例的SQL查询”。该SQL查询可以被用作声明性查询的标识部分的一部分。
本文(包括在图4D、图9C以及图9F-1和图9F-2中)提供了在声明性查询的标识部分中使用的SQL查询的附加示例。
在一些实施例中,声明性查询的标识部分可以使用所谓的“过滤表达式”语法来指定要选择的数据实体实例。在一些实施例中,过滤表达式可以包括SQL“WHERE”子句。另外,与符合ANSI SQL标准的SQL查询不同,过滤表达式可以包括所谓的“实体模型”路径,其允许使用符合使用点符号的实体模型的字符串来访问值,该符号有时以面向对象编程语言使用。例如,点符号可以用于遍历数据实体模型中的数据实体关系(例如,根据图2G所示的ERD中的关系)。下表2示出了使用过滤表达式语法选择数据实体实例的示例。该过滤表达式用于选择“业务项”数据实体的实例,该数据实体的名称以字母“A”开头,并且属于称为“企业业务项表”的业务项组。在该示例中,“业务项组名称”是实体模型路径。
表2:声明性查询的标识部分使用“过滤表达式”语法来标识“业务项”数据实体的实例,该数据实体的名称以字母“A”开头,并且属于“企业业务项表”业务项组。
本文(包括在图4A、图4C、图5A和图8B中)提供了在声明性查询的标识部分中使用的过滤表达式的附加示例。
如本文所描述的,数据实体可以彼此相关。例如,数据实体实例的属性本身可以引用其他数据实体实例(例如,数据属性的值可以是对另一个数据实体实例的引用)。并且那些其他数据实体实例中的一个或多个也可以具有引用其他数据实体实例的属性。以此类推。因此,数据实体实例可以与属性的层次相关联,并且在一些实施例中,可以使用单个声明性查询来获得这种层次中的一些或全部属性的值。从这个意义上说,声明性查询可以被认为是分层的。
因此,在一些实施例中,声明性查询可以遍历相关实体及其属性,以允许在单个请求中检索大量相关数据。为此,在一些实施例中,声明性查询的丰富部分包含标识感兴趣的相关数据实体的一个或多个属性的信息,使得可以通过处理声明性查询(例如,针对使用同一声明性查询的标识部分标识的数据实体实例)来获得该一个或多个属性的值。
丰富部分可以以多种方式中的任何方式来指示感兴趣的属性。例如,在一些实施例中,该指示在声明性查询的丰富部分中可以是显式的,并且可以例如使用如本文(包括参考图4D至图4F和图9A至图9G)所描述的嵌套来指定。作为另一个示例,在一些实施例中,可以无需在声明性查询中明确地陈述属性的层次而是通过依赖递归来作出该指示,如本文(包括参考图8A至图8C)所描述的。
图4D中示出了分层声明性查询的一个示例,该图是根据本文所描述的技术的一些实施例的指定响应于处理声明性查询而返回其值的属性的层次的声明性查询420的图。声明性查询420包括标识部分421,该标识部分包含用于选择“名称”属性采用值“cust_dwh”的数据实体“技术组(TechGroup)”的实例的SQL查询。
声明性查询420还包括使用嵌套来指定要检索其值的属性的层次的丰富部分422。在该示例中,“技术组”数据实体的实例可以引用一个或多个“数据集”数据实体实例的列表,并且丰富部分422指示,对于每个标识的“技术组”数据实体实例,将检索每个特定数据集数据实体实例(由特定“技术组”数据实体实例引用)的标识信息和名称。
图4E展示了响应于处理图4D所示的声明性查询420而返回的示例结果430。值得注意的是,结果430包括关于嵌套的实体实例的信息。特别地,结果430包括关于“技术组”数据实体的单个实例的信息,这些信息包括:(1)标识信息431;(2)其名称属性432的值;以及(3)关于由“技术组”数据实体的单个实例引用的两个“数据集”数据实体实例的信息。关于两个“数据集”实例的信息在嵌套结果434和436中示出。对于每个“数据集”实例,返回的信息包括关于实例的标识信息(例如,实体类、标识名称、显示名称、实体类型和复合ID值)以及“名称”属性的值。在该示例中,结果434和436中的“名称”属性的值分别是“CUSTOMER_INFO”和“DEPOSIT_ACCOUNT”。
在一些实施例中,通过处理声明性查询生成的结果可以以与声明性查询中指定的属性层次相对应的分层格式来格式化。例如,从图4D和图4E的示例中可以看出,图4E所示的结果430的分层结构与图4D的声明性查询420的丰富部分422所示的嵌套的分层结构匹配(并因此相对应)。以这种方式,声明性查询不仅用于从一个或多个数据存储(例如,从数据持久层150)获得数据,而且还用于将数据置于适当的格式以供输出。例如,通过处理声明性查询检索的数据可以存储在关系数据库中的一个或多个表中。然而,在被检索之后,声明性查询的分层结构可以(例如,被参考图1D所描述的分层输出模块167)用于以与声明性查询的丰富部分的分层格式匹配的分层格式重新组织数据并以该格式输出。
在一些实施例中,可能期望不返回与所有相关数据实体实例相关联的值。例如,可能只是有太多的相关数据实体实例。在这种情况下,可以通过对所返回结果的数量施加数字限制来限定结果(例如,如图4C所示)。作为另一个示例,可以通过在声明性查询的丰富部分的嵌套结构内使用过滤表达式或SQL语句来过滤结果。例如,如图4F所示,可以用过滤表达式442增强图4D的声明性查询420以获得声明性查询440,以便通过仅返回那些“应用名称=‘反馈’”的实例来减少所返回的“数据集”实体实例的数量。
如本文所描述的,声明性查询包括标识部分和丰富部分,并且为了处理声明性查询:(1)标识部分被转换成一个或多个可执行SQL查询(在本文中有时被称为“一个标识查询”或“多个标识查询”);(2)丰富部分被转换成一个或多个可执行SQL查询;(3)执行所有可执行SQL查询以获得相应的结果(在本文中有时被称为“一个丰富查询”或“多个丰富查询”),这些结果被(4)组合并且可选地(例如,分层地)格式化以生成对声明性查询的响应。图5A至图5F展示了该过程的一些方面。
图5A是展示了根据本文所描述的技术的一些实施例的包括标识部分和丰富部分的示例声明性查询502的图。声明性查询502包括标识部分504和丰富部分506。标识部分504指示名称以“A”开头的“业务项”数据实体的实例将在处理标识部分504时被标识。丰富部分506指示,对于使用标识部分504标识的每个数据实体实例,将检索关于“名称”、“描述”、“业务项类型”和“数据元素”属性的信息。在该示例中,“名称”和“描述”是静态属性,而“业务项类型”和“数据元素”是引用属性。
图5B是展示了根据本文所描述的技术的一些实施例的可以由数据处理系统通过处理图5A所示的声明性查询502来生成的可执行SQL查询的图。特别地,如图5B所示,可以对标识部分504进行处理以生成用于标识名称以“A”开头的“业务项”数据实体实例的可执行SQL查询510。单独地,可以对丰富部分506进行处理以生成:(1)用于获得名称属性值的可执行SQL查询512;(2)用于获得描述属性值的可执行SQL查询514;(3)用于获得“业务项类型”属性值的可执行SQL查询516;以及(4)用于获得“数据元素”属性值的可执行SQL查询518。通过执行SQL查询510获得的结果可以包括所标识的数据实体实例的(例如,数字)标识符,并且这些标识符可以用于组合执行所有可执行SQL查询510、512、514、516和518的结果。如本文所描述的,在一些实施例中,可以使用执行可执行SQL查询(例如,该示例中的查询510)的结果来执行(并且可选地生成)使用丰富部分生成的可执行SQL查询,以标识感兴趣的数据实体实例(在该示例中为名称以“A”开头的数据实体实例)。
应当理解,尽管在该示例中,使用单个可执行SQL查询来获得每个属性的值,但是在一些实施例中,可以使用多于一个SQL查询或可执行SQL语句的任何其他合适的组合来获得一个或多个属性的值,因为本文所描述的技术的各方面在这方面不受限制。
还应当理解,在一些实施例中,可以使用单个可执行SQL查询来检索多个不同属性的值。这可以高效地处理声明性查询(例如,当不同的属性值存储在同一表中、属于相同类型、存储在同一存储介质上等时),从而减少用于处理查询的计算资源量(例如,处理器周期、存储器、网络带宽)。本文(包括参考图5D和图6A至图6F)提供了使用单个可执行SQL查询来检索多个不同属性的值的示例。
回到图5A和图5B的示例,并且为了提供关于该示例的进一步细节,考虑了示出了使用声明性查询502的标识部分504生成的可执行SQL查询510的说明性示例的图5C。可执行SQL查询510可以以任何合适的方式生成,包括例如本文(包括参考图7A至图7C)所描述的方式。可执行SQL查询510可以是用于从特定类型的关系数据库获得数据的可执行数据库特定SQL查询。表520中示出了执行该示例查询的结果,该表示出了通过处理可执行SQL查询510标识的“业务项”数据实体实例的标识符(即,1024、1043、1053、1087、1103、1008、1197)。
图5D示出了使用声明性查询502的丰富部分506生成的可执行SQL查询530的说明性示例,该查询在被执行时获得使用可执行查询510标识的并且其标识符在图5C中示出的每个“业务项”数据实体实例的“名称”和“描述”属性的值。所得值在表532中示出,该表具有针对每个数据实体实例标识符的行和针对这两个属性中的每一个的列。在可执行SQL查询530中,“Tqt.BizTermID0”引用作为执行图5C所示的SQL查询510的结果而获得的“业务项”数据实体实例。
尽管有可能使用单独的可执行SQL查询512和514来获得“名称”和“描述”属性的值,但在图5D的示例中,使用了单个SQL查询530,因为在该示例中这两个属性的值存储在同一表中。如本文(包括以下参考图6A至图6F)所描述的,在属性值存储在同一表中(或者通过使用单个查询而不是多个查询来访问数据可以获得其他效率)的一些实施例中,单个可执行SQL查询可以用于访问属性值而不是多个SQL查询。然而,也可以使用单独的查询;这种查询的示例在下表3和表4中示出。
表3:用于获得其标识符在图5C中示出的每个“业务项”数据实体实例的“名称”属性的值的示例可执行SQL查询512。
表4:用于获得其标识符在图5C中示出的每个“业务项”数据实体实例的“描述”属性的值的示例可执行SQL查询514。
图5E示出了使用声明性查询502的丰富部分506生成的可执行SQL查询516的说明性示例,该查询在被执行时获得使用可执行查询510标识的并且其标识符在图5C中示出的每个“业务项”数据实体实例的业务项类型属性的值。执行可执行SQL查询516的结果在表536中示出。表536包括图5C所示的每个实体实例标识符的行。业务项类型属性引用另一数据实体实例,并且其属性中的至少一些的值在表536的列中示出。
图5F示出了使用声明性查询502的丰富部分506生成的可执行SQL查询518的说明性示例,该查询在被执行时获得使用可执行查询510标识的并且其标识符在图5C中示出的每个“业务项”数据实体实例的数据元素属性的值。执行可执行查询518的结果在表538中示出。表538包括图5C所示的每个实体实例标识符的行。数据元素属性引用另一数据实体实例,并且其属性中的至少一些的值在表538的列中示出。
从图5C至图5F的示例中可以理解,在一些实施例中,可以使用数据实体实例标识符520来组合作为处理各种可执行SQL查询的结果而获得的数据,因为在丰富部分506中请求的每条数据都与指示与其相关联的数据实体实例的相应标识符相关联。数据可以以任何合适的方式组合。例如,数据可以被组合到单个表中。作为另一个示例,数据可以被格式化以用于分层呈现。作为又另一个示例,数据可以以任何合适的格式被写入文件或其他数据库系统,因为本文所描述的技术的各方面在这方面不受限制。
优化丰富查询的执行
临时表和公共表表达式
在一些实施例中,通过执行标识和丰富SQL查询生成的结果可以使用表进行组合。例如,在一些实施例中,通过执行标识SQL查询获得的数据实体实例标识符(例如,上述数据实例标识符520)可以被插入到临时表中,然后临时表可以与使用丰富SQL查询获得的至少一些(例如,所有)数据连接。进而,所得表中的数据(在连接之后)可以以任何合适的方式格式化,并以本文所描述的任何方式输出。
在一些实施例中,在仅访问关于单个数据实体及其直接性质的信息的情况下(例如,没有请求关于由单个数据实体引用的任何其他数据实体的信息),可以使用公共表表达式来获得所请求的数据,而不是使用单独的标识和丰富查询以及使用临时表来连接结果。这种公共表表达式的一个示例在下表5中示出。
表5:用于获得关于单个数据实体及其直接性质的信息的可执行SQL查询
旋转
如上所述,在对从声明性查询的丰富部分生成的不同可执行SQL查询进行处理以获得相应结果之后,这些结果可以被组合。回想一下,不同的可执行丰富查询可以用于访问存储在不同数据库表中的值。访问存储在不同表中的值并且然后合并其值的常规方法是:(1)连接数据库内的表(例如,通过使用SQL‘连接’命令来连接表)以获得连接的表;以及(2)读取连接的表的期望部分。然而,本发明人认识到这种方法在当前环境下极其低效(在处理和内存要求方面),因为数据实体实例具有许多动态属性,其中许多属性存储在不同的表中。因此,每次要执行查询时,处理许多声明性查询都将需要连接数十个(例如,至少10个、至少20个、至少30个、10个至50个)表,这是极其低效的。作为示例,数据实体具有至少20个动态属性并不少见,如果要将动态属性的值与存储动态属性值表的数据库组合,则需要执行至少同样多的连接。
下表5示出了使用SQL执行旋转的复杂性的示例。表5包括用于访问多个属性的变量的SQL语句(在该示例中为“扩展属性”类型)。每个属性都需要左外连接,因此只有两个这种属性的SQL如下表6所示。生成和执行这种代码是极其低效的,因为它需要在存储属性值的数据库内构造大型中间表。这需要很长时间(因此执行查询将需要更长时间)并消耗大量内存。
表6:SQL中旋转的说明性示例。
另一方面,通过针对不同属性生成和执行多个不同的可执行SQL查询来处理声明性查询的丰富部分,允许属性值在从存储这些属性值的(多个)数据库被访问之后被组合。这避免了例如通过连接存储表的数据库内的大量表在SQL中执行旋转的需要。
因此,在一些实施例中,通过处理不同的可执行SQL丰富查询获得的属性值可以通过在从其所保存的(多个)数据库访问这些数据之后对这些数据进行处理来组合。在一些实施例中,可以通过使用以Java或任何其他编程语言编写的软件旋转数据来执行组合,而无需调用任何SQL语句(例如,用于连接表的SQL命令)以供从中访问数据的(多个)数据库系统处理。简单地说,这些结果可以在将使用常规方法在数据库系统内执行的任何SQL处理的外部进行组合。当访问多个动态变量的值时,每个查询的结果包括名称-值对的行,这些行可以转变成存储数据实体实例的属性值的表的列。
图5G是展示了根据本文所描述的技术的一些实施例的在不使用SQL的情况下旋转SQL查询结果的图。如图5G所示,可以通过使用Java软件或任何其他软件程序(而不是SQL命令,并且不连接存储属性的表)旋转546来组合通过执行不同的丰富查询获得的结果542和544,以获得结果548。在该示例中,从每个查询获得的结果包括许多行,这些行被Java软件转变成实体实例的列,如结果548所示。
访问属性组的属性值
如本文所描述的,本发明人已经认识到,当使用更少的可执行查询(例如,可执行SQL查询或任何其他合适类型的可执行查询)来获得属性值时,可以更高效地处理声明性查询。例如,当某些属性值存储在公共表中时,针对存储该表的数据库执行单个查询来检索属性值比针对同一表执行多个查询更高效。上文参考图5C描述了这种情况的示例。下文(包括参考图6A至图6F)描述了进一步的示例。
图6A和图6B都示出了声明性查询的丰富部分600。在该示例中,丰富部分指示要检索关于四个属性(属性#1-4)的信息。图6A示出了针对这四个属性中的每一个生成相应可执行SQL查询。特别地,生成可执行SQL查询602、604、606和608以分别获得属性1、2、3和4的值。然而,在该示例中,属性2和3是相同的类型(类型B),这意味着使用单个查询而不是多个查询来访问这些属性可能更高效,例如,因为这些属性的值存储在同一底层表中。例如,属性2和3可以都是“扩展属性”或“分类”类型。本文(包括参考图2A至图2B)描述了这两种属性类型和其他属性类型。如图6B所示,可以生成单个可执行SQL查询605来获得属性2和3的值,并且代替单独的可执行SQL查询604和606来使用。
因此,在一些实施例中,处理声明性查询的丰富部分以生成可执行SQL查询来获得关于在丰富部分中标识的属性的信息包括:(1)将丰富部分中的属性分组为组;以及(2)针对多个组中的每一组生成相应可执行查询。
在一些实施例中,具有相同类型的属性可以被分组为公共组。例如,在一些实施例中,可以对“扩展属性”类型的(在丰富部分中标识的)动态属性进行分组,并且可以生成单个可执行SQL查询以获得该组中属性的信息。作为另一个示例,在一些实施例中,可以对“分类”类型的(在丰富部分中标识的)动态属性进行分组,并且可以生成单个可执行SQL查询以获得该组中属性的信息。作为另一个示例,在一些实施例中,可以对“层次”类型的(在丰富部分中标识的)动态属性进行分组,并且可以生成单个可执行SQL查询以获得该组中属性的信息。作为又另一个示例,在一些实施例中,可以对“责任方”类型的(在丰富部分中标识的)动态属性进行分组,并且可以生成单个可执行SQL查询以获得该组中属性的信息。
例如,如图6C-1所示,声明性查询610包括标识部分612和丰富部分614,该丰富部分指示关于各种类型的属性的信息将被访问,包括关于“名称”静态属性620和以下动态属性的信息:“x敏感性”、“x组”、“x区域”、“x业务范围”、“x附加定义”、“x遗留系统URL”、“xSME”和“x管理员”。尽管这些动态属性中的一些是相同类型,但是图6C-1示出了针对每个动态属性生成单个可执行SQL查询。
然而,在一些实施例中,数据处理系统可以确定这些动态属性中的一些是相同类型的。例如,如图6C-2所示,数据处理系统可以确定属性“x敏感性”和“x组”具有“分类”类型并且可以分组在组622中,属性“x区域”和“x业务范围”是“层次”类型并且可以分组在组624中,属性“x附加定义”和“x遗留系统URL”是“扩展属性”类型并且可以分组在组626中,并且属性“xSME”和“x管理员”是“责任方”类型并且可以分组在组628中。进而,可以针对具有相同类型的每组动态属性生成单个可执行SQL查询。可以针对所有静态属性生成单个可执行SQL查询(此处在组620中只有一个静态属性“名称”)。
因此,如图6C-3所示:(1)可以针对“分类”类型的属性组622生成单个可执行SQL查询623,该组包括“x敏感性”和“x组”动态属性;(2)可以针对“层次”类型的属性组624生成单个可执行SQL查询625,该组包括“x区域”和“x业务范围”动态属性;(3)可以针对“扩展属性”类型的属性组626生成单个可执行SQL查询627,该组包括“x附加定义”和“x遗留系统URL”动态属性;并且(4)可以针对“责任方”类型的属性组628生成单个可执行SQL查询629,该组包括“xSME”和“x管理员”动态属性。另外,针对静态属性组621生成单个可执行SQL查询621。
通过举例,图6D示出了用于获得关于“x区域”和“x业务范围”层次的信息的说明性单个可执行SQL查询630——这两个层次由如图6D所示的相应标识符632和634(层次ID)来表示,这表明了使用相同的可执行SQL查询来检索关于这两个动态属性的信息。
作为另一个示例,在一些实施例中,其值存储在同一表中的属性可以被分组为到公共组中,并且可以生成单个可执行SQL查询以获得该组中的属性。作为另一个示例,在一些实施例中,其值存储在同一设备和/或同一计算机可读存储介质上的属性可以被分组到公共组中,并且可以生成单个可执行SQL查询以获得该组中的属性。
作为又另一个示例,在一些实施例中,共享公共继承路径的动态变量可以被分组在一起。接下来参考图6E和图6F对此进行更详细的描述。
在一些实施例中,数据实体的动态属性可以从另一个数据实体的对应属性继承其值。例如,如图6E所示,数据实体650可以包括静态属性652和动态属性654。在动态属性654中,属性“A、B、C”656被配置成从数据实体660的对应动态属性664继承其值,如公共继承路径657所指示的。也就是说,当属性被配置成从相同的其他数据实体或数据实体实例的属性继承其值时,数据实体或数据实体实例的属性共享公共继承路径。属性“X”、“Y”、“Z”658被配置成继承数据实体670的对应动态属性674的值。因此,响应于对数据实体650的动态属性654的值的查询,需要获得属性664和属性674的值。由于变量A、B和C沿着公共继承路径657(例如,从相同的数据实体660)被继承,因此单个可执行SQL查询可以用于访问这些变量的继承值。图6F中的查询682是这种查询的示例。类似地,由于变量X、Y和Z沿着公共继承路径(例如,从相同的数据实体670)被继承,因此单个可执行SQL查询可以用于访问这些变量的继承值。图6F中的查询684是这种查询的示例。
批处理和流式查询执行,限制返回结果的范围
如本文所描述的,响应于处理声明性查询而返回的数据实体实例的数量可能很大。例如,响应于处理声明性查询而可能返回的数据实体实例的数量可以是至少100个实体实例、至少500个实体实例、至少1000个实体实例、至少5,000个实体实例、至少10,000个实体实例、至少25,000个实体实例、至少50,000个实体实例、至少100,000个实体实例、至少250,000个实体实例、1,000个至10,000个实体实例、5,000个至1百万个实体实例,或这些范围内的任何其他合适的范围。为如此大量的数据实体实例生成和输出结果以及其属性值给数据处理系统带来了巨大的计算负担——必须从一个或多个数据存储中检索大量数据并在输出之前对其进行处理。
本发明人已经认识到,在处理声明性查询时限制由数据处理系统执行的处理可能是有帮助的,因为在一些情况下,在没有任何这种限制的情况下,由数据处理系统返回的数据实体实例的数量很大,这导致了数据处理系统上的计算负担,实质上加重了其处理器、存储器和/或网络资源的负担。当计算机程序或用户输入声明性查询以进行处理而没有意识到要返回如此多的数据和/或实际上不需要使用全部结果时,这种功能可能尤其重要。
因此,实体API提供了用于在处理声明性查询时限制由数据处理系统执行的处理量的多种机制。一种这样的机制是声明性查询可以明确地指定对要返回的全部结果的数量的数字限制。该限制可以全局设置,或关于声明性查询的特定部分局部设置。在图4C中示出了对所返回的数据实体实例的总数设置全局限制的示例,其中,在行414中,要返回的数据实例的总数被限制为5,000)。
作为另一个示例,在一些实施例中,结果可以是具有多个级别的层次,并且声明性查询可以指定在层次中的每个级别返回的数据实体实例的数量被限制为结果的阈值数量。例如,下表7所示的声明性查询指示在查询的每个级别返回不超过两个数据实体实例。
表7:指定在分层结果的每个级别返回的实体实例数量限制的声明性查询。
表8示出了对表7的声明性查询进行处理的结果。注意,结果仅包括两个数据实体实例,并且还指示更多的结果可用(因为“超过最大行数(exceededMaxRows)”指示符被设置为“真”)。
表8:处理表7所示的声明性查询的结果。
在一些实施例中,当声明性查询是层次化的时,可以在声明性查询的层次的不同级别指定不同的数量限制,例如,如下表9所示。处理这种声明性查询的结果可以指示在层次的每个级别(例如,在属性级别)是否达到了数据实体实例限制。
表9:指定查询内不同级别的数量限制的声明性查询。
本发明人已经认识到,处理声明性查询(如上表9所示的声明性查询)可能导致不平衡的结果,因为通过选择集合属性(例如,数据元素实体的集合)并在该(子)级别指定“最大行数”选项的值,在处理下一个父实例之前,每个父实例(从第一个开始)完全被子实例填充。一旦满足子级别的“最大行数”选项的值,响应中就不再包括子实例。例如,假设有三个数据集实例可以通过处理表9中的声明性查询来标识,并且第一数据集实例将包括三个数据元素,第二数据集实例将包括一个数据元素,并且第三数据集实例也将包括一个数据元素。在这种情况下,结果将包括第一数据集实例的三个数据元素实例,这将耗尽数据元素级别允许的行数(如通过“最大行数=3”选项设置)。因此,对于第二和第三数据集实例,不会返回任何数据元素实例。
为了在父实例之间更均匀地分布子实例,实体API允许指定父实例的每个实例的子行数。如表10的示例所示,可以使用“集合最大行数(collectionMaxRows)”选项来限制每个父实例的子行数,同时总行数限制仍然适用。通过处理表10中所示的声明性查询而生成的结果将包括每个数据集实例实体的数据元素实体的一个实例。
表10:限制每个父实例的子行数的声明性查询。
用于在处理声明性查询时限制由数据处理系统执行的处理量的另一种机制是,在一些实施例中,可以用“流式”或“阶段性”方法而不是用“批处理”方法来处理声明性查询。在批处理方法中,通过处理声明性查询的标识部分而标识的所有数据实体实例可以用其属性值来丰富并返回,如以上所讨论的,当所标识的数据实体实例的数量很大时,这可能给数据处理系统带来很大的计算负担。相比之下,在一些实施例中,可以使用流式方法来处理声明性查询,由此声明性查询的标识部分可以用于标识感兴趣的数据实体实例(例如,5,000个数据实体实例),但是这些实例可以被阶段性地(例如,以500个为一组)丰富和输出,以:(1)降低数据处理系统在每个阶段的处理要求;以及(2)在一个或多个阶段完成之后,当不请求或不需要来自那些阶段的结果时,提供取消执行一个或多个后续阶段的机会。在一些实施例中,在以流式方法返回一组结果之后,直到请求者(例如,提交声明性查询并接收结果的用户或计算机软件)提供指示请求附加结果的输入之后才确定和/或返回下一组结果。
作为一个非限制性示例,假设处理声明性查询将导致标识大量的数据实体实例。这种声明性查询的处理可以如下执行:(1)使用声明性查询的标识部分生成可执行(例如,SQL)查询,并执行该查询以标识感兴趣的数据实体实例(例如,5000个数据实体实例);(2)针对所标识的数据实体实例的第一子集(例如,前500个数据实体实例)生成一个或多个可执行查询以获得子集中的实例的属性值,并执行所生成的查询以获得属性值;(3)组合这些查询的结果并将其输出(例如,输出前500个数据实体实例的结果),可选地将其连同附加结果可用的指示一起输出;(4)接收请求附加结果的指示(例如,来自提交声明性查询的用户或计算机软件);(5)针对所标识的数据实体实例的第二子集(例如,数据实体实例501-1000)生成一个或多个可执行查询以获得第二子集中的实例的属性值,并执行所生成的查询以获得属性值;(3)组合这些查询的结果并将其输出(例如,输出数据实体实例501-1000的结果),可选地将其连同附加结果可用的指示一起输出。诸如此类,直到没有附加结果被请求或者没有附加结果可用。
在一些实施例中,在每个阶段返回的结果的数量可以通过可配置参数来设置,对于整体的实体API进行全局设置,或者对于特定的声明性查询(例如,在特定的声明性查内)进行局部设置。
这种用于阶段性地获得和返回结果的流式架构部分地通过实体API所处理的声明性查询的结构来实现。特别地,使声明性查询的标识部分与声明性查询的丰富部分分开处理使得能够首先通过生成和执行一组一个或多个“标识”查询来标识数据实体实例,并基于是否请求和/或需要附加结果来阶段性地(通过生成和执行一个或多个“丰富查询”)检索这些数据实体实例的值。
使用一个或多个搜索索引检索数据
在一些实施例中,本文所描述的声明性查询的处理可以通过使用一个或多个搜索索引来加速。特别地,在一些实施例中,所配置的数据处理系统可以被配置成维护一个或多个搜索索引,使得数据处理系统的用户和/或与数据处理系统接合的计算机程序可以输入文本搜索字符串以找到感兴趣的数据(例如,数据实体实例、数据实体定义等)。
在一些实施例中,这样的一个或多个搜索索引可以由存储数据实体实例的数据库系统(例如,RDBMS,如ORACLE、SQL SERVER、DB2、MONGODB、POSTGRES等)外部的数据处理系统(例如,数据处理系统105)维护。以这种方式,一旦通过查询数据库系统建立了一个或多个搜索索引,数据处理系统就可以使用一个或多个搜索索引来检索期望的数据实体实例(及其属性值),而无需再次处理相同的查询,从而节省了大量的计算并更快地检索结果。因此,本文所描述的一个或多个搜索索引不同于存储数据实体实例的数据库系统内部的任何搜索索引。此外,与内部搜索索引不同,本文所描述的一个或多个搜索索引是帮助用户输入文本搜索字符串来找到感兴趣的数据的文本搜索索引。
作为一个示例,用户可以提供搜索字符串“生日”作为输入,并且数据处理系统可以被配置成使用搜索索引返回如下数据:(1)数据实体“业务项”的实例,其中,字符串“生日”至少是其属性值(例如,“名称”或“描述”属性)之一的一部分;(2)数据实体“数据元素”的实例,其中,字符串“生日”至少是其属性值之一的一部分;以及(3)引用(例如,其属性之一的值中的)生日的数据实体“数据集”的实例。
在一些实施例中,这样的搜索索引可以用于促进和加速声明性查询的处理。例如,在一些实施例中,声明性查询的标识部分可以指定用于标识引用“生日”的任何数据实体实例的搜索字符串(例如,“生日”),并且搜索索引可以用于标识任何这样的数据实体实例,而不是生成可执行(例如,SQL)查询并针对一个或多个数据库执行该查询。然后,可以使用本文所描述的技术(例如,通过生成一个或多个用于丰富的可执行查询)来丰富使用搜索索引检索的数据实体实例。以这种方式,通过使用搜索索引而不是执行数据库查询,对声明性查询的标识部分的处理可以显著加速,从而减少总处理时间,并减少所利用的计算资源(例如,处理器、存储器、网络资源)的量。
表11中示出了具有可以通过使用搜索索引来处理的标识部分的声明性查询的示例。该示例声明性查询使用“实体搜索(entitySearch)”选项来指定搜索字符串“生日”,并且该查询总体上是为了识别包含搜索字符串“生日”的任何数据实体实例,并且用“名称”和“描述”属性的值来丰富结果。注意,该查询是全局的,因为其搜索不同类型的数据实体的实例(例如,“业务项”、“数据集”、“数据元素”等),而不是搜索仅一种类型的数据实体的实例。尽管如果只对一种类型的数据实体感兴趣(例如,“业务项”),通过添加选项“实体类”可以使查询在这方面更加具体:如本文所描述的其他示例中的“业务项”。
表11:具有通过使用搜索索引而不是可执行查询来指定要处理的搜索字符串的标识部分的声明性查询。
表11所示的示例声明性查询可以通过以下各项来处理:(1)使用一个或多个搜索索引标识一个或多个感兴趣的数据实体实例;(2)将结果存储在临时表中;以及(3)通过生成一个或多个可执行查询来丰富结果,以获得属性“名称”和“描述”的值。在一些实施例中,第一步可以涉及在返回数据之前考虑所请求的视图类型和/或用户权限。第三步可以以本文所描述的任何方式执行,以获得动态属性的值。
当然,用于标识数据实体实例的搜索索引必须在用于处理这种声明性查询之前创建。搜索索引可以以任何合适的方式创建。例如,在一些实施例中,数据处理系统可以被配置成使用任何合适的搜索引擎软件库,例如,APACHE LUCENE。数据处理系统可以被配置成使用该库来生成搜索索引。在一些实施例中,数据处理系统可以被配置成(例如,周期性地、根据预定义的时间表等)更新搜索索引。在一些实施例中,数据处理系统可以被配置成生成一个或多个搜索引擎索引,并且该一个或多个索引可以用于处理声明性查询,因为本文所描述的技术的各方面不受所利用的搜索索引的数量限制。
在一些实施例中,为了使用搜索软件(例如,APACHE LUCENE)创建一个或多个搜索索引,搜索软件需要配置有指示哪些数据实体和属性将被索引以用于搜索的信息。这允许通过使用搜索索引检索索引属性的值而不是执行数据库查询(例如,SQL查询)以检索这些值来更进一步地优化对声明性查询的处理。例如,如果数据实体具有三个属性(例如,“名称”、“描述”、“业务范围”),其中两个属性(例如,“名称”和“描述”)被索引以用于搜索,则搜索索引可以用于在处理对该数据实体的实例的声明性查询时检索这两个属性的值,而不是针对数据库生成和执行SQL或其他类型的可执行查询,这将导致显著的加速。第三属性的值仍然可以被检索(例如,通过使用SQL查询来查询关系数据库)。
如关于表11的示例声明性查询所陈述的,该声明性查询搜索数据处理系统内所有不同类型的数据实体。因此,结果可以包括不同类型的数据实体的实例(例如,不同实体类的实例),如“业务项”数据实体的实例和“数据元素”数据实体的实例。不同的数据实体可能具有一些共同的属性(例如,“名称”),但是通常不同的数据实体具有不同的属性。为了允许在这种情况下进行丰富,声明性查询可以允许在响应中明确地断言数据实体的实体类(使用下表12中示出的“实体类选择(entityClassSelect)”符号),然后用特定于该实体类的属性对其进行丰富。下表12的声明性查询中示出了这种情况的一个示例,其中,标识部分指示将检索引用“生日”的任何数据实体实例,但是这在这些数据实体实例被标识以获得以下各项之后进行:(1)数据实体“业务项”的任何经标识实例的属性“名称”、“描述”和“业务项组”的值;(2)数据实体“数据元素”的任何经标识实例的属性“名称”、“描述”和“数据集”的值;以及(3)属性“名称”、“描述”和“技术组”的值。
表12:具有一般弱引用的声明性查询
生成可执行查询
从声明性查询生成可执行查询的优选方面在本节中进一步描述,并且可以彼此组合以及与上述内容组合。如本文所描述的,声明性查询的标识部分可以用于生成可执行查询(例如,可执行SQL查询)以标识感兴趣的数据实体实例。类似地,声明性查询的丰富部分可以用于生成一个或多个可执行查询(例如,一个或多个可执行SQL查询)以获得感兴趣的属性值。
可以根据图7A所示的过程700来生成可执行的标识和丰富查询。过程700可以用于使用在声明性查询的标识部分中指定的信息来生成可执行查询以标识感兴趣的数据实体实例。例如,过程700可以用于使用在声明性查询502的标识部分504中指定的信息来生成可执行SQL查询510。
过程700可以用于使用在声明性查询的丰富部分中指定的信息来生成可执行查询以获得感兴趣的属性值。由于丰富部分可以用于生成多个可执行查询(例如,针对不同的属性或不同的属性组,这些组可以使用本文所描述的任何分组技术来获得),因此过程700可以使用丰富部分的不同部分应用多次,以生成多个可执行(例如,SQL)查询。例如,过程700可以用于使用在声明性查询502的丰富部分506中指定的信息来生成可执行查询512、514、516、518和/或530。
过程700可以由任何合适的(多个)计算设备来执行。过程700可以由在数据处理系统(例如,数据处理系统105)上执行的任何合适的软件来执行。例如,参考图1D所示的数据处理系统105,过程700可以通过使用输入变换模块130来执行(例如,以执行下文描述的动作702、704、706和708)。
在一些实施例中,过程700可以被用于从声明性查询生成多个可执行查询的过程调用多次。例如,如上文参考图3所描述的,在一些实施例中,过程300可以一次或多次调用过程700。例如,过程300可以调用过程700以从声明性查询的标识部分生成可执行查询,并且从声明性查询的丰富部分生成多个可执行查询。
过程700开始于动作702,在该动作处可以获得声明性查询的一部分。这可以是声明性查询的任何合适的部分。例如,当过程700正被用于生成可执行标识查询(例如,查询510)时,该部分可以包括声明性查询的标识部分(例如,标识部分504)的至少一些或全部。作为另一个示例,当过程700正被用于生成可执行丰富查询(例如,查询512、514、516、518或530)时,该部分可以包括声明性查询的丰富部分(例如,丰富部分506)的至少一些或全部。
作为又另一个示例,声明性查询可以包括内嵌视图(例如,在声明性查询的丰富部分内),并且在动作702处获得的部分可以包括在内嵌视图内指定的一些或全部信息。例如,当内嵌视图指定声明性表格查询时,可以在动作702处获得内嵌视图中指定表格查询的至少一些(例如,所有)部分。
接下来,过程700进行到动作704,在该动作处生成在动作702处获得的声明性查询部分的中间查询表示。生成中间查询表示可以通过解析在动作702处获得的声明性查询的部分并使用所解析的信息生成中间表示来执行。在一些实施例中,解析可以通过使用SQL解析器(例如,ANSI SQL解析器)来执行。在一些实施例中,中间查询表示可以包括抽象语法树(AST)。尽管在一些实施例中可以使用任何其他合适类型的中间表示,因为本文所描述的技术的各方面在这方面不受限制。
接下来,过程700进行到动作706,在该动作处,中间查询表示通过一系列一个或多个变换来阶段性地变换,每个变换利用将用于在动作708处生成数据库特定的可执行查询(例如,数据库特定的可执行查询)的辅助信息来增强中间查询表示(例如,AST)。在图7A的示例实施例中,存在以下参考动作706a、706b、706c、706d以及图7B至图7F中的示例描述的四个变换。然而,应当理解,在一些实施例中,可以省略图7A中描述的一个或多个变换(例如,当声明性查询的丰富部分中没有引用动态属性时,可以省略动态引用属性增强动作706b)。此外,在一些实施例中,可以使用一个或多个其他变换来代替或补充本文所描述的变换,因为本文所描述的技术的各方面在这方面不受限制。
在图7A的说明性实施例中,在动作704处获得的中间查询表示的第一变换在动作706a处执行,在该动作处,中间查询表示用与正被检索的任何数据实体实例相关联的唯一标识符信息来增强。以这种方式,在动作708处生成的可执行查询将获得唯一标识符,并将其与查询结果一起返回。访问每个数据实体实例的唯一标识符可以便于进一步访问数据实体实例,例如,编辑或删除一个或多个数据实体实例。
例如,考虑图7B所示的声明性查询的标识部分710。标识部分710的中间查询表示可以用将使得在动作708处生成的可执行查询获得满足查询的“WHERE”子句的每个“业务项”数据实体实例的唯一标识符的信息来增强。图7C示出了在动作706a的增强之后中间查询表示的增强版本的SQL视图720。注意,“选择(SELECT)”语句除了表示“名称”之外还表示“业务项ID”。
应当理解,为了清楚起见,图7C和图7D至图7F示出了增强的中间查询表示(而不是中间表示本身,例如,增强的抽象语法树)的SQL查询视图。因此,在一些实施例中,在过程700的执行期间不生成图7C至图7F所示的中间SQL查询视图。更确切地说,在动作708处,中间查询表示可以经历一系列一个或多个变换,并且在执行所有变换之后从中间查询表示生成可执行(例如,SQL)查询。
在动作706b处执行中间查询表示的第二变换,其中,中间查询表示用动态属性引用信息进一步增强。动态属性引用信息包括指定被引用的动态属性如何存储在底层物理实施方式中的信息。例如,该信息可以包括标识一个或多个表的信息,在这些表中,所引用的动态属性的值存储在数据库中。当从另一个数据实体实例的属性继承动态属性的值时,指示继承的值来自何处的信息可以用于标识从其访问被继承的值的底层表。然后,可以在可执行查询中使用动态属性引用信息,以访问(多个)适当的物理表或(多个)其他结构,从而获得所引用的动态属性的值。
例如,标识部分710中的“x计算规则”属性是动态属性。然而,“x计算规则”不是存储该属性的值的物理表的名称。在该示例中,实际属性值存储在ID为“1004”的“扩展属性值”表中。如图7D的SQL视图730所示(表示将在执行动作706b之后获得的增强的中间查询表示),SQL查询现在被配置成从具有ID 1004的扩展属性表中选择动态属性值。
在动作706c处执行中间查询表示的第三变换,其中,中间查询表示用视图类型信息来增强。在一些实施例中,视图类型信息可以从声明性查询本身的内容和/或与执行过程700的数据处理系统相关联的其他配置信息中得出。
如本文所描述的,在一些实施例中,由数据处理系统管理的数据实体实例可以与相应的工作流状态相关联。另外地或可替代地,由数据处理系统管理的数据实体实例可以被版本化。在一些实施例中,声明性查询可以明确地指示请求了某个“视图类型”。视图类型可以指示将返回具有特定版本和/或相关联的工作流状态的数据。例如,视图类型可以指示仅返回与已发布状态相关联的数据实体实例。作为另一个示例,视图类型可以指示将返回在特定时间范围内更新的数据实体实例。本文描述了其他示例。
在一些实施例中,在声明性查询未指定期望视图类型的情况下,视图类型可以由执行过程700的数据处理系统设置为默认视图类型或经配置的视图类型。在一些实施例中,即使声明性查询指定了期望视图类型,数据处理系统也可以用覆盖值来覆盖所请求的视图类型。
不管所请求的视图类型是如何确定的,根据所请求的视图类型,都会返回不同的数据。由于不同的数据可以存储在不同的表中,因此在动作706c处,中间查询表示用指示所请求的数据存储在物理存储装置中的何处(例如,哪个(哪些)表)的视图类型信息来增强。例如,与“已发布”工作流状态相关联的“业务项”实例的值和与“未决批准”工作流状态相关联的“业务项”实例的值可以存储在不同的表中。
如图7B所示,标识部分710不指定期望视图类型,并且在该示例中,数据处理系统被配置成默认为由此返回仅与数据实体实例的特定版本(例如,当前版本、先前版本、甚至更早的版本等)相关联的数据的视图类型。在该示例中,实体实例的特定版本的数据存储在物理表中,这些表的名称以前缀“Vb”头开。如图7E的SQL视图740所示(表示将在执行动作706c之后获得的增强的中间查询表示),SQL查询现在被配置成从具有前缀“Vb”的表中选择动态属性值。
中间查询表示的第四变换在动作706d处执行,其中,中间查询表示用权限信息来增强。在一些实施例中,数据处理系统被配置成仅允许有权访问数据的用户或用户组访问这些数据。因此,在动作706d处,中间查询表示可以用指示提交声明性查询的用户(例如,登录用户)所属的一个或多个用户组的权限信息来增强。该信息进而可以用于确定用户是否被允许访问所请求的数据,并且当在动作708处生成的可执行查询被执行时,将仅返回允许用户访问的数据。
在最初在动作704处生成的中间查询表示在动作706处使用一系列一个或多个变换增强之后,增强的中间查询表示在动作708处被变换为可执行查询。
在一些实施例中,可执行查询用于从特定类型的数据库系统访问数据,并且增强的中间查询表示可以被变换为针对该类型的数据库系统定制的可执行查询。例如,数据库系统可以是被配置成处理SQL查询的数据库系统(例如,关系数据库系统),并且在动作708处生成的可执行查询可以是可执行SQL查询。作为另一个示例,数据库系统可以是NoSQL系统,并且在动作708处生成的可执行查询可以是NoSQL系统被配置成处理的可执行查询。
在一些实施例中,在动作708处生成的可执行查询可以以供应商特定的方式定制。例如,不同的供应商(例如,MICROSOFT、ORACLE、IBM、POSTGRESQL等)可以实施不同的SQL方言和/或提供对SQL标准的扩展。在这种情况下,可以使用由目标数据库系统实施的语法和/或命令(例如,使用由ORACLE实施的任何特殊语法和/或命令)为目标数据库系统(例如,ORACLE)生成可执行查询。另外地或可替代地,在动作708处生成的可执行查询可以包括对可以使用目标数据库系统支持的查询的优化。
因此,在一些实施例中,在动作708处生成的针对一种类型的数据库的可执行查询(例如,针对MICROSOFT SQL SERVER数据库的可执行SQL查询)可以不同于在动作708处生成的针对另一种类型的数据库的可执行查询(例如,针对IBM DB2的可执行SQL查询),即使这两种查询都是从在执行过程700的动作706时获得的相同底层中间表示生成的。
在动作708处生成可执行查询之后,过程700完成。
检索分层数据
利用递归的声明性查询
如本文所描述的,数据实体可以彼此相关,并且在一些实施例中,单个声明性查询可以用于检索关于多个相关数据实体的信息。例如,如参考图4D至图4F所描述的,单个声明性查询可以指定属性层次(一些属性是不同数据实体的属性),并且可以通过处理单个声明性查询来检索层次中的属性值。此外,检索到的属性值可以以与声明性查询中指定的属性层次的分层结构相对应的分层格式输出。实际上,在该示例中,分层格式具有与声明性查询中指定的属性层次中的属性的嵌套结构相同的嵌套结构。
在参考图4D至图4F描述的示例中,要检索其值的属性的层次被明确地指定为声明性查询的一部分。具体地,该示例中的声明性查询的丰富部分具有以如图4D所示的嵌套方式组织的属性。图9C、图9F-1和图9F-2示出了使用嵌套来指定分层查询的其他示例。
然而,在一些实施例中,递归提供了在丰富部分中使用显式嵌套属性结构来指示属性层次的值是所期望的替代方案。特别地,数据处理系统所支持的一些数据实体可以是递归的。当数据实体具有相同实体类的父类(例如,相同父类)时,该数据实体可以是递归的。例如,当数据实体具有引用父数据实体的属性,并且父数据实体具有相同实体类时,则该数据实体可以说是递归的。例如,实体类“业务项”通过性质“父业务项(ParentBizTerm)”具有相同父类。作为另一个示例,实体类“数据元素”具有实体类“数据元素”的父类。这种递归结构提供了使用嵌套来检索数据实体层次的值的替代方案,并且在一些实施例中,单个声明性查询可以用于使用递归来检索关于多个相关数据实体的信息。
图8A至图8C示出了在单个声明性查询中使用递归来检索关于多个相关数据实体的信息的一个示例。图8A示出了具有相同父类的“数据元素”数据实体的说明性数据实体实例800。数据实体实例800被命名为“联系_信息(contact_info)”并具有图8A所示的分层结构,并且可以用于存储关于用户的联系信息的信息。数据实体实例“联系_信息”具有三个属性:“地址”、“电子邮件”和“电话_号码”,它们分别引用存储地址、电子邮件和电话号码信息的相应“数据元素”实例。此外,“地址”实体实例本身具有四个属性,称为“地址_行”、“城市”、“州”和“邮政_编码”,它们分别引用存储街道、城市、州和邮政编码信息的相应“数据元素”实例。
图8B示出了根据本文所描述的技术的一些实施例的用于使用递归来检索分层数据的单个说明性声明性查询805。如图8B所示,可以使用具有值“孩子(children)”的recurseOn字段806来检索作为数据元素“联系_信息”的孩子的数据元素层次,该字段指示递归应该是向下的。在808处,丰富部分指示对于每个递归检索的属性,应该获得属性的名称。
图8C-1、图8C-2和图8C-3示出了由数据处理系统通过处理图8B所示的示例声明性查询805而获得的说明性结果。从图8C-1、图8C-2和图8C-3可以清楚地看出,结果的结构是层次化的,其中,层次的结构与图8A所示的数据元素的嵌套结构匹配。同时,该嵌套结构不需要在声明性查询805中明确陈述,这简化了在可能使用递归的情况下编写用于检索分层数据的查询。
尽管图8B的示例声明性查询指示递归是向下的,但是声明性查询可以使用向上方向的递归来检索值。图8D中示出了示例,其展示了用于检索“电话_号码”数据实体实例的任何父实体的属性的单个声明性查询810。在该示例中,recurseOn字段被设置为值“父数据元素”以指示递归是向上的。图8E示出了由数据处理系统通过处理示例声明性查询810而获得的说明性结果820。
在一些实施例中,声明性查询可以指定对数据处理系统在处理声明性查询时要执行的递归的级数的数字限制。这可能有助于保持结果的大小可管理。
用于检索分层数据的声明性查询的附加示例
接下来参考图9A至图9G描述用于检索分层数据的声明性查询的附加示例。
图9A示出了图2G所示的实体关系图的一部分,以帮助说明图9B至图9G中的示例。在图9A的示例中,“业务项”数据实体902具有属性“名称”、“描述”、“PII分类ID”、“遗留URL”、“遗留变更日期”、“设计文档”,这些属性采用各种值。这些属性中的一个或多个可以是静态的。这些属性中的一个或多个可以是动态的。“业务项”数据实体还具有引用属性905“业务项组”、“PII分类”和“数据元素”,这些引用属性分别引用其他数据实体——业务项组数据实体904、PII分类数据实体906和一系列一个或多个数据元素数据实体。进而,业务项组数据实体904具有属性“名称”、“描述”、“词典类型”和引用属性“业务项”。PII分类数据实体906具有名称属性。
图9B示出了根据本文所描述的技术的一些实施例的用于检索分层数据的声明性查询的伪代码规范。特别地,规范指示结果将包括关于“业务项”数据实体的所有实例的信息,该数据实体的PII分类属性被设置为引用PII分类数据实体的某个具体实例。对于每个这样标识的“业务项”实例,结果将包括其“名称”和“遗留URL”属性的值。另外,对于每个特定标识的“业务项”实例,结果将包括(特定“业务项”实例的)业务项组属性所引用的“业务项组”数据实体实例的“名称”和“词典类型”属性的值。
图9C示出了根据本文所描述的技术的一些实施例的声明性查询910,该声明性查询是图9B所示的伪代码声明性查询规范的JSON实施方式。查询910包括标识部分912,该标识部分指示结果将包括“业务项”数据实体的已发布实例,该数据实体的PII分类属性被设置为引用PII分类数据实体的某个实例,而不是为空值。查询912包括丰富部分914,该丰富部分指示结果将包括“名称”、“遗留URL”的属性值,并且对于所引用的业务项组数据实体实例,包括其“名称”和“词典类型”属性的值。
图9D示出了根据本文所描述的技术的一些实施例的可以通过处理图9C的JSON声明性查询获得的结果的说明性视图。在该示例中,使用嵌套表来示出结果,但这不是对本文所描述的技术的实施例的限制。在其他实施例中,结果可以具有如通过嵌套或以任何其他合适的方式指定的分层格式。
注意,图9C中的丰富部分914使用嵌套来指定期望的属性层次,并且结果以结构与丰富部分914的嵌套结构匹配的分层格式呈现。而且,应当注意,像本文所描述的许多示例声明性查询一样,在声明性查询中不区分哪些属性是静态的和哪些属性是动态的。因此,查询的作者不需要知道属性是如何存储在存储器中的。声明性查询910不仅不知道属性是静态的还是动态的,而且也不知道实际存储值的(多个)数据库的类型——数据库特定的细节是隐藏的。
图9E示出了根据本文所描述的技术的一些实施例的用于检索分层数据的另一个更复杂的声明性查询的伪代码规范。如图9E所示,规范指示结果将包括关于“业务项”数据实体的所有实例的信息,该数据实体引用其“词典类型”属性被设置为“企业”的“业务项组”实体实例。对于每个这样的实体实例,结果将包括实体实例的名称、所引用的业务项组的名称、所引用的数据元素实例的名称、所引用的数据元素实例引用的数据集的名称、所有相关数据元素的计数、不属于应用的一部分的相关数据元素的计数、以及按应用分组的相关数据元素的计数。
图9F-1和图9F-2示出了根据本文所描述的技术的一些实施例的声明性查询920,该声明性查询是图9B所示的伪代码声明性查询规范的JSON实施方式。声明性查询包括标识部分,该标识部分指示结果将包括业务项数据实体的已发布实例,该数据实体引用其“词典类型”属性被设置为“企业”的业务项组实例。声明性查询还包括丰富部分,该丰富部分利用嵌套从两个不同的层次(业务项组层次和数据元素层次)中提取属性值。
另外,声明性查询包括用于利用嵌套的结果来丰富响应的嵌套SQL查询。内嵌视图922内的嵌套SQL查询是声明性表格查询。内嵌视图924内的嵌套SQL查询是用于利用嵌套的表格结果来丰富响应的声明性表格查询。
图9G示出了根据本文所描述的技术的一些实施例的可以通过处理图9F-1和图9F-2的JSON声明性查询获得的结果的说明性视图。在该示例中,使用嵌套表来示出结果,但这不是对本文所描述的技术的实施例的限制。在其他实施例中,结果可以具有如通过嵌套或以任何其他合适的方式指定的分层格式。
类似于图9A至图9D的示例,图9F-1和9F-2中的声明性查询920使用嵌套来指定期望的属性层次,并且图9G所示的结果以结构与声明性查询的嵌套结构匹配的分层格式呈现。声明性查询920不知道属性是静态的还是动态的,也不知道关于哪些数据库存储这些属性值以及这是如何完成的细节。
实体API的附加方面
如本文所描述的,数据处理系统(例如,数据处理系统105)可以被配置成允许对其通过实体API管理的数据实体进行不同类型的访问。例如,除了能够查询数据实体实例之外,数据处理系统可以被配置成允许创建、更新和删除数据实体实例。作为另一个示例,如本文所描述的,数据处理系统可以被配置成使用工作流管理系统来管理工作流动作,并且实体API可以被用作允许执行工作流动作的接口(例如,提交对一个或多个数据实体实例的变更以供审批、批准或拒绝、提交对(多个)数据实体实例的变更等)。
因此,在一些实施例中,(例如,使用JSON或任何其他合适的格式指定的)声明性语句可以用于指定期望的创建、更新、删除或工作流操作(类似于可以如何使用声明性查询来指定期望的查询)。进而,声明性语句可以被转换为一个或多个可执行语句(例如,SQL语句),并且(多个)可执行语句可以由数据处理系统执行以实施期望的操作。
以下参考表13-16描述了用于实施创建、更新或删除操作的声明性语句的示例。在这些示例中,这种声明性语句可以使用““操作”:=“实体_保存””以JSON符号来指示(而声明性查询可以使用“实体_查询”或“表格_查询”来指示,如下所述)。在一些实施例中,“实体_保存”声明性语句进一步包括指示正在进行的编辑的类型的参数(例如,使用“编辑类型”命令)。例如,参数的值可以指示数据实体实例正在被创建、更新、删除、添加到引用集合或从引用集合中移除。
下表13中示出了用于创建数据实体实例的声明性语句的说明性示例,其用于创建“名称”和“描述”属性分别被设置为“新业务项组”和“我的第一本词典”的“业务项组”数据实体的实例。
表14示出了响应于执行表13的用于创建数据实体“业务项组”的新实例的声明性语句而返回的说明性结果。在该示例中,结果包含新创建的数据实体实例的标识符(在该示例中为“复合ID”)。该标识符可以用于为后续操作(例如,更新或删除)标识数据实体实例。该结果还指示新创建的数据实体实例是否可以由用户更新和/或删除。
表13:用于创建数据实体“业务项组”的实例的说明性声明性语句。
表14:响应于执行表13的用于创建数据实体“业务项组”的新实例的声明性语句而返回的说明性结果。
下表15a中示出了用于更新数据实体实例的声明性语句的说明性示例,其用于更新“业务项组”数据实体的实例以将其“描述”属性的值变更为:“我的最早第一本词典”。在该示例中,编辑类型参数被设置为“更新”。表15b示出了响应于执行表15a的用于更新数据实体“业务项组”的实例的声明性语句而返回的说明性结果。
表15a:用于更新数据实体“业务项组”的实例的属性值的说明性声明性语句。
表15b:响应于执行表9的用于更新数据实体“业务项组”的实例的属性值的声明性语句而返回的说明性结果
表15a的示例声明性语句包括要更新的数据实体实例的唯一标识符。在该示例中,唯一标识符可以从图14所示的结果中获得,或者通过执行声明性查询来获得标识符。在一些实施例中,可以在执行更新或删除操作之前执行声明性查询,以便获得要更新或删除的(多个)声明性实体实例的(多个)标识符。下表16a中示出了这种声明性查询的示例,其中,表16b中示出了其结果。
表16a的示例声明性查询指定了选项“检索编辑”,这使得与数据实体实例的编辑相关的附加信息被返回。如表16b所示,该附加信息可以指示特定属性是否可以被更新(例如,“描述”属性的值可以被更新,因为附加信息包括字符串“可以更新”:真)。而且,该附加信息可以包括编辑上下文(editContext),它是指示要编辑的项目版本的信息。在一些实施例中,可以在声明性语句中提供该编辑上下文以进行编辑,从而保证正在编辑的是属性的最新版本。如果其他人在对当前属性值进行查询之后但在提交新值之前进行了变更,则这可以防止冲突。如表15a所示,声明性语句包括在表16b所示的结果中返回的编辑上下文。
表16a:设置有“检索编辑”选项的声明性实体API查询。
表16b:处理表16a所示的声明性实体API查询的结果。
如本文所描述的,实体API可以用于执行关于由数据处理系统管理的一个或多个数据实体实例的工作流动作。为此,在一些实施例中,数据实体实例可以具有其值指示可以针对数据实体实例执行的工作流任务(例如,审批、拒绝等)的属性(例如,称为“工作流任务”)。该属性值可以用于标识可以在其上执行工作流任务的数据实体实例,并且声明性语句(例如,具有“工作流_动作”操作)可以用于使数据处理系统执行工作流动作。
在一些实施例中,用于创建、更新、删除或执行关于一个或多个数据实体实例的工作流动作的声明性语句可以具有分层结构。例如,声明性语句可以包括(例如,使用嵌套或递归地指定的)属性层次,类似于可以如何使用声明性查询来获得属性层次的值,本文中提供了其示例。
如本文所描述的,数据实体实例属性的值可以由数据处理系统存储在不同的表中。例如,静态属性和动态属性的值可以存储在不同的表中。作为另一个示例,不同动态属性(例如,不同类型的动态属性)的值可以存储在不同的表中。由于单个声明性查询可以用于访问数据实体实例的多个不同属性的值,因此单个声明性查询可以用于访问存储在数据处理系统中的多个不同表格上的值。类似地,单个声明性语句可以用于创建、更新或删除存储在多个表中的值,因为该语句可以用于创建、更新或删除数据实体实例的多个不同属性的值。
在一些实施例中,可以根据参考图7描述的过程700来处理用于创建、更新或删除一个或多个数据实体实例的声明性语句。例如,在一些实施例中,例如,通过使用SQL解析器,声明性语句可以首先被变换为中间表示(例如,抽象语法树)。
接下来,使用一系列一个或多个变换(例如,参考图7描述的动态属性引用增强706b、视图类型增强706c和权限增强706d和/或任何其他合适的变换)来变换中间表示,以获得经变换的中间表示。由于用于更新或删除数据实体实例的声明性语句已经包括一个或多个数据实体实例标识符,因此在一些实施例中,当将声明性语句变换为可执行语句时,可能不需要唯一标识符增强步骤。另一方面,可以执行动态属性引用增强和视图类型增强来标识存储要更新或删除的属性值的(多个)表,并且可以执行权限增强来确保允许登录用户进行所请求的变更。
在中间表示(例如,抽象语法树)通过一系列一个或多个变换被变换之后,从经变换的中间表示生成可执行语句(例如,可执行SQL语句)。在一些实施例中,可执行语句可以针对特定的数据库系统进行定制。然后,可以执行可执行语句以处理声明性语句。
声明性表格查询
如本文所描述的,声明性查询可以是具有标识和丰富部分的声明性实体查询,并且处理声明性实体查询的结果包括由其属性值丰富的数据实体实例。这些结果的每个数据实体实例部分可以与唯一地标识数据实体实例的相应实体实例ID相关联。在本文所描述的示例中,这种查询可以使用““操作”:=“实体_查询””以JSON符号来指示。
然而,本发明人已经认识到,直接使用SQL查询(而不是声明性实体查询)可以连接数据实体实例,使得结果集中的单个行不再属于单个数据实体实例,并且一个或多个(例如,所有)列可以与不同的实体实例相关联。
因此,在一些实施例中,实施实体API的数据处理系统可以被配置成还处理声明性表格查询,这些声明性表格查询的结果可以将来自不同数据实体实例的数据与以行和列组织的结果混合,其中,一个或多个列可以可选地与相应数据实体实例ID相关联。在本文所描述的示例中,声明性表格查询可以使用““操作”:=“表格_查询””以JSON符号来指示。
图10A示出了组合从多个数据实体实例获得的信息的表格查询的说明性示例。在该示例中,表格查询用于检索具有父“业务项”的所有“业务项”数据实体实例的名称。如图10B所示,处理该表格查询的结果包括两个列:业务项的名称和父“业务项”的名称。注意,别名用于重命名列。
在一些实施例中,表格查询可以用于执行聚合函数。聚合函数的非限制性示例包括:标识一组数字(例如,列)的最小值或最大值,标识一组值(例如,列)的平均值、标准偏差或其他统计量,对一组值(例如,列)中的值的数量进行计数,对满足一个或多个条件的一组值(例如,列)中的值的数量进行计数,等等。
图10C示出了用于执行聚合函数(在该示例中为计数操作)的表格查询的说明性示例。图10D中示出了处理图10C的声明性表格查询的结果。注意,在该示例中,声明性表格查询通过添加“检索定义”全局部分来请求结果包括结果的结构化定义。在图10D所示的结果的第一部分中返回了结构化定义。图9F-2的内嵌视图924中示出了用于执行聚合函数的声明性表格查询的另一个示例,其中,图9G中示出了说明性结果。
从前述示例中可以看出,声明性表格可以包括用于选择期望行和列的SQL语句。可选地,当实体实例id可用时,声明性表格查询可以具有用于丰富各个列的丰富部分。例如,对于引用属性,可以通过子选择顶级实体的另外的属性(包括嵌套属性)来丰富列中的实体实例值。这会产生丰富的列值,该列值是顶级的引用,但具有来自属性部分的子选择的附加属性值,就像实体查询中的引用值一样。
例如,考虑图10A所示的用于检索具有父“业务项”的所有“业务项”数据实体实例的名称的表格查询。假设现在我们希望通过引用子业务项(别名“b”)的业务项组以及每个业务项组实例的“名称”和“说明”属性的值来丰富每一行。这可以通过下表17所示的查询来实现。“从别名(fromAlias)”关键字用于标识哪些业务项将被用于丰富。表17所示的结果包括“业务项组”引用。
表17:具有丰富的表格查询。
表18:处理表17所示的表格查询的结果。
在一些实施例中,可以使用图7的过程700来处理声明性表格查询。在一些这样的实施例中,例如,通过使用SQL解析器,声明性表格查询首先被变换为中间查询表示(例如,抽象语法树)。接下来,使用一系列一个或多个变换(例如,本文关于图7所描述的变换和/或任何其他合适的变换)来变换中间查询表示,以获得经变换的中间查询表示。进而,中间查询表示被变换为可执行查询(例如,可执行SQL查询)。在一些实施例中,可执行查询可以针对特定的数据库系统进行定制。
内嵌视图
如文本所描述的,在一些实施例中,声明性查询的丰富部分可以包括包含另一个声明性查询的内嵌视图。内嵌视图允许嵌套声明性查询。以这种方式,声明性表格或实体查询可以嵌套在另一个声明性查询中。例如,如关于图9F-1和图9F-2已经看到的,声明性查询920的丰富部分包括两个内嵌视图:包括实体查询的内嵌视图922和包括表格查询的内嵌视图924。
在一些实施例中,内嵌视图可以包括四个组成部分:(1)指定要执行的声明性查询的类型的信息(例如,指定查询是声明性实体查询还是声明性表格查询的信息);(2)用于创建内嵌视图的SQL查询,该查询选择内部连接键;(3)用作从外部连接的外部连接键的列名称的列表(在图9F-1、图9F-2、图10E和图10F的示例中用“外部连接键”表示);以及(4)用作连接到内部的内部连接键的列名称的列表(在图9F-1、图9F-2、图10E和图10F的示例中用“内部连接键”表示)。
图10E和图10F示出了根据本文所描述的技术的一些实施例的包含内嵌视图的声明性查询的附加示例。
特别地,图10E示出了包含内嵌视图的声明性实体查询,该内嵌视图内具有另一个声明性实体查询。在该示例中,整个声明性查询用于选择具有至少一个数据元素的“业务项”数据实体的所有实例。此外,对于每个这样的数据实体实例,目标是根据图2G所示的实体关系图通过遍历实体模型路径“数据元素.数据集.应用”来获得与该实例相关联的“应用”的集合。在没有内嵌视图的情况下,结果将必须包含所有中间元素(即连接到与应用连接的数据集的数据元素)。然而,通过使用内嵌视图,如图10E所示,不需要返回这些中间结果。
在该示例中,内嵌查询从“应用”开始并向下连接到具有连接属性的实体(在该示例中为数据元素),因为内部和外部连接属性都被设置为“业务项ID”。图10G-1和图10G-2示出了执行图10E所示的声明性实体查询的说明性结果。
图10F示出了可以使用内嵌视图将声明性表格查询嵌套在丰富表格查询中。在该示例中,内嵌视图有助于针对“技术系统(TechSystem)”数据实体的每个实例检索每个技术组的数据集计数。内部和外部连接属性被设置为“技术系统ID”。图10H-1、图10H-2和图10H-3示出了执行图10F所示的声明性实体查询的说明性结果。
附加实施细节
图11展示了可以在其上实施本文所描述的技术的合适计算系统环境1100的示例。计算系统环境1100仅是合适的计算环境的一个示例,并且不旨在对本文所描述的技术的使用或功能的范围提出任何限制。也不应当将计算环境1100解释为具有与示例性操作环境1100中展示的部件中的任何一个或组合相关的任何依赖性或要求。
本文所描述的技术与许多其他通用或专用计算系统环境或配置一起操作。可以适合与本文所描述的技术一起使用的众所周知的计算系统、环境和/或配置的示例包括但不限于:个人计算机、服务器计算机、手持或膝上型设备、多处理器系统、基于微处理器的系统、机顶盒、可编程消费电子产品、网络PC、小型计算机、大型计算机、包括上述系统或设备中任一个的分布式计算环境等。
计算环境可以执行计算机可执行指令,诸如程序模块。通常,程序模块包括进行特定任务或实施特定抽象数据类型的例程、程序、对象、部件、数据结构等。本文所描述的技术还可以在分布式计算环境中实践,其中,任务由通过通信网络链接的远程处理设备进行。在分布式计算环境中,程序模块可以位于包括存储器存储设备的本地和远程计算机存储介质中。
参照图11,用于实施本文所描述的技术的示例性系统包括呈计算机1100形式的通用计算设备。计算机1110的部件可以包括但不限于处理单元1120、系统存储器1130、以及将包括系统存储器的各种系统部件耦合到处理单元1120的系统总线1021。系统总线1121可以是包括存储器总线或存储器控制器、外围总线和使用各种总线架构中的任何架构的本地总线的若干类型的总线结构中的任何总线结构。通过举例而非限制,此类架构包括工业标准架构(ISA)总线、微通道架构(MCA)总线、增强ISA(EISA)总线、视频电子标准协会(VESA)本地总线、以及外围部件互连(PCI)总线(也称为夹层(Mezzanine)总线)。
计算机1110通常包括各种计算机可读介质。计算机可读介质可以是可由计算机1110访问的任何可用介质,并且包括易失性和非易失性介质、可移除和不可移除介质。通过举例而非限制,计算机可读介质可以包括计算机存储介质和通信介质。计算机存储介质包括以任何方法或技术实施的用于存储诸如计算机可读指令、数据结构、程序模块、或其他数据等信息的易失性和非易失性介质、可移除和不可移除介质。计算机存储介质包括但不限于RAM、ROM、EEPROM、闪存存储器或其他存储器技术、CD-ROM、数字通用盘(DVD)或其他光盘存储装置、磁带盒、磁带、磁盘存储装置或其他磁存储设备、或者可用于存储期望信息并可由计算机1110访问的任何其他介质。通信介质通常以诸如载波或其他传输机制等已调制数据信号来实施计算机可读指令、数据结构、程序模块或其他数据,并且包括任何信息递送介质。术语“已调制数据信号”是指以编码信号中的信息的这种方式使其特征中的一个或多个被设置或改变的信号。通过举例而非限制,通信介质包括有线介质(诸如有线网络或直接有线连接)以及无线介质(诸如声学、RF、红外线及其他无线介质)。上述中的任一个的组合也应包括在计算机可读介质的范围内。
系统存储器1130包括呈易失性和/或非易失性存储器形式的计算机存储介质,诸如只读存储器(ROM)1131和随机存取存储器(RAM)1132。包含如在启动期间帮助在计算机1110内的元件之间传输信息的基本例程的基本输入/输出系统1133(BIOS)通常存储在ROM1131中。RAM 1132通常包含可由处理单元1120立即访问和/或当前正在操作的数据和/或程序模块。通过举例而非限制,图11展示了操作系统1134、应用程序1135、其他程序模块1136和程序数据1137。
计算机1110还可以包括其他可移除/不可移除、易失性/非易失性计算机存储介质。仅通过举例,图11展示了读取或写入不可移除的非易失性磁介质的硬盘驱动器1141、读取或写入可移除的非易失性存储器1152(诸如闪存存储器)的闪存驱动器1151、以及读取或写入可移除的非易失性光盘1156(诸如CD ROM或其他光学介质)的光盘驱动器1155。可以用于示例性操作环境中的其他可移除/不可移除、易失性/非易失性计算机存储介质包括但不限于磁带盒、闪存卡、数字通用盘、数字录像带、固态RAM、固态ROM等。硬盘驱动器1141通常通过如接口1140等不可移除存储器接口连接至系统总线1121,并且磁盘驱动器1151和光盘驱动器1155通常由诸如接口1150等可移除存储器接口连接至系统总线1121。
以上所描述并在图11中展示的驱动器及其相关联的计算机存储介质为计算机1110提供了对计算机可读指令、数据结构、程序模块和其他数据的存储。例如,在图11中,硬盘驱动器1141被展示为存储操作系统1144、应用程序1145、其他程序模块1146和程序数据1147。注意,这些部件与操作系统1134、应用程序1135、其他程序模块1136和程序数据1137可以是相同或不同的。这里给予了操作系统1144、应用程序1145、其他程序模块1146和程序数据1147不同的编号,以说明至少它们是不同的副本。行动者可以通过如键盘1162和定点设备1161(通常称为鼠标、轨迹球或触摸板)等输入设备将命令和信息输入到计算机1110中。其他输入设备(未示出)可以包括麦克风、操纵杆、游戏手柄、圆盘式卫星天线、扫描仪等。这些和其他输入设备通常通过耦合到系统总线的用户输入接口1160连接到处理单元1120,但可以由诸如并行端口、游戏端口或通用串行总线(USB)等其他接口和总线结构来连接。监视器1191或其他类型的显示设备也经由诸如视频接口1190等接口连接至系统总线1121。除了监视器之外,计算机还可以包括可通过输出外围接口1195连接的其他外围输出设备,诸如扬声器1197和打印机1196。
计算机1110可以使用与一个或多个远程计算机(诸如远程计算机1180)的逻辑连接在联网环境中操作。远程计算机1180可以是个人计算机、服务器、路由器、网络PC、对等设备、或其他常见网络节点,并且通常包括以上关于计算机1110描述的元件中的许多或全部,但是在图11中仅展示了存储器存储设备1181。图11中描绘的逻辑连接包括局域网(LAN)1171和广域网(WAN)1173,但是还可以包括其他网络。这种联网环境在办公室、企业范围计算机网络、内联网和互联网中是普遍的。
当在LAN联网环境中使用时,计算机1110通过网络接口或适配器1170连接到LAN1171。当在WAN联网环境中使用时,计算机1110通常包括调制解调器1172或用于通过诸如互联网等WAN 1173建立通信的其他装置。调制解调器1172可以是内置的或外置的,其可以经由行动者输入接口1160或其他适当的机制连接到系统总线1121。在联网环境中,关于计算机1110描绘的程序模块或是其部分可以存储在远程存储器存储设备中。通过举例而非限制,图11展示了远程应用程序1185驻留在存储器设备1181上。应当理解,所示出的网络连接是示例性的,并且可以使用在计算机之间建立通信链路的其他手段。
如此描述了本文所描述的技术的至少一个实施例的若干方面之后,应当理解,本领域技术人员会容易想到各种更改、修改以及改进。
这种更改、修改以及改进旨在是本披露内容的一部分、并且旨在落入本披露内容的精神和范围之内。进一步地,尽管指示了本文所描述的技术的优点,但应当理解,并非本文所描述的技术的每个实施例都将包括每个描述的优点。一些实施例可以不实施在本文中描述为有利的任何特征,并且在一些情况下,可以实施描述的特征中的一个或多个以实现进一步的实施例。因此,先前的描述和附图仅是通过举例的方式。
本文所描述的技术的上述实施例可以以多种方式中的任何方式来实施。例如,可以使用硬件、软件或其组合来实施这些实施例。当在软件中实施时,可以在任何合适的处理器或处理器集合上执行软件代码,无论该处理器或处理器集合是设置在单个计算机中还是分布在多个计算机中。此类处理器可以被实施为集成电路(其中,一个集成电路部件中具有一个或多个处理器),包括名称为诸如CPU芯片、GPU芯片、微处理器、微控制器或协处理器等本领域已知的商用集成电路部件。可替代地,处理器可以以定制电路系统(诸如ASIC)或者通过配置可编程逻辑设备产生的半定制电路系统来实施。作为又一替代方案,处理器可以是较大电路的一部分或半导体器件,无论是商用的、半定制的还是定制的。作为具体示例,一些商用微处理器具有多个核,使得这些核中的一个或子集可以构成处理器。然而,处理器可以使用呈任何合适格式的电路系统来实施。
进一步地,应当理解,计算机可以体现为多种形式中的任何形式,如机架式计算机、台式计算机、膝上型计算机或平板计算机。另外,计算机可以嵌入在通常不被认为是计算机但具有合适的处理能力的设备中,该设备包括个人数字助理(PDA)、智能手机或任何其他合适的便携式或固定式电子设备。
而且,计算机可以具有一个或多个输入设备和输出设备。这些设备可以尤其用于呈现用户接口。可以用于提供用户接口的输出设备的示例包括用于对输出进行视觉呈现的打印机或显示屏,以及用于对输出进行听觉呈现的扬声器或其他声音生成设备。可以用于用户接口的输入设备的示例包括键盘和定点设备(诸如鼠标、触摸板以及数字化平板)。作为另一个示例,计算机可以通过语音识别或以其他可听格式接收输入信息。
这种计算机可以由呈任何合适的形式的一个或多个网络来互连,该一个或多个网络包括局域网或广域网,诸如企业网或互联网。这种网络可以基于任何合适的技术并且可以根据任何合适的协议来运行,并且可以包括无线网络、有线网络或光纤网络。
而且,本文中概括的各种方法或过程可以被编码为在采用各种操作系统或平台中的任一种的一个或多个处理器上可执行的软件。另外,这种软件可以使用多种合适的编程语言和/或编程或脚本工具中的任一种来编写,并且还可以被编译为可执行的机器语言代码或在框架或虚拟机上执行的中间代码。
在这方面,本文所描述的技术的各方面可以体现为用一个或多个程序进行编码的计算机可读存储介质(或多个计算机可读介质)(例如,计算机存储器、一个或多个软盘、压缩光盘(CD)、光盘、数字视频盘(DVD)、磁带、闪存存储器、现场可编程门阵列或其他半导体器件中的电路配置、或其他有形计算机存储介质),该一个或多个程序在一个或多个计算机或其他处理器上执行时进行实施上述各种实施例的方法。如从前文示例将清楚明白,计算机可读存储介质可以将信息保留足够的时间,以便提供呈非暂态形式的计算机可执行指令。这种计算机可读存储介质可以是可运送的,使得其上存储的一个或多个程序可以加载到一个或多个不同的计算机或其他处理器上,以实施如上所述的技术的各个方面。如本文所使用的,术语“计算机可读存储介质”仅涵盖可被看作是制品(即,制造物品)或机器的非暂态计算机可读介质。可替代地或附加地,本文所描述的技术的各方面可以实施为除了计算机可读存储介质之外的计算机可读介质,如传播信号。
术语“程序”或“软件”在本文中在一般意义上使用,以指代任何类型的计算机代码或计算机可执行指令集,这些计算机代码或计算机可执行指令集可以被用来对计算机或其他处理器进行编程以实施如上讨论的本发明的各个方面。另外,应该理解,根据此实施例的一个方面,当被执行时进行本发明的方法的一个或多个计算机程序不必驻留在单个计算机或处理器上,而是可以用模块化的方式分布在多个不同的计算机或处理器中以实施本发明的各个方面。
计算机可执行指令可以呈由一个或多个计算机或其他设备执行的许多形式,诸如程序模块。通常,程序模块包括进行特定任务或实施特定抽象数据类型的例程、程序、对象、部件、数据结构等。通常,程序模块的功能可以如各个实施例所期望的而组合或分布。
而且,数据结构可以以任何合适的形式存储在计算机可读介质中。为了简化说明,可以将数据结构示出为具有通过数据结构中的位置而相关的字段。这种关系同样可以通过为针对字段的存储指派传达字段之间关系的计算机可读介质中的位置来实现。然而,可以使用任何合适的机制来建立数据结构的字段中的信息之间的关系,包括通过使用指针、标签、或建立数据元素之间的关系的其他机制。
本文所描述的技术的各方面的各个方面可以单独地、组合地、或以先前所述实施例中未具体描述的各种布置来使用,并且因此其应用不限于先前描述中阐述或附图中所展示的部件的细节和布置。例如,一个实施例中描述的方面可以以任何方式与其他实施例中描述的方面组合。
而且,本文所描述的技术可以体现为方法,本文(包括参考图3和图7)提供了这些方法的示例。作为这些方法中的任何方法的一部分而进行的动作可以以任何合适的方式排序。因此,可以构造实施例,在这些实施例中,动作以与所展示的顺序不同的顺序进行,这可以包括同时进行一些动作,即使这些动作在说明性实施例中被示出为顺序动作。
进一步地,一些动作被描述为由“行动者”或“用户”做出。应当理解,“行动者”或“用户”不必是单个个人,并且在一些实施例中,可归因于“行动者”或“用户”的动作可以由个人团队和/或个人与计算机辅助工具或其他机构的组合来进行。
权利要求中用于修饰权利要求元素的序数术语(如“第一”、“第二”、“第三”等)的使用本身不暗含一个权利要求元素优于另一个权利要求元素的任何优先权、优先地位或顺序或执行方法的动作的临时顺序,而是仅用作标签来区分具有特定名称的一项权利要求元素与具有相同名称(但是使用序数术语)的另一个元素,以区分权利要求元素。
而且,在本文中使用的措辞和术语是用于描述的目的,而不应当被视为是限制性的。本文使用的“包括(including)”、“包括(comprising)”或“具有(having)”、“包含(containing)”、“涉及(involving)”及其变型旨在涵盖其后所列的项及其等效形式以及其他项。
Claims (107)
1.一种由数据处理系统执行的用于响应于查询以计算上高效的方式获得数据实体的第一实例的第一属性值的方法,该方法包括:
(A)通过该数据处理系统的应用编程接口(API)获得用于访问数据的查询,该查询包括:
第一部分,该第一部分包括用于标识存储在至少一个数据存储中的该数据实体的至少第一实例的信息;以及
第二部分,该第二部分指示要获得其值的数据实体的至少一个属性;
(B)生成多个可执行查询,该多个可执行查询包括第一组一个或多个可执行查询和第二组一个或多个可执行查询,该生成包括:
使用该查询的第一部分生成该第一组可执行查询,该第一组可执行查询用于标识存储在该至少一个数据存储中的该数据实体的至少第一实例;
使用该查询的第二部分生成该第二组可执行查询,该第二组可执行查询用于获得使用该第一组可执行查询标识的该数据实体的至少第一实例的属性值,这些属性值包括该第一属性值;
(C)通过执行该多个可执行查询来获得经由该API提供的该查询的结果,这些结果至少包括该数据实体的第一实例的第一属性值;以及
(D)输出至少包括该数据实体的第一实例的第一属性值的这些结果中的至少一些结果。
2.如权利要求1所述的方法,其中,该第一组可执行查询和该第二组可执行查询包括可执行的结构化查询语言(SQL)查询。
3.如权利要求1或任一其他前述权利要求所述的方法,
其中,该第一部分包括用于标识多个数据实体中的每个数据实体的一个或多个实例的信息,该多个数据实体包括该数据实体;
其中,生成该第一组可执行查询包括:针对该多个数据实体中的每个特定数据实体生成用于标识存储在该至少一个数据存储中的该数据实体的实例的相应可执行查询。
4.如权利要求1或任一其他前述权利要求所述的方法,
其中,该至少一个属性包括该数据实体的多个属性,
其中,生成该第二组可执行查询包括针对该多个属性中的至少一些属性中的每个特定属性生成用于获得使用该第一组可执行查询标识的该数据实体的实例的该特定属性的值的相应可执行查询。
5.如权利要求4所述的方法,
其中,该多个属性包括多个动态属性,并且
其中,生成该第二组可执行查询包括:
将该多个动态属性分组为多组动态属性,这些组中的每一组具有该多个动态属性中的至少一个;以及
针对该多组动态属性中的每一组生成针对该数据实体的实例获得该组中的属性值的相应可执行查询。
6.如权利要求5所述的方法,其中,对该多个动态属性进行分组是基于这些动态属性的类型来执行的。
7.如权利要求5或6所述的方法,其中,对该多个动态属性进行分组是基于动态属性是否存储在该至少一个数据存储中的同一表中来执行的。
8.如权利要求5至7中任一项所述的方法,其中,对该多个动态属性进行分组是基于动态属性是否沿着公共继承路径继承其值来执行的。
9.如权利要求1或任一其他前述权利要求所述的方法,其中,执行该多个可执行查询包括:
执行该第一组可执行查询以获得标识该数据实体的至少第一实例的信息;以及
在执行该第一组可执行查询之后,
使用标识该数据实体的至少第一实例的信息来执行该第二组可执行查询。
10.如权利要求9所述的方法,其中,生成该第二组可执行查询是在执行该第一组可执行查询之后执行的。
11.如权利要求9所述的方法,其中,生成该第二组可执行查询是在执行该第一组可执行查询之前执行的。
12.如权利要求9或任一其他前述权利要求所述的方法,
其中,该至少一个属性包括该数据实体的多组动态属性,
其中,该第二组可执行查询包括分别对应于该多组动态属性的多个可执行查询,并且
其中,执行该第二组可执行查询包括执行该多个可执行查询中的每一个以获得相应的多个动态属性值结果。
13.如权利要求12所述的方法,进一步包括:
在执行该第二组可执行查询之后,组合该多个动态值属性结果以获得该查询的结果。
14.如权利要求1或任一其他前述权利要求所述的方法,
其中,该查询的第二部分包括内嵌视图,并且
其中,生成该第二组可执行查询包括使用该内嵌视图中指定的信息来生成可执行查询。
15.如权利要求14所述的方法,其中,该内嵌视图包括表格查询。
16.如权利要求15所述的方法,其中,该表格查询用于执行聚合函数。
17.如权利要求14所述的方法,其中,该内嵌视图指定内部和外部连接键。
18.如权利要求1或任一其他前述权利要求所述的方法,其中,该数据实体的该至少一个属性包括至少一个静态属性和至少一个动态属性。
19.如权利要求1或任一其他前述权利要求所述的方法,其中,该数据实体的该至少一个属性包括第一动态属性,该第一动态属性被配置成从第二数据实体的属性继承其值。
20.如权利要求1或任一其他前述权利要求所述的方法,其中,该查询的第二部分指示包括该至少一个属性的属性层次。
21.如权利要求20所述的方法,其中,该查询的第二部分使用嵌套来指示该属性层次的至少一部分。
22.如权利要求20所述的方法,其中,该查询的第二部分使用递归来指示该属性层次的至少一部分。
23.如权利要求20所述的方法,其中,输出这些结果中的至少一些结果包括:
以与该属性层次相对应的分层格式来格式化这些结果中的该至少一些结果;以及
以该分层格式输出这些结果中的该至少一些结果。
24.如权利要求1或任一其他前述权利要求所述的方法,其中,输出这些结果中的该至少一些结果包括以分层格式输出这些结果中的该至少一些结果。
25.如权利要求1或任一其他前述权利要求所述的方法,其中,输出这些结果中的该至少一些结果包括以非表格格式输出这些结果。
26.如权利要求1或任一其他前述权利要求所述的方法,
其中,该查询的第一部分通过一系列变换来变换,该一系列变换利用由该数据处理系统管理的信息来增强该第一部分中的信息,以生成被配置成针对该至少一个数据存储执行的该第一组可执行查询,并且
其中,该查询的第二部分通过一系列变换来变换,该一系列变换利用由该数据处理系统管理的信息来增强该第二部分中的信息,以生成被配置成针对该至少一个数据存储执行的该第二组可执行查询。
27.如权利要求1或任一其他前述权利要求所述的方法,其中,生成该第一组可执行查询包括至少部分地通过以下各项来生成第一可执行查询:
使用该查询的第一部分生成中间查询表示;
使用唯一标识符信息、动态属性参考信息、视图类型信息和/或权限信息来增强该中间查询表示,以获得增强的中间查询表示;以及
使用该增强的中间查询表示生成该第一可执行查询。
28.如权利要求27所述的方法,其中,生成该第一可执行查询包括生成可执行SQL查询。
29.如权利要求27所述的方法,其中,生成该中间查询表示包括生成抽象语法树。
30.如权利要求1或任一其他前述权利要求所述的方法,其中,生成该第二组可执行查询包括至少部分地通过以下各项来生成第二可执行查询:
使用该查询的第二部分生成中间查询表示;
使用唯一标识符信息、动态属性参考信息、视图类型信息和/或权限信息来增强该中间查询表示,以获得增强的中间查询表示;以及
使用该增强的中间查询表示生成该第二可执行查询。
31.如权利要求1或任一其他前述权利要求所述的方法,
其中,执行该多个可执行查询包括执行该第一组可执行查询以获得标识多个数据实体实例的信息,并且
其中,生成该第二组一个或多个可执行查询是使用该查询的第二部分和标识该多个数据实体实例的信息来执行的。
32.如权利要求1或任一其他前述权利要求所述的方法,
其中,该至少一个属性包括多个属性,该多个属性中的每个属性被配置成从相同的其他数据实体实例的一个或多个属性继承其值,该方法进一步包括:
由该数据处理系统将该多个属性分组为单个组;
针对该单个组生成单个可执行查询;以及
由该数据处理系统执行该单个可执行查询,以使该数据处理系统获得该多个属性的属性值。
33.如权利要求1或任一其他前述权利要求所述的方法,其中,该至少一个属性包括多个属性,该多个属性中的每个属性被配置成从另一个数据实体实例的一个或多个属性继承其值,该方法进一步包括:
由该数据处理系统使用分组标准将该多个属性分组为一个或多个组;以及
针对这些组中的每一组生成单独的可执行查询,所述单独的可执行查询在由该数据处理系统执行时使该数据处理系统获得相应组的属性的属性值。
34.如权利要求33或任一其他前述权利要求所述的方法,其中,该分组标准是将这些属性中共享公共继承路径的属性分组为单个组,以便使用这些单独的可执行查询中的单个可执行查询来访问这些分组的属性的继承值。
35.如权利要求1或任一其他前述权利要求所述的方法,其中,该至少一个数据存储被配置成存储多个数据实体实例和相关联的属性值以及定义不同数据实体实例之间的关系的信息,其中,该至少一个数据存储被配置成使用该多个数据实体实例来存储描述存储在与该数据处理系统通信地连接的计算系统的分布式网络的分布式数据库中的数据的信息。
36.如权利要求35所述的方法,其中,该至少一个数据存储被配置成针对由这些分布式计算系统的分布式数据库存储的多个数据集中的每一个、针对被配置成由这些分布式计算系统的某个系统部分执行的多个软件应用程序的每一个、或针对这些分布式计算系统的每一个或多个系统部分来存储该多个数据实体实例中的数据实体实例。
37.如权利要求1或任一其他前述权利要求所述的方法,其中,该查询是声明性查询。
38.一种数据处理系统,包括:
至少一个计算机硬件处理器;以及
至少一种非暂态计算机可读存储介质,该至少一种非暂态计算机可读存储介质存储处理器可执行指令,这些指令在由该至少一个计算机硬件处理器执行时使该至少一个计算机硬件处理器执行用于响应于查询获得数据实体的第一实例的第一属性值的方法,该方法包括:
(A)通过该数据处理系统的应用编程接口(API)获得用于访问数据的查询,该查询包括:
第一部分,该第一部分包括用于标识存储在至少一个数据存储中的该数据实体的至少第一实例的信息;以及
第二部分,该第二部分指示要获得其值的数据实体的至少一个属性;
(B)生成多个可执行查询,该多个可执行查询包括第一组一个或多个可执行查询和第二组一个或多个可执行查询,该生成包括:
使用该查询的第一部分生成该第一组可执行查询,该第一组可执行查询用于标识存储在该至少一个数据存储中的该数据实体的至少第一实例;
使用该查询的第二部分生成该第二组可执行查询,该第二组可执行查询用于获得使用该第一组可执行查询标识的该数据实体的至少第一实例的属性值,这些属性值包括该第一属性值;
(C)通过执行该多个可执行查询来获得经由该API提供的该查询的结果,这些结果至少包括该数据实体的第一实例的第一属性值;以及
(D)输出至少包括该数据实体的第一实例的第一属性值的这些结果中的至少一些结果。
39.如权利要求38所述的数据处理系统,其中,该第一组可执行查询和该第二组可执行查询包括可执行的结构化查询语言(SQL)查询。
40.如权利要求38或任一其他前述权利要求所述的数据处理系统,
其中,该第一部分包括用于标识多个数据实体中的每个数据实体的一个或多个实例的信息,该多个数据实体包括该数据实体;
其中,生成该第一组可执行查询包括:针对该多个数据实体中的每个特定数据实体生成用于标识存储在该至少一个数据存储中的该数据实体的实例的相应可执行查询。
41.如权利要求38或任一其他前述权利要求所述的数据处理系统,
其中,该至少一个属性包括该数据实体的多个属性,
其中,生成该第二组可执行查询包括针对该多个属性中的至少一些属性中的每个特定属性生成用于获得使用该第一组可执行查询标识的该数据实体的实例的该特定属性的值的相应可执行查询。
42.如权利要求41所述的数据处理系统,
其中,该多个属性包括多个动态属性,并且
其中,生成该第二组可执行查询包括:
将该多个动态属性分组为多组动态属性,这些组中的每一组具有该多个动态属性中的至少一个;以及
针对该多组动态属性中的每一组生成针对该数据实体的实例获得该组中的属性值的相应可执行查询。
43.如权利要求42所述的数据处理系统,其中,对该多个动态属性进行分组是基于这些动态属性的类型来执行的。
44.如权利要求42或43所述的数据处理系统,其中,对该多个动态属性进行分组是基于动态属性是否存储在该至少一个数据存储中的同一表中来执行的。
45.如权利要求42至44中任一项所述的数据处理系统,其中,对该多个动态属性进行分组是基于动态属性是否沿着公共继承路径继承其值来执行的。
46.如权利要求38或任一其他前述权利要求所述的数据处理系统,其中,执行该多个可执行查询包括:
执行该第一组可执行查询以获得标识该数据实体的至少第一实例的信息;以及
在执行该第一组可执行查询之后,
使用标识该数据实体的至少第一实例的信息来执行该第二组可执行查询。
47.如权利要求46所述的数据处理系统,其中,生成该第二组可执行查询是在执行该第一组可执行查询之后执行的。
48.如权利要求46所述的数据处理系统,其中,生成该第二组可执行查询是在执行该第一组可执行查询之前执行的。
49.如权利要求46或任一其他前述权利要求所述的数据处理系统,
其中,该至少一个属性包括该数据实体的多组动态属性,
其中,该第二组可执行查询包括分别对应于该多组动态属性的多个可执行查询,并且
其中,执行该第二组可执行查询包括执行该多个可执行查询中的每一个以获得相应的多个动态属性值结果。
50.如权利要求49所述的数据处理系统,进一步包括:
在执行该第二组可执行查询之后,组合该多个动态值属性结果以获得该查询的结果。
51.如权利要求38或任一其他前述权利要求所述的数据处理系统,
其中,该查询的第二部分包括内嵌视图,并且
其中,生成该第二组可执行查询包括使用该内嵌视图中指定的信息来生成可执行查询。
52.如权利要求51所述的数据处理系统,其中,该内嵌视图包括表格查询。
53.如权利要求52所述的数据处理系统,其中,该表格查询用于执行聚合函数。
54.如权利要求51所述的数据处理系统,其中,该内嵌视图指定内部和外部连接键。
55.如权利要求38或任一其他前述权利要求所述的数据处理系统,其中,该数据实体的该至少一个属性包括至少一个静态属性和至少一个动态属性。
56.如权利要求38或任一其他前述权利要求所述的数据处理系统,其中,该数据实体的该至少一个属性包括第一动态属性,该第一动态属性被配置成从第二数据实体的属性继承其值。
57.如权利要求38或任一其他前述权利要求所述的数据处理系统,其中,该查询的第二部分指示包括该至少一个属性的属性层次。
58.如权利要求57所述的数据处理系统,其中,该查询的第二部分使用嵌套来指示该属性层次的至少一部分。
59.如权利要求57所述的数据处理系统,其中,该查询的第二部分使用递归来指示该属性层次的至少一部分。
60.如权利要求57所述的数据处理系统,其中,输出这些结果中的至少一些结果包括:
以与该属性层次相对应的分层格式来格式化这些结果中的该至少一些结果;以及
以该分层格式输出这些结果中的该至少一些结果。
61.如权利要求38或任一其他前述权利要求所述的数据处理系统,其中,输出这些结果中的该至少一些结果包括以分层格式输出这些结果中的该至少一些结果。
62.如权利要求38或任一其他前述权利要求所述的数据处理系统,其中,输出这些结果中的该至少一些结果包括以非表格格式输出这些结果。
63.如权利要求38或任一其他前述权利要求所述的数据处理系统,
其中,该查询的第一部分通过一系列变换来变换,该一系列变换利用由该数据处理系统管理的信息来增强该第一部分中的信息,以生成被配置成针对该至少一个数据存储执行的该第一组可执行查询,并且
其中,该查询的第二部分通过一系列变换来变换,该一系列变换利用由该数据处理系统管理的信息来增强该第二部分中的信息,以生成被配置成针对该至少一个数据存储执行的该第二组可执行查询。
64.如权利要求38或任一其他前述权利要求所述的数据处理系统,其中,生成该第一组可执行查询包括至少部分地通过以下各项来生成第一可执行查询:
使用该查询的第一部分生成中间查询表示;
使用唯一标识符信息、动态属性参考信息、视图类型信息和/或权限信息来增强该中间查询表示,以获得增强的中间查询表示;以及
使用该增强的中间查询表示生成该第一可执行查询。
65.如权利要求64所述的数据处理系统,其中,生成该中间查询表示包括生成抽象语法树。
66.如权利要求38或任一其他前述权利要求所述的数据处理系统,其中,生成该第二组可执行查询包括至少部分地通过以下各项来生成第二可执行查询:
使用该查询的第二部分生成中间查询表示;
使用唯一标识符信息、动态属性参考信息、视图类型信息和/或权限信息来增强该中间查询表示,以获得增强的中间查询表示;以及
使用该增强的中间查询表示生成该第二可执行查询。
67.如权利要求38或任一其他前述权利要求所述的数据处理系统,
其中,执行该多个可执行查询包括执行该第一组可执行查询以获得标识多个数据实体实例的信息,并且
其中,生成该第二组一个或多个可执行查询是使用该查询的第二部分和标识该多个数据实体实例的信息来执行的。
68.如权利要求38或任一其他前述权利要求所述的数据处理系统,
其中,该至少一个属性包括多个属性,该多个属性中的每个属性被配置成从相同的其他数据实体实例的一个或多个属性继承其值,该方法进一步包括:
由该数据处理系统将该多个属性分组为单个组;
针对该单个组生成单个可执行查询;以及
由该数据处理系统执行该单个可执行查询,以使该数据处理系统获得该多个属性的属性值。
69.如权利要求38或任一其他前述权利要求所述的数据处理系统,其中,该至少一个属性包括多个属性,该多个属性中的每个属性被配置成从另一个数据实体实例的一个或多个属性继承其值,该方法进一步包括:
由该数据处理系统使用分组标准将该多个属性分组为一个或多个组;以及
针对这些组中的每一组生成单独的可执行查询,所述单独的可执行查询在由该数据处理系统执行时使该数据处理系统获得相应组的属性的属性值。
70.如权利要求69或任一其他前述权利要求所述的数据处理系统,其中,该分组标准是将这些属性中共享公共继承路径的属性分组为单个组,以便使用这些单独的可执行查询中的单个可执行查询来访问这些分组的属性的继承值。
71.如权利要求38或任一其他前述权利要求所述的数据处理系统,其中,该至少一个数据存储被配置成存储多个数据实体实例和相关联的属性值以及定义不同数据实体实例之间的关系的信息,其中,该至少一个数据存储被配置成使用该多个数据实体实例来存储描述存储在与该数据处理系统通信地连接的计算系统的分布式网络的分布式数据库中的数据的信息。
72.如权利要求38所述的数据处理系统,其中,该至少一个数据存储被配置成针对由这些分布式计算系统的分布式数据库存储的多个数据集中的每一个、针对被配置成由这些分布式计算系统的某个系统部分执行的多个软件应用程序的每一个、或针对这些分布式计算系统的每一个或多个系统部分来存储该多个数据实体实例中的数据实体实例。
73.至少一种非暂态计算机可读存储介质,该至少一种非暂态计算机可读存储介质存储处理器可执行指令,这些指令在由至少一个计算机硬件处理器执行时使该至少一个计算机硬件处理器执行用于响应于查询获得数据实体的第一实例的第一属性值的方法,该方法包括:
(A)通过该数据处理系统的应用编程接口(API)获得用于访问数据的查询,该查询包括:
第一部分,该第一部分包括用于标识存储在至少一个数据存储中的该数据实体的至少第一实例的信息;以及
第二部分,该第二部分指示要获得其值的数据实体的至少一个属性;
(B)生成多个可执行查询,该多个可执行查询包括第一组一个或多个可执行查询和第二组一个或多个可执行查询,该生成包括:
使用该查询的第一部分生成该第一组可执行查询,该第一组可执行查询用于标识存储在该至少一个数据存储中的该数据实体的至少第一实例;
使用该查询的第二部分生成该第二组可执行查询,该第二组可执行查询用于获得使用该第一组可执行查询标识的该数据实体的至少第一实例的属性值,这些属性值包括该第一属性值;
(C)通过执行该多个可执行查询来获得经由该API提供的该查询的结果,这些结果至少包括该数据实体的第一实例的第一属性值;以及
(D)输出至少包括该数据实体的第一实例的第一属性值的这些结果中的至少一些结果。
74.如权利要求73所述的至少一种非暂态计算机可读存储介质,其中,该第一组可执行查询和该第二组可执行查询包括可执行的结构化查询语言(SQL)查询。
75.如权利要求73或任一其他前述权利要求所述的至少一种非暂态计算机可读存储介质,
其中,该第一部分包括用于标识多个数据实体中的每个数据实体的一个或多个实例的信息,该多个数据实体包括该数据实体;
其中,生成该第一组可执行查询包括:针对该多个数据实体中的每个特定数据实体生成用于标识存储在该至少一个数据存储中的该数据实体的实例的相应可执行查询。
76.如权利要求73或任一其他前述权利要求所述的至少一种非暂态计算机可读存储介质,
其中,该至少一个属性包括该数据实体的多个属性,
其中,生成该第二组可执行查询包括针对该多个属性中的至少一些属性中的每个特定属性生成用于获得使用该第一组可执行查询标识的该数据实体的实例的该特定属性的值的相应可执行查询。
77.如权利要求76所述的至少一种非暂态计算机可读存储介质,
其中,该多个属性包括多个动态属性,并且
其中,生成该第二组可执行查询包括:
将该多个动态属性分组为多组动态属性,这些组中的每一组具有该多个动态属性中的至少一个;以及
针对该多组动态属性中的每一组生成针对该数据实体的实例获得该组中的属性值的相应可执行查询。
78.如权利要求77所述的至少一种非暂态计算机可读存储介质,其中,对该多个动态属性进行分组是基于这些动态属性的类型来执行的。
79.如权利要求77或78所述的至少一种非暂态计算机可读存储介质,其中,对该多个动态属性进行分组是基于动态属性是否存储在该至少一个数据存储中的同一表中来执行的。
80.如权利要求77至79中任一项所述的至少一种非暂态计算机可读存储介质,其中,对该多个动态属性进行分组是基于动态属性是否沿着公共继承路径继承其值来执行的。
81.如权利要求73或任一其他前述权利要求所述的至少一种非暂态计算机可读存储介质,其中,执行该多个可执行查询包括:
执行该第一组可执行查询以获得标识该数据实体的至少第一实例的信息;以及
在执行该第一组可执行查询之后,
使用标识该数据实体的至少第一实例的信息来执行该第二组可执行查询。
82.如权利要求81所述的至少一种非暂态计算机可读存储介质,其中,生成该第二组可执行查询是在执行该第一组可执行查询之后执行的。
83.如权利要求81所述的至少一种非暂态计算机可读存储介质,其中,生成该第二组可执行查询是在执行该第一组可执行查询之前执行的。
84.如权利要求81或任一其他前述权利要求所述的至少一种非暂态计算机可读存储介质,
其中,该至少一个属性包括该数据实体的多组动态属性,
其中,该第二组可执行查询包括分别对应于该多组动态属性的多个可执行查询,并且
其中,执行该第二组可执行查询包括执行该多个可执行查询中的每一个以获得相应的多个动态属性值结果。
85.如权利要求84所述的至少一种非暂态计算机可读存储介质,进一步包括:
在执行该第二组可执行查询之后,组合该多个动态值属性结果以获得该查询的结果。
86.如权利要求73或任一其他前述权利要求所述的至少一种非暂态计算机可读存储介质,
其中,该查询的第二部分包括内嵌视图,并且
其中,生成该第二组可执行查询包括使用该内嵌视图中指定的信息来生成可执行查询。
87.如权利要求86所述的至少一种非暂态计算机可读存储介质,其中,该内嵌视图包括表格查询。
88.如权利要求87所述的至少一种非暂态计算机可读存储介质,其中,该表格查询用于执行聚合函数。
89.如权利要求86所述的至少一种非暂态计算机可读存储介质,其中,该内嵌视图指定内部和外部连接键。
90.如权利要求73或任一其他前述权利要求所述的至少一种非暂态计算机可读存储介质,其中,该数据实体的该至少一个属性包括至少一个静态属性和至少一个动态属性。
91.如权利要求73或任一其他前述权利要求所述的至少一种非暂态计算机可读存储介质,其中,该数据实体的该至少一个属性包括第一动态属性,该第一动态属性被配置成从第二数据实体的属性继承其值。
92.如权利要求73或任一其他前述权利要求所述的至少一种非暂态计算机可读存储介质,其中,该查询的第二部分指示包括该至少一个属性的属性层次。
93.如权利要求92所述的至少一种非暂态计算机可读存储介质,其中,该查询的第二部分使用嵌套来指示该属性层次的至少一部分。
94.如权利要求92所述的至少一种非暂态计算机可读存储介质,其中,该查询的第二部分使用递归来指示该属性层次的至少一部分。
95.如权利要求92所述的至少一种非暂态计算机可读存储介质,其中,输出这些结果中的至少一些结果包括:
以与该属性层次相对应的分层格式来格式化这些结果中的该至少一些结果;以及
以该分层格式输出这些结果中的该至少一些结果。
96.如权利要求73或任一其他前述权利要求所述的至少一种非暂态计算机可读存储介质,其中,输出这些结果中的该至少一些结果包括以分层格式输出这些结果中的该至少一些结果。
97.如权利要求73或任一其他前述权利要求所述的至少一种非暂态计算机可读存储介质,其中,输出这些结果中的该至少一些结果包括以非表格格式输出这些结果。
98.如权利要求73或任一其他前述权利要求所述的至少一种非暂态计算机可读存储介质,
其中,该查询的第一部分通过一系列变换来变换,该一系列变换利用由该数据处理系统管理的信息来增强该第一部分中的信息,以生成被配置成针对该至少一个数据存储执行的该第一组可执行查询,并且
其中,该查询的第二部分通过一系列变换来变换,该一系列变换利用由该数据处理系统管理的信息来增强该第二部分中的信息,以生成被配置成针对该至少一个数据存储执行的该第二组可执行查询。
99.如权利要求73或任一其他前述权利要求所述的至少一种非暂态计算机可读存储介质,其中,生成该第一组可执行查询包括至少部分地通过以下各项来生成第一可执行查询:
使用该查询的第一部分生成中间查询表示;
使用唯一标识符信息、动态属性参考信息、视图类型信息和/或权限信息来增强该中间查询表示,以获得增强的中间查询表示;以及
使用该增强的中间查询表示生成该第一可执行查询。
100.如权利要求99所述的至少一种非暂态计算机可读存储介质,其中,生成该中间查询表示包括生成抽象语法树。
101.如权利要求73或任一其他前述权利要求所述的至少一种非暂态计算机可读存储介质,其中,生成该第二组可执行查询包括至少部分地通过以下各项来生成第二可执行查询:
使用该查询的第二部分生成中间查询表示;
使用唯一标识符信息、动态属性参考信息、视图类型信息和/或权限信息来增强该中间查询表示,以获得增强的中间查询表示;以及
使用该增强的中间查询表示生成该第二可执行查询。
102.如权利要求73或任一其他前述权利要求所述的至少一种非暂态计算机可读存储介质,
其中,执行该多个可执行查询包括执行该第一组可执行查询以获得标识多个数据实体实例的信息,并且
其中,生成该第二组一个或多个可执行查询是使用该查询的第二部分和标识该多个数据实体实例的信息来执行的。
103.如权利要求73或任一其他前述权利要求所述的至少一种非暂态计算机可读存储介质,
其中,该至少一个属性包括多个属性,该多个属性中的每个属性被配置成从相同的其他数据实体实例的一个或多个属性继承其值,该方法进一步包括:
由该数据处理系统将该多个属性分组为单个组;
针对该单个组生成单个可执行查询;以及
由该数据处理系统执行该单个可执行查询,以使该数据处理系统获得该多个属性的属性值。
104.如权利要求73或任一其他前述权利要求所述的至少一种非暂态计算机可读存储介质,其中,该至少一个属性包括多个属性,该多个属性中的每个属性被配置成从另一个数据实体实例的一个或多个属性继承其值,该方法进一步包括:
由该数据处理系统使用分组标准将该多个属性分组为一个或多个组;以及
针对这些组中的每一组生成单独的可执行查询,所述单独的可执行查询在由该数据处理系统执行时使该数据处理系统获得相应组的属性的属性值。
105.如权利要求104或任一其他前述权利要求所述的至少一种非暂态计算机可读存储介质,其中,该分组标准是将这些属性中共享公共继承路径的属性分组为单个组,以便使用这些单独的可执行查询中的单个可执行查询来访问这些分组的属性的继承值。
106.如权利要求73或任一其他前述权利要求所述的至少一种非暂态计算机可读存储介质,其中,该至少一个数据存储被配置成存储多个数据实体实例和相关联的属性值以及定义不同数据实体实例之间的关系的信息,其中,该至少一个数据存储被配置成使用该多个数据实体实例来存储描述存储在与该数据处理系统通信地连接的计算系统的分布式网络的分布式数据库中的数据的信息。
107.如权利要求73所述的至少一种非暂态计算机可读存储介质,其中,该至少一个数据存储被配置成针对由这些分布式计算系统的分布式数据库存储的多个数据集中的每一个、针对被配置成由这些分布式计算系统的某个系统部分执行的多个软件应用程序的每一个、或针对这些分布式计算系统的每一个或多个系统部分来存储该多个数据实体实例中的数据实体实例。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US202163143895P | 2021-01-31 | 2021-01-31 | |
US63/143,895 | 2021-01-31 | ||
PCT/US2022/014270 WO2022165146A1 (en) | 2021-01-31 | 2022-01-28 | Systems and methods for accessing data entities managed by a data processing system |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116917882A true CN116917882A (zh) | 2023-10-20 |
Family
ID=80787415
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202280012563.5A Pending CN116917882A (zh) | 2021-01-31 | 2022-01-28 | 用于访问由数据处理系统管理的数据实体的系统和方法 |
Country Status (9)
Country | Link |
---|---|
US (1) | US11921710B2 (zh) |
EP (1) | EP4285236A1 (zh) |
JP (1) | JP2024504556A (zh) |
CN (1) | CN116917882A (zh) |
AU (1) | AU2022214314A1 (zh) |
CA (1) | CA3206880A1 (zh) |
DE (1) | DE112022000920T5 (zh) |
MX (1) | MX2023008984A (zh) |
WO (1) | WO2022165146A1 (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116541377B (zh) * | 2023-04-27 | 2024-05-14 | 阿里巴巴(中国)有限公司 | 任务的物化视图的处理方法、系统和电子设备 |
Family Cites Families (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5966072A (en) | 1996-07-02 | 1999-10-12 | Ab Initio Software Corporation | Executing computations expressed as graphs |
US6704743B1 (en) | 1999-09-13 | 2004-03-09 | Copernus, Inc. | Selective inheritance of object parameters in object-oriented computer environment |
US7149733B2 (en) * | 2002-07-20 | 2006-12-12 | Microsoft Corporation | Translation of object queries involving inheritence |
US7716630B2 (en) | 2005-06-27 | 2010-05-11 | Ab Initio Technology Llc | Managing parameters for graph-based computations |
US7934194B2 (en) | 2006-10-17 | 2011-04-26 | The Mathworks, Inc. | User-defined hierarchies of user-defined classes of graphical objects in a graphical modeling environment |
US20080222129A1 (en) | 2007-03-05 | 2008-09-11 | Komatsu Jeffrey G | Inheritance of attribute values in relational database queries |
US8682936B2 (en) | 2010-12-15 | 2014-03-25 | Microsoft Corporation | Inherited entity storage model |
US10956415B2 (en) * | 2016-09-26 | 2021-03-23 | Splunk Inc. | Generating a subquery for an external data system using a configuration file |
US11599541B2 (en) * | 2016-09-26 | 2023-03-07 | Splunk Inc. | Determining records generated by a processing task of a query |
JP7132918B2 (ja) | 2016-11-09 | 2022-09-07 | アビニシオ テクノロジー エルエルシー | データ要素間の関係を決定するためのシステム及び方法 |
US10496737B1 (en) | 2017-01-05 | 2019-12-03 | Massachusetts Mutual Life Insurance Company | Systems, devices, and methods for software coding |
US20180232403A1 (en) * | 2017-02-15 | 2018-08-16 | Ca, Inc. | Exposing databases via application program interfaces |
US11163759B2 (en) * | 2017-12-21 | 2021-11-02 | Salesforce.Com, Inc. | Predicting entities for database query results |
EP3623960A1 (en) * | 2018-09-14 | 2020-03-18 | Adarga Limited | Method and system for retrieving and displaying data from an entity network database |
EP4404052A3 (en) | 2019-01-22 | 2024-09-04 | Ab Initio Technology LLC | Finite state machines for implementing workflows for data objects managed by a data processing system |
US11226959B2 (en) * | 2019-04-03 | 2022-01-18 | Unitedhealth Group Incorporated | Managing data objects for graph-based data structures |
US11256604B2 (en) | 2020-01-24 | 2022-02-22 | Splunk Inc. | Multiple modes of data collection and analysis in a microservices-based architecture |
US11580113B2 (en) * | 2020-04-20 | 2023-02-14 | Optum, Inc. | Generating proactive audiovisual queries using virtual assistant software applications |
US11507444B1 (en) * | 2021-06-23 | 2022-11-22 | Dell Products, L.P. | Platform framework error handling |
-
2022
- 2022-01-28 MX MX2023008984A patent/MX2023008984A/es unknown
- 2022-01-28 EP EP22704676.0A patent/EP4285236A1/en active Pending
- 2022-01-28 JP JP2023534631A patent/JP2024504556A/ja active Pending
- 2022-01-28 CN CN202280012563.5A patent/CN116917882A/zh active Pending
- 2022-01-28 AU AU2022214314A patent/AU2022214314A1/en active Pending
- 2022-01-28 WO PCT/US2022/014270 patent/WO2022165146A1/en active Application Filing
- 2022-01-28 US US17/587,181 patent/US11921710B2/en active Active
- 2022-01-28 CA CA3206880A patent/CA3206880A1/en active Pending
- 2022-01-28 DE DE112022000920.9T patent/DE112022000920T5/de active Pending
Also Published As
Publication number | Publication date |
---|---|
CA3206880A1 (en) | 2022-08-04 |
EP4285236A1 (en) | 2023-12-06 |
MX2023008984A (es) | 2023-10-25 |
JP2024504556A (ja) | 2024-02-01 |
WO2022165146A1 (en) | 2022-08-04 |
DE112022000920T5 (de) | 2024-02-01 |
US11921710B2 (en) | 2024-03-05 |
US20220245140A1 (en) | 2022-08-04 |
AU2022214314A1 (en) | 2023-06-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Hausenblas et al. | Apache drill: interactive ad-hoc analysis at scale | |
US8180758B1 (en) | Data management system utilizing predicate logic | |
US7464084B2 (en) | Method for performing an inexact query transformation in a heterogeneous environment | |
US9396284B2 (en) | Method and system for implementing efficient updatable relational views over XML data | |
US6915303B2 (en) | Code generator system for digital libraries | |
US20210374146A1 (en) | Framework and metadata artefacts for updating data artefacts | |
US20230091845A1 (en) | Centralized metadata repository with relevancy identifiers | |
US20200334244A1 (en) | Bidirectional mapping of hierarchical data to database object types | |
Batra | SQL primer | |
US20240256576A1 (en) | Data processing system with manipulation of logical dataset groups | |
US20220245140A1 (en) | Systems and methods for accessing data entities managed by a data processing system | |
EP1383055A2 (en) | Map and data location provider | |
Chen | Database Design and Implementation | |
US20100205197A1 (en) | Two-valued logic database management system with support for missing information | |
US20220245154A1 (en) | Techniques for managing data in a data processing system using data entities and inheritance | |
Domdouzis et al. | Object and Object Relational Databases | |
EP4170516A1 (en) | Metadata elements with persistent identifiers | |
CN116868182A (zh) | 可操纵逻辑数据集组的数据处理系统 | |
Anderson et al. | The Role of the Data Warehouse in the Archive | |
Lake et al. | Object and Object Relational Databases | |
Iwaihara | Access control of XML documents and business rule processing for advanced information exchange |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40101888 Country of ref document: HK |