CN105518676B - 查询任意半结构化数据的通用的sql增强以及高效地支持这样的增强的技术 - Google Patents

查询任意半结构化数据的通用的sql增强以及高效地支持这样的增强的技术 Download PDF

Info

Publication number
CN105518676B
CN105518676B CN201480049530.3A CN201480049530A CN105518676B CN 105518676 B CN105518676 B CN 105518676B CN 201480049530 A CN201480049530 A CN 201480049530A CN 105518676 B CN105518676 B CN 105518676B
Authority
CN
China
Prior art keywords
semi
structured data
data
structured
operator
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.)
Active
Application number
CN201480049530.3A
Other languages
English (en)
Other versions
CN105518676A (zh
Inventor
刘振华
B·哈默施密特
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Oracle International Corp
Original Assignee
Oracle International Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Oracle International Corp filed Critical Oracle International Corp
Publication of CN105518676A publication Critical patent/CN105518676A/zh
Application granted granted Critical
Publication of CN105518676B publication Critical patent/CN105518676B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/80Information retrieval; Database structures therefor; File system structures therefor of semi-structured data, e.g. markup language structured data such as SGML, XML or HTML
    • G06F16/83Querying
    • G06F16/835Query processing
    • G06F16/8365Query optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2452Query translation
    • G06F16/24524Access plan code generation and invalidation; Reuse of access plans

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本文描述的方法为数据库服务器提供了一种用于支持对越来越多的半结构化数据格式中的任何一个进行存储和检索的高效方式。在一个实施例中,提供了一组通用的半结构化数据操作符,其使得用户能够对以多个半结构化数据格式中的任何一个存储的数据进行查询、更新和验证。在该上下文中,“通用的”半结构化数据操作符是指被配置为对任意数量的不同半结构化数据格式进行操作的操作符。例如,根据一个实施例,可以使用相同的一组通用的半结构化数据操作符来对根据SML、JSON和任意数量的其它半结构化数据格式存储的数据进行操作。

Description

查询任意半结构化数据的通用的SQL增强以及高效地支持这 样的增强的技术
技术领域
本公开一般涉及用于支持半结构化数据在关系数据库环境中的存储和操作的增强。
背景技术
关系数据库管理系统(RDBMS)已经非常成功地提供了对结构化数据的数据管理。然而,虽然RDBMS已经成为用于存储和操作结构化数据的标准,但是用于在多种多样的应用之间描述并存储数据的半结构化数据格式正变得越来越流行。半结构化数据是这样的数据:其中,该数据中所包含的语义元素的值可以由组织并可能描述语义元素的标签或其它标记来标记或描绘,但是其可能不符合更正式的数据模型,例如典型地与关系数据库相关联的关系数据模型。广泛使用的半结构化数据格式的例子包括可扩展标记语言(XML)和Java脚本对象注释(JSON)。
因为半结构化数据可以不符合任何特定的正式结构,所以在RDBMS中存储半结构化数据呈现了诸多挑战。第一,关系数据库依赖于关系数据模型,其期望在能够存储并操作数据之前数据具有定义的并且静态的模式。第二,在RDBMS中管理数据通常是使用结构化查询语言(SQL)来实现的;然而,SQL并没有被设计得具有用于查询半结构化数据的原生功能。相反,半结构化数据格式通常可能与单独的特定于数据格式的查询语言(例如用于XML格式化的数据的XQuery和用于JSON格式化的数据的JSONPath)相关联。
为了解决这些问题和其它问题,不同的标准已经演进或者当前正演进以在RDBMS中提供对特定的半结构化数据格式的支持。例如,诸如用于SML数据的SQL/XML和用于JSON数据的SQL/JSON之类的标准已经被开发或当前正处于开发之中,以提供对基于这些特定的半结构化数据格式存储在RDBMS中的数据进行查询的能力。诸如SQL/XML之类的标准通常提供一组基于SQL的操作符,其使得用户能够管理存储在RDBMS中的某些半结构化数据格式。
诸如SQL/XML之类的特定于格式的标准已经成功地使得用户能够管理存储在RDBMS中的特定的半结构化数据格式。然而,特定于格式的标准仅仅可应用于特定的半结构化数据格式,并且一般不能延伸到对未来可能受欢迎的其它半结构化数据格式进行管理。在一个方法中,可以开发新的特定于半结构化数据格式的数据类型和操作符来使用户能够管理每一个新引进的半结构化数据格式。然而,从标准采用和RDBMS实现这两个角度来看,在每次引入新的半结构化数据格式时就添加新的特定于数据格式的数据类型和操作符集合是高代价的。此外,许多RDBMS客户端(例如JDBC、ODP和数据库导入/导出功能)可能需要修改,以便在每个新的特定于数据格式的数据类型和操作符集合被添加的情况下提供客户端可操作性。
本节中所描述的方法是可能实行的方法,但是未必是之前已经设想或实行的方法。因此,除非另外指出,否则不应当仅仅凭借本节中描述的方法包括在本节中而假设它们中的任何一个适合作为现有技术。
附图说明
在附图中:
图1是示出了用于处理包括通用的半结构化数据操作符的查询表达式的步骤的流程图;
图2是示出了用于使用特定于半结构化数据格式的实现模块来对包含在数据库查询中的半结构化数据表达式进行编译的步骤的流程图;
图3是示出了可以实现本发明的实施例的计算机系统的方框图。
具体实施方式
在以下描述中,为了解释的目的,给出了大量的具体细节以便提供对各种发明的实施例的透彻理解。然而,对于本领域技术人员将清楚的是可以在不具有这些具体细节的情况下实施本发明。
1.0 总体概述
2.0 示例性实现
2.1 用于查询半结构化数据的操作符
2.1.1 值操作符
2.1.2 存在操作符
2.1.3 查询操作符
2.1.4 验证操作符
2.1.5 表函数
2.2 用于根据关系数据生成半结构化数据的操作符
2.2.1 对象操作符
2.2.2 聚合操作符
2.3 用于更新半结构化数据的操作符
2.3.1 更新操作符
2.4 用于在数据库服务器中高效地支持通用的半结构化操作
符的技术
2.4.1 操作符实现
2.4.2 操作符模式
2.4.3 其它增强
3.0 硬件概述
1.0总体概述
本文描述的方法为数据库服务器提供了一种用于支持对越来越多的半结构化数据格式中的任何一个进行存储和检索的高效方式。在一个实施例中,提供了一组通用的半结构化数据操作符,其使得用户能够对基于多个半结构化数据格式中的任何一个存储的数据进行查询、更新和验证。在该上下文中,“通用的”半结构化数据操作符是指被配置为对任意数量的不同半结构化数据格式进行操作的数据操作符。例如,根据一个实施例,可以使用相同的一组通用的半结构化数据操作符来对根据XML、JSON和任意数量的其它半结构化数据格式存储的数据进行操作。
在实施例中,通用的半结构化数据操作符的使用允许用户使用标准的数据类型(例如varchar、varbinary、CLOB或BLOB数据类型)来在数据库表中存储半结构化数据。在使用标准的数据类型将半结构化数据存储到数据库表中之后,通用的半结构化数据操作符使得用户能够指定半结构化查询语言表达式来对底层的半结构化数据执行期望的操作。
本文描述的方法对诸如用于XML数据的SQL/XML标准和用于JSON数据的SQL/JSON实现之类的特定于半结构化数据格式的方案进行了通用化和简化。例如,通过使用被配置为对任意数量的不同半结构化数据格式进行操作的单组通用数据操作符,可以避免在每次想要对新的半结构化数据格式进行支持时添加新的特定于格式的数据类型和特定于格式的数据操作符。此外,可以使用与通用的SQL引擎处理兼容的方法来高效地执行通用的半结构化操作符。例如,一旦数据库服务器使用如本文中描述的技术之类的技术来管理半结构化数据,半结构化数据操作就可以利用传统的数据库服务器所提供的益处,例如事务、安全、复制、分割、并行执行和操作完整性。
2.0实现例子
在一个实施例中,提供了使得用户能够对基于任意数量的不同半结构化数据格式存储在数据库中的数据进行查询、更新和验证的一组通用的半结构化数据操作符。此外,呈现了解释数据库服务器可以如何高效地设计并实现这些操作符的技术。
图1是根据实施例的用于处理包括通用的半结构化数据操作符的查询表达式的步骤的流程图。其它实施例并不包括图1中所示的所有步骤。在步骤110中,数据库服务器接收包括通用的半结构化数据操作符的查询。查询表达式可以是对于存储在一个或多个数据库表中的半结构化数据的集合的查询。例如,半结构化数据操作符可以是下文在单独的节中更详细描述的通用的半结构化数据操作符中的一个。
在步骤120中,数据库服务器确定查询表达式包括半结构化数据操作符。确定查询表达式包括半结构化数据操作符可以包括:识别半结构化数据操作符的一个或多个参数,所述一个或多个参数包括标识特定的半结构化数据格式的参数。例如,半结构化数据操作符可以包括指示查询表达式针对被存储成XML数据、JSON数据的半结构化数据或基于任何其它半结构化数据格式存储的半结构化数据的参数。
在步骤130中,数据库服务器对半结构化数据执行半结构化数据操作符所指定的操作。例如,所述操作可以是用于检索某些数据的查询操作、被配置为更新存储在一个或多个表中的半结构化数据的一个或多个分量的更新操作、或者用于验证指定的数据是否符合特定的半结构化数据格式的操作。数据库服务器可以使用针对特定的半结构化数据格式和/或针对特定的半结构化数据查询语言开发的库来执行所述操作。例如,库可以是向数据库服务器进行注册的自含式模块,如本文进一步描述的。
2.1用于查询半结构化数据的操作符
在一个实施例中,一组通用的半结构化数据操作符包括被配置为使得用户能够查询存储在一个或多个数据库表中的半结构化数据的一个或多个操作符。例如,用于查询半结构化数据的操作符可以使得用户能够从半结构化数据获得值,确定在半结构化数据中是否存在一个或多个条件,从存储的数据提取某些数据元素以及下文描述的其它操作。
2.1.1值操作符
在一个实施例中,一组通用的半结构化数据操作符可以包括“值”操作符。值操作符一般可以被配置为将指定的半结构化数据查询语言表达式应用于半结构化输入数据。将半结构化查询语言表达式应用于输入数据的结果可以被转换(cast)成指定的SQL内置数据类型(例如varchar、CLOB或LONG)的标量值。例如,可以在SQL SELECT、GROUP BY、ORDER BY子句或者可能期望SQL内置数据类型的任何其它SQL语句中指定值操作符。
在实施例中,半结构化数据值操作符的输入参数可以包括以下中的一个或多个:半结构化数据格式的名称、相关联的半结构化查询语言的名称、半结构化查询语言表达式、对半结构化输入数据的引用、作为输出的SQL内置数据类型以及用于控制操作符的错误处理行为的其它选项。
例如,下面的SQL语句示出了半结构化数据值操作符“SSD_VALUE”的示例性使用:
SELECT SSD_VALUE(‘JSON’,‘json_path’,‘$.person.address.city’,
PASSING t.jtext RETURNING VARCHARNULL ON ERROR)
FROM TAB t
ORDER BY SSD_VALUE(‘JSON’,‘json_path’,
‘$.person.address.city’,PASSING t.jtext RETURNING VARCHARNULL ONERROR)
在该例子中,值操作符用在SELECT子句中,并且包括分别指定半结构化数据格式的名称、半结构化查询语言的名称和半结构化查询语言表达式的参数“JSON”、“json_path”和“$.person.address.city”。例如,SELECT子句中的值操作符可以被配置为将“json_path”语言表达式“$.person.address.city”应用于存储在表t的jtext列中的半结构化输入数据。将该表达式应用于该输入数据的结果被转换成SQL VARCHAR数据类型。额外地,指定了错误控制选项“NULL ON ERROR”,其指示如果在处理该半结构化查询语言表达式期间出现错误则返回NULL值。
该示例性查询包括ORDER BY子句中的第二值操作符。第二值操作符包括与第一值操作符相同的参数,并且可以用于使用原生SQL ORDER BY操作符来对SELECT子句的结果进行排序。
虽然在上面的例子中以及在下文的其它例子中使用了JSON数据格式,但是对通用的半结构化数据操作符的使用并不限于JSON;一般地,本文描述的半结构化数据操作符可以用于对用任何半结构化数据格式存储的数据进行查询、更新和验证。
2.1.2存在操作符
在一个实施例中,一组通用的半结构化数据操作符可以包括“存在”操作符。存在操作符一般可以被配置为将指定的半结构化查询语言表达式应用于半结构化输入数据,并基于该表达式是否返回一个或多个项而返回一值。如果求值该表达式的结果返回一个或多个项,那么该操作符可以返回SQL布尔真值。如果在输入数据上对该表达式求值的结果不返回任何数据项,那么该操作符可以返回SQL布尔假值。
例如,可以在SQL WHERE子句中或者在期望SQL条件表达式的SQL CASE表达式的条件表达式中使用存在操作符。存在操作符可以被配置为检索存储了半结构化数据的列的一个或多个行,并且确定存储在每个行中的数据是否满足一个或多个指定的条件。在一个实施例中,半结构化数据存在操作符的输入参数可以包括以下中的一个或多个:半结构化数据格式的名称、相关联的半结构化查询语言的名称、半结构化查询语言表达式以及半结构化输入数据的引用。
例如,下面的SQL语句包括半结构化数据存在操作符“SSD_EXISTS”的示例性使用:
SELECT t.jtext
FROM TAB t
WHERE SSD_EXISTS(‘JSON’,‘json_path’,
‘$.person.hobbies?.=”tennis”?’,PASSING t.jtext)
在该示例性查询中,存在操作符SSD_EXISTS包括分别指定半结构化数据格式的名称、半结构化数据查询语言的名称和半结构化查询语言表达式的参数“JSON”、“json_path”和“$.person.hobbies?.=”tennis”?”。在SSD_EXISTS操作符执行期间,数据库服务器可以被配置为将“json_path”查询语言表达式“$.person.hobbies?.=”tennis”?”应用于存储JSON文本的列t.jtext的一个或多个行。例如,对于t.jtext列中的、谓语“$.person.hobbies?.=”tennis”?”返回至少一个数据项的每个行而言,该操作符可以返回布尔真值。如果存在操作符SSD_EXISTS对于特定的行返回布尔真值,那么SELECT子句可以返回包含JSON数据的行;否则,不返回该行。
2.1.3查询操作符
在实施例中,一组通用的半结构化数据操作符可以包括“查询”操作符。查询操作符一般可以被配置为将半结构化查询语言表达式应用于指定的半结构化输入数据,并将求值的结果转换成指定的SQL内置数据类型。在实施例中,查询操作符的输入参数可以包括以下中的一个或多个:半结构化数据格式的名称、相关联的半结构化查询语言的名称、半结构化查询语言表达式、输入的半结构化数据的引用以及用于输出的SQL内置数据类型。
在实施例中,可以在SQL SELECT子句中使用半结构化数据查询操作符。例如,查询操作符可以用于提取存储的半结构化数据的一个或多个片段,并将这些片段作为指定的SQL数据类型进行返回。与上面描述的值操作符(其被配置为返回来自半结构化数据的标量值)相反,查询操作符可以返回格式化的半结构化数据。
以下SQL语句示出了半结构化数据查询操作符“SSD_QUERY”的示例性使用:
SELECT SSD_QUERY(‘JSON’,‘json_path’,‘$.person.address’,PASSING
t.jtext RETURNING CLOB)
FROM TAB t
在该例子中,查询操作符SSD_VALUE包括分别指定半结构化数据格式的名称、半结构化数据查询语言的名称和半结构化查询语言表达式的参数“JSON”、“json_path”和“$.person.address”。例如,SSD_QUERY可以被配置为将“json_path”查询语言表达式“$.person.address”应用于存储JSON文本的列t.jtext并将求值的结果作为CLOB进行返回,所述结果包含表示在输入数据中发现的“address”对象的实例的半结构化数据。
2.1.4验证操作符
在一个实施例中,一组通用的半结构化数据操作符可以包括“验证”操作符。验证操作符一般可以被配置为验证半结构化输入数据与特定的半结构化数据格式相符。例如,如果验证操作符确定指定的输入数据符合特定的半结构化数据格式,那么该操作符可以返回布尔真值。类似地,如果验证操作符确定指定的输入数据不符合特定的半结构化数据格式,那么该操作符可以返回布尔假值。例如,验证操作符可以用作SQL WHERE子句的一部分或者用作SQL CHECK约束的一部分,以在将输入数据存储在数据库列中之前对其进行认证。
以下SQL语句示出了半结构化验证操作符“SSD_IS_VALID”的示例性使用:
SELECT COUNT(*)
FROM TAB t
WHERE SSD_IS_VALID(t.varcharjtext,‘JSON’)
在该例子中,验证操作符SSD_IS_VALID用在WHERE子句中并且包括指定存储半结构化数据的列和半结构化数据格式的名称的参数“t.varcharjtext”和“JSON”。例如,WHERE子句中的SSD_IS_VALID操作符可以被配置为确定存储在t.varcharjtext列的每个行中的数据是否被有效地格式化为JSON数据。例如,有效性检验一般可以包括确定所存储的数据是否符合特定的半结构化数据格式的一定的语法要求。在该示例性查询中,如果SSD_IS_VALID操作符返回指示存储在特定行中的数据被有效地格式化的布尔真值,那么在SELECT子句中,该行可以包括在COUNT聚合中。
2.1.5表函数
在实施例中,一组通用的半结构化数据操作符可以包括半结构化数据表函数。表函数一般可以被配置为将半结构化查询语言表达式的结构映射到该函数所返回的虚拟表的一个或多个关系行和列中。换句话说,半结构化数据表函数可以被配置为提供半结构化数据的关系投影。例如,表函数可以包括在SQL FROM子句中,以根据半结构化数据创建源表,并且SELECT子句可以对其进行操作。
在实施例中,半结构化数据表函数可以包括一个或多个参数,所述一个或多个参数包括行表达式和一组列表达式。行表达式可以指定要被应用于半结构化输入数据的半结构化查询语言表达式,其中,对该表达式求值的结果作为一组行被迭代。每个列表达式可以将半结构化查询语言表达式应用于来自行表达式的输出行,以创建表的一个或多个列。表函数的参数还可以包括半结构化数据格式的名称和相关联的半结构化查询语言的名称中的一个或多个。
例如,下面的SQL语句包括半结构化数据表函数“SSD_TABLE”的例子:
在上面的例子中,表函数SSD_TABLE包括“json_path”语言行表达式“$.person.contact.phonelist”,该表达式的求值被映射到名称为“Type”和“Number”的两个varchar列,每一个都存储JSON文本数据。存储在这两个列中的值是基于各自的列表达式“$.type”和“$.actual-number”来获得的。例如,对示例性语句进行求值可以产生电话列表的阵列。利用名称“vt”对所产生的虚拟表进行别名化,在SELECT子句中也对名称“vt”进行引用。
如上面指示的,表函数可以包括行表达式,其生成一组行,一个或多个列表达式进一步对所述一组行进行操作以创建一个或多个列。在一个实施例中,半结构化数据表函数可以被配置,使得行表达式将半结构化数据的子分量的指针或其它引用传递到列表达式以供进一步处理。用这种方式,表函数可以避免将具体化形式的半结构化数据从行表达式传递到列表达式,从而避免了对底层半结构化数据进行具体化和发送以供列表达式处理的开销。
在实施例中,半结构化表函数可以被链接,以表示半结构化数据的任意层次结构,例如数据项之间的“主/细节”关系。可以使用SSD_REFERENCE特殊类型来引用中间的半结构化数据表示,SSD_REFERENCE特殊类型可以用于链接两个或更多个表函数,但是可以直接地或可以不直接地在SQL语句的其它部分中被引用。
例如,下面的SQL语句包括基于列“t.jtext”链接半结构化数据表函数的例子,列“t.jtext”存储了关于采购订单线项目和部分的JSON格式化的信息,其中,线项目和部分可以展示与彼此的层次关系:
在该例子中,第一个表函数SSD_TABLE将对“json_path”表达式“$.purchaseorder.lineitem”求值的结果映射到具有名称为“ItemName”和“part”的列的虚拟表“vt”中。创建“part”列的列表达式指定数据将作为SSD_REFERENCE特殊类型被存储。类型SSD_REFERENCE的“part”列随后能够由第二个SSD_TABLE函数使用“PASSING vt.part”参数来引用。用这种方式,可以以关系格式来提取并存储“parts”与“partName”值之间的层次关系。
在一个实施例中,可以通过将事件流状态的引用传递到对该数据进行操作的任何后续表函数来实现半结构化数据引用类型(例如上面描述的示例性SSD_REFERENCE类型)。用这种方式,其它表函数可以在事件流状态中处理该数据,而不需要将中间结果具体化为另一半结构化数据实例。
2.2用于根据关系数据生成半结构化数据的操作符
在实施例中,一组通用的半结构化数据操作符可以包括被配置为根据关系数据生成半结构化数据的一个或多个操作符。例如,用于根据关系数据生成半结构化数据的操作符可以包括对象操作符和聚合操作符,如下面更详细描述的。
2.2.1半结构化数据对象操作符
在一个实施例中,一组通用的半结构化数据操作符可以包括半结构化数据“对象”操作符。半结构化数据对象操作符一般可以被配置为基于具有相关联的表达式名称的一组SQL表达式来生成表示半结构化数据的数据对象。SQL表达式名称用作结构化“标签”(例如,区分半结构化数据中的语义元素的标签),并且SQL表达式的值用作结构化标签的值。
例如,以下SQL语句示出了半结构化数据对象操作符“SSD_OBJECT”的例子:
SELECT SSD_OBJECT(‘JSON’,col1AS“tag1”,col2AS“tag2”)
FROM relational_tab/*col1,col2are columns of the table relational_tab*/
在该例子中,半结构化对象操作符SSD_OBJECT被配置为针对关系表relational_tab的每个行基于JSON数据格式所指定的结构生成半结构化数据。例如,示例性语句的执行可以生成JSON对象,其包括表的每个行的JSON格式的数据,例如{“tag1”:col1_val,“tag2”:col2_val},其中col1_val和col2_val分别表示col1和col2在每个行中的值。
2.2.2聚合操作符
在一个实施例中,一组通用的半结构化数据操作符可以包括“聚合”操作符。聚合操作符一般可以被配置为通过对根据关系表的每个行生成的半结构化数据对象实例进行聚合来生成半结构化数据对象实例的阵列。
用于特定的半结构化数据格式的数据模型不仅可以包括半结构化对象数据的根据该特定格式的表示,而且还可以包括半结构化数据对象的集合的概念。例如,XQuery序列是这样的XML数据集合的例子;类似地,JSON阵列是这样的JSON数据格式集合的例子。因此,鉴于半结构化数据对象操作符可以返回半结构化数据对象,聚合操作符可以被配置为返回半结构化数据对象的阵列或集合。
以下SQL语句示出了半结构化数据聚合操作符“SSD_OBJ_AGGREGATE”的示例性使用:
SELECT SSD_OBJ_AGGREGATE(SSD_OBJECT(‘JSON’,col1AS“tag1”,col2AS“tag2”))
FROM relational_tab/*col1,col2are columns of the relational_tab*/
在该例子中,半结构化数据对象操作符SSD_OBJECT被配置为针对关系表relational_tab的每个行基于指定的JSON格式生成半结构化数据对象。聚合操作符SSD_OBJ_AGGREGATE随后可以生成JSON阵列对象,其包含根据关系表relational_tab的每个行生成的元素{“tag1”:col1_val,“tag2”:col2_val}。
在实施例中,例如在上面的例子中,可以使用“自顶向下”的求值方法来对指定了嵌套的半结构化数据对象操作符的半结构化数据聚合操作符进行求值,以避免生成供父聚合操作符操作的半结构化数据对象操作符的重复副本。例如,对半结构化数据聚合操作符的求值可以创建一个目的地事件流,其被传递到每个嵌套的半结构化数据对象操作符,使得这些对象操作符可以将对象操作符的结果写入到事件流中。
在一个实施例中,包括半结构化数据聚合操作符和半结构化数据表函数的SQL语句由于这些操作符所执行的操作的逆特性,可以被代数地优化。例如,聚合操作符被配置为根据关系数据创建半结构化数据,而表函数被配置为根据半结构化数据创建关系数据。类似地,半结构化数据值操作符和半结构化数据对象操作符表示逆操作,并且可以在查询优化期间被代数地优化。
2.3用于更新半结构化数据的操作符
在实施例中,一组通用的半结构化数据操作符可以包括被配置为对所存储的半结构化数据进行更新的一个或多个操作符。例如,所述操作符可以包括下文更详细描述的更新操作符。
2.3.1更新操作符
在实施例中,一组通用的半结构化数据操作符可以包括“更新”操作符。更新操作符一般可以被配置为对存储在数据库的一个或多个表中的半结构化数据的指定分量进行修改、插入或删除。在实施例中,更新操作符的输入参数可以包括以下中的一个或多个:半结构化数据格式的名称、相关联的半结构化查询语言的名称以及一个或多个特定的更新操作。例如,每个更新操作可以指定半结构化查询语言表达式,其标识要被更新的数据和可能的其它参数,这取决于更新操作的类型。
例如,以下SQL语句示出了通用的半结构化数据更新操作符SSD_UPDATE的例子:
UPDATE tab t
SET t.jtext USING
SSD_UPDATE(‘json’,‘json_path’,
set(‘$.person.firstname’,‘john’),
set(‘$.person.lastname’,‘smith’),
delete(‘$.person.salary’),
insert(‘$.person.phone’,‘(555)555‐8619’))
在该例子中,更新操作符SSD_UPDATE用作SQL_SET操作符的一部分,并且被配置为将半结构化查询语言求值应用于半结构化输入数据,以对半结构化数据的各个分量进行更新、删除和插入。该例子中的SSD_UPDATE操作符包括由set、delete和insert参数指示的用于更新、删除和插入数据的四个不同操作。应用SSD_UPDATE操作符的结果可以对存储在varchar、varbinary、CLOB或BLOB列中的底层半结构化数据进行更新。
2.4用于在数据库服务器中高效地支持通用的半结构化操作符的技术
2.4.1操作符实现
根据实施例,本文描述的一组通用的半结构化数据操作符可以被实现成数据库服务器内核的原生操作符。通过将这些操作符实现成原生操作符而不是实现成例如用户定义的函数,可以提高数据库性能。类似地,根据一个实施例,通用的半结构化数据表函数可以被实现成数据库服务器内核的原生行源,并且被优化以处理基于表的操作。一般地,行源是一种迭代的控制结构,其以迭代的方式处理一组输入行(例如,包含半结构化数据的源表的一个或多个行)并产生一组输出行(例如,包含处理后的半结构化数据的一个或多个关系行)。
在实施例中,对于想要获得支持的每个半结构化数据格式和半结构化数据查询语言,可以将自包含的实现模块单独地链接到数据库服务器中。在该上下文中,自包含的实现模块可以暴露一组接口,一组通用的半结构化数据操作符可以调用所述一组接口以便实现用于特定的半结构化数据格式的通用的半结构化数据操作符的操作。数据库服务器可以为通用的半结构化数据操作符提供调用所述实现模块的框架,可以单独地向数据库服务器注册所述实现模块。
在实施例中,用于特定的半结构化数据格式的自包含的实现模块包括编译器接口,其被配置为对包含在查询中的半结构化查询语言表达式进行编译。编译器接口可以被配置为将产生的用于执行半结构化查询语言表达式的计划作为调用包含所述表达式的一个或多个半结构化操作符的SQL查询的执行计划的一部分而存储起来。通过将编译器接口实现成所述自包含的实现模块的一部分,数据库服务器可以避免在每个行的基础上对半结构化查询语言表达式进行的运行时编译。例如,如果查询在表的许多行上进行操作并且每个行上的操作涉及相同的半结构化查询语言表达式,那么可以使用实现模块的编译器接口来生成用于实现该查询语言表达式的字节码指令,并且可以将字节码缓存在查询计划中,以供数据库服务器运行时执行。
图2是示出了用于使用特定于半结构化数据格式的实现模块来对包含在数据库查询中的半结构化数据表达式进行编译的步骤的流程图。在步骤210中,数据库服务器接收数据库查询,其包括与特定的半结构化数据格式相关联的半结构化查询语言表达式。例如,半结构化查询语言表达式可以被指定成包括在该查询中的半结构化数据操作符的参数。例如,半结构化数据操作符可以包括本文描述的操作符中的一个,例如值操作符、存在操作符、查询操作符等。在实施例中,特定的半结构化数据格式也可以被指定成半结构化数据操作符的参数,或者可以基于查询表达式的语法来确定该数据格式。
在步骤220中,数据库服务器基于半结构化数据格式来选择特定的实现模块。例如,如果确定特定的半结构化数据格式是JSON数据格式,那么数据库服务器可以选择提供了用于处理JSON查询表达式的功能的实现模块。作为另一例子,如果特定的半结构化数据格式是XML,那么可以选择特定于XML的实现模块。如上面所描述的,根据要被处理的半结构化数据的类型,各种实现模块可以被单独地链接到数据库服务器中。
在步骤230中,对半结构化查询语言表达式进行编译以生成该表达式的执行计划。该执行计划提供了一组步骤,数据库服务器可以使用所述一组步骤来对在查询表达式中指定的半结构化数据执行指定的处理步骤。如上面所描述的,每个实现模块可以包括编译器接口,其被配置为接收并编译特定的半结构化数据格式的半结构化查询语言表达式。
在步骤240中,可以将实现模块所生成的针对半结构化查询语言表达式的执行计划作为包含该半结构化查询语言表达式的查询的查询执行计划的一部分存储起来。如上面所指示的,通过将半结构化查询语言表达式的执行计划作为包含该表达式的查询的执行计划的一部分存储起来,可以避免对特定于数据格式的查询表达式进行运行时编译。
2.4.2操作符模式
在实施例中,用于特定的半结构化数据格式的自包含的实现模块可以包括运行时接口,其被配置为以三种模式(“存在”模式、“全模式”和“迭代器”模式)之一返回半结构化查询语言表达式的结果。“存在”模式可以例如被存在操作符使用,并且可以使用“懒”求值技术来实现;例如,基于对被指定成存在操作符的参数的半结构化查询语言表达式进行求值,只要任何结果变得可用,存在操作符就可以返回值而不必对半结构化查询表达式完全求值。
相反,“全”模式例如可以被半结构化数据值操作符或查询操作符使用。可以使用“热切的”求值技术来实现全模式;例如,值操作符和查询操作符的语义在整个半结构化查询语言求值结果上进行操作,并且因此可以针对每个操作符实例获取这些操作符所指定的全部数据。
在实施例中,“迭代器”模式例如可以被表函数或者生成一组行的其它操作符使用。也可以使用“懒”求值技术来实现迭代器模式,这是因为通常是以迭代器方式消耗可从表函数得到的结果。例如,调用表函数的另一操作符可以基于在该操作符中指定的标准在任何时候停止消耗由表函数生成的行。
2.4.3其它增强
可以用文本形式或二进制形式来表示半结构化数据。与对二进制形式的半结构化数据进行操作相比,通过在运行时间期间对所存储的文本数据进行解析来处理被表示成文本的半结构化数据可能代价较高。在一个实施例中,数据库表可以将半结构化数据的文本表示存储在数据库表的一个或多个列中,并且可以将同一数据的对应的二进制表示存储在同一表的一个或多个隐藏列中。在一些情况中,数据的二进制版本可以代替数据的文本版本而用于运行时处理。例如,数据库服务器可以提供在文本半结构化数据的基本存储列上使用二进制的函数索引来处理二进制形式的半结构化数据的能力。
在各种实施例中,可以使用其它的原生数据库功能来改进某些半结构化数据操作符的处理。例如,在某些情况下,可以使用半结构化数据值操作符上的函数索引以及半结构化数据表函数上的具体化关系视图来改进查询响应时间。作为另一例子,可以创建倒排索引来对存储在一个或多个表中的某些半结构化数据进行索引。例如,可以使用倒排索引,通过对存储在半结构化数据的列中的数据元素进行索引来改进对半结构化数据存在操作符的求值,从而简化对某些数据元素的校验。
在实施例中,对某些半结构化查询语言语句(例如在表函数或存在操作符中指定的哪些)的求值可以使用基于所存储的半结构化数据的事件流处理的懒求值技术。例如,半结构化数据表操作符或存在操作符可以被配置为根据所存储的半结构化数据产生事件流,以有助于对数据进行懒求值。
3.0硬件概述
根据一个实施例,本文描述的技术是由一个或多个专用计算设备实现的。专用计算设备可以是执行所述技术的硬连线,或者可以包括被永久编程以执行所述技术的数字电子设备,例如一个或多个专用集成电路(ASIC)或现场可编程门阵列(FPGA),或者可以包括被编程以根据固件、存储器、其它存储设备或组合中的程序指令来执行所述技术的一个或多个通用硬件处理器。这样的专用计算设备还可以将定制的硬连线逻辑、ASIC或FPGA与定制的编程组合起来以实现所述技术。专用计算设备可以是台式计算机系统、便携式计算机系统、手持设备、网络设备或包含用于实现所述技术的硬连线和/或程序逻辑的任何其它设备。
例如,图3是示出了可以实现本发明的实施例的计算机系统300的方框图。计算机系统300包括用于传送信息的总线302或其它传送机制以及与总线302耦合的用于处理信息的硬件处理器304。硬件处理器304可以是例如通用微处理器。
计算机系统300还包括耦合到总线302的用于存储信息和将被处理器304执行的指令的主存储器306,例如随机存取存储器(RAM)或其它动态存储设备。主存储器306还可以在将被处理器304执行的指令的执行期间用于存储临时变量或其它中间信息。这样的指令在被存储在处理器304可访问的非暂时性存储介质中时,使计算机系统300成为定制的用以执行所述指令中指定的操作的专用机器。
计算机系统300还包括耦合到总线302的用于存储处理器304的静态信息和指令的只读存储器(ROM)308或其它静态存储设备。存储设备310(例如磁盘或光盘)被提供,并耦合到总线302,用以存储信息和指令。
计算机系统300可以经由总线302耦合到用于向计算机用户显示信息的显示器312,例如阴极射线管(CRT)。包括字母数字键和其它键的输入设备314耦合到总线302,用以向处理器304传送信息和命令选择。其它类型的用户输入设备是用于向处理器304传送方向信息和命令选择并用于控制显示器312上的光标移动的光标控件316,例如鼠标、跟踪球或光标方向键。这种输入设备通常具有两个轴中的两个自由度,第一轴(例如x轴)和第二轴(例如y轴),其允许设备指定平面中的位置。
计算机系统300可以使用定制的硬连线逻辑、一个或多个ASIC或FPGA、固件和/或程序逻辑(其与计算机系统结合使得计算机系统300成为专用机器或将计算机系统300编程为专用机器)来实现本文描述的技术。根据一个实施例,本文的技术是由计算机系统300响应于处理器304执行包含在主存储器306中的一个或多个指令的一个或多个序列而执行的。可以从另一存储介质(例如存储设备310)将这样的指令读取到主存储器306中。包含在主存储器306中的指令的序列的执行使得处理器304执行本文描述的过程步骤。在替换的实施例中,可以使用硬连线电路来替代软件指令或与软件指令组合。
本文使用的术语“存储介质”是指存储使得机器以特定方式操作的数据和/或指令的任意非暂时性介质。这样的存储介质可以包括非易失性介质和/或易失性介质。非易失性介质包括例如光盘或磁盘,例如存储设备310。易失性介质包括动态存储器,例如主存储器306。存储介质的常用形式包括例如软盘、柔性盘、硬盘、固态驱动器、磁带或任何其它磁数据存储介质、CD-ROM、任何其它光数据存储介质、具有孔模式的任何物理介质、RAM、PROM以及EPROM、闪速-EPROM、NVRAM、任意其它存储器芯片或卡盘。
存储介质不同于传输介质,但是可以与传输介质结合使用。传输介质参与在存储介质之间传递信息。例如,传输介质包括同轴电缆、铜线和光纤,包括组成总线302的线。传输介质还可以采用声波或光波的形式,例如在无线电波和红外数据通信期间生成的那些。
在向处理器304传递一个或多个指令的一个或多个序列以供执行的过程中,可以涉及各种形式的介质。例如,指令最开始可以是在远程计算机的磁盘或固态驱动器上传递的。远程计算机可以将指令装载到其动态存储器中,并使用调制解调器通过电话线来发送指令。计算机系统300本地的调制解调器可以接收电话线上的数据,并使用红外发射机将数据转换成红外信号。红外检测器可以接收在红外信号中传递的数据,并且适当的电路可以将数据放在总线302上。总线302将数据传递到主存储器306,处理器304从主存储器306获取并执行指令。可选地,可以在处理器340执行之前或之后将主存储器306接收到的指令存储在存储设备310上。
计算机系统300还包括耦合到总线302的通信接口318。通信接口318提供与网络链路320的双向数据通信耦合,网络链路320连接到本地网络322。例如,通信接口318可以是集成服务数字网络(ISDN)卡、电缆调制解调器、卫星调制解调器或用于向对应类型的电话线提供数据通信连接的调制解调器。作为另一例子,通信接口318可以是局域网(LAN)卡,其用于向兼容的LAN提供数据通信连接。也可以实现无线链路。在任意这种实现中,通信接口318发送并接收电信号、电磁信号或光信号,这些信号传递表示各种类型的信息的数字数据流。
网络链路320一般提供通过一个或多个网络去往其它数据设备的数据通信。例如,网络链路320可以提供通过本地网络322去往主计算机324或者去互联网服务提供商(ISP)326操作的数据设备的连接。ISP 326进而通过世界范围的分组数据通信网络(现在通常称为“互联网)328来提供数据通信服务。本地网络322和互联网328都使用传递数字数据流的电信号、电磁信号或光信号。通过各个网络的信号以及网络链路320上的并且通过通信接口318的信号(其向和从计算机系统300传递数字数据)是示例性形式的传输介质。
计算机系统300可以通过网络、网络链路320和通信接口318发送消息并接收数据,其包括程序代码。在互联网的例子中,服务器330可以通过互联网328、ISP 326、本地网络322和通信接口318发送应用程序的请求代码。
接收到的代码可以在其被接收时由处理器304执行,和/或可以存储在存储设备310中或其它非易失性存储设备中以供后续执行。
在上述说明书中,已经参考大量的具体细节描述了本发明的实施例,这些具体细节可以随着实现的不同而有所不同。相应地,应当以解释性的意义而不是限制性的意义来看待说明书和附图。本发明的范围的唯一的并独有的指示以及申请人想要的本发明的范围是一组权利要求的书面和等价范围,所述一组权利要求是由本申请以这些权利要求发行的具体形式发行的,包括任意的后续更正。

Claims (15)

1.一种方法,包括:
接收对于存储在由数据库服务器管理的数据库的一个或多个表中的半结构化数据的查询表达式,其中,所述查询表达式包括半结构化数据操作符;
其中,所述半结构化数据操作符包括格式参数,所述格式参数指定第一半结构化数据格式或与第一半结构化数据格式不同的第二半结构化数据格式;
响应于接收到所述查询表达式:
基于所述格式参数,确定半结构化数据操作符是基于数据库服务器的与第一半结构化数据格式关联的第一实现模块还是基于数据库服务器的与第二半结构化数据格式关联的第二实现模块执行的,
基于所述确定,选择第一实现模块或第二实现模块作为执行由半结构化数据操作符指定的操作的选定半结构化数据格式的选定实现模块,以及
所述选定实现模块对于所述半结构化数据执行由所述半结构化数据操作符所指定的操作,由此生成所述选定半结构化数据格式的半结构化结果数据;
将所述选定半结构化数据格式的半结构化结果数据转换成具有所述数据库服务器的内置数据类型的结果数据;
其中,所述方法是由一个或多个计算设备执行的。
2.如权利要求1所述的方法,还包括:
其中,所述查询表达式是第一查询表达式;
接收包括所述半结构化数据操作符的第二查询表达式,其中,所述半结构化数据操作符指定与所述第一半结构化数据格式不同的第二半结构化数据格式;
响应于接收到所述第二查询表达式,对于所述半结构化数据执行所述操作。
3.如权利要求1所述的方法,其中,所述半结构化数据操作符是值操作符,所述值操作符将指定的半结构化数据查询语言表达式应用于指定的输入数据,其中,将所述指定的半结构化数据查询语言表达式应用于所述指定的输入数据包括从所述指定的输入数据提取值,并将所述值转换成SQL数据类型。
4.如权利要求1所述的方法,其中,所述半结构化数据操作符是存在操作符,所述存在操作符将指定的半结构化查询语言表达式应用于输入数据,并基于所述表达式是否返回一个或多个数据项来返回值。
5.如权利要求1所述的方法,其中,所述半结构化数据操作符是查询操作符,所述查询操作符将半结构化查询语言表达式应用于输入数据并返回作为所述输入数据的一部分的所述半结构化结果数据。
6.如权利要求1所述的方法,其中,所述半结构化数据操作符是验证操作符,所述验证操作符验证输入数据与特定的半结构化数据格式相符合。
7.如权利要求1所述的方法,其中,所述半结构化数据操作符是表函数,所述表函数将一个或多个半结构化查询语言表达式的所述半结构化结果数据映射到一个或多个关系行和列中。
8.如权利要求1所述的方法,其中,所述半结构化数据操作符是对象操作符,所述对象操作符生成表示半结构化输出数据的数据对象,其中所述半结构化输出数据是基于一个或多个SQL表达式生成的。
9.如权利要求1所述的方法,其中,所述半结构化数据操作符是更新操作符,所述更新操作符修改、插入或删除所述半结构化数据的一个或多个分量。
10.如权利要求1所述的方法,其中,所述半结构化数据操作符处理一组输入行,并产生一组输出行。
11.如权利要求1所述的方法,其中,所述选定实现模块包括被配置为对半结构化查询语言表达式进行编译的编译器接口。
12.如权利要求1所述的方法,其中,所述半结构化数据包括多个值,所述多个值由描述所述多个值的标记描绘。
13.如权利要求1所述的方法,其中,第一半结构化数据格式是可扩展标记语言XML或Java脚本对象注释JSON。
14.一个或多个存储指令的存储介质,所述指令在被一个或多个处理器执行时使得执行权利要求1-13中的任意一项中所记载的方法。
15.一种系统,包括:
一个或多个执行数据库服务器的处理器,其中所述数据库服务器被配置为执行权利要求1至13中任一项所述的方法。
CN201480049530.3A 2013-07-31 2014-07-31 查询任意半结构化数据的通用的sql增强以及高效地支持这样的增强的技术 Active CN105518676B (zh)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201361860848P 2013-07-31 2013-07-31
US61/860,848 2013-07-31
US14/337,189 US20150039587A1 (en) 2013-07-31 2014-07-21 Generic sql enhancement to query any semi-structured data and techniques to efficiently support such enhancements
US14/337,189 2014-07-21
PCT/US2014/049290 WO2015017724A1 (en) 2013-07-31 2014-07-31 A generic sql enhancement to query any semi-structured data and techniques to efficiently support such enhancements

Publications (2)

Publication Number Publication Date
CN105518676A CN105518676A (zh) 2016-04-20
CN105518676B true CN105518676B (zh) 2019-12-17

Family

ID=52428623

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201480049530.3A Active CN105518676B (zh) 2013-07-31 2014-07-31 查询任意半结构化数据的通用的sql增强以及高效地支持这样的增强的技术

Country Status (4)

Country Link
US (1) US20150039587A1 (zh)
EP (1) EP3028183B1 (zh)
CN (1) CN105518676B (zh)
WO (1) WO2015017724A1 (zh)

Families Citing this family (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9882930B2 (en) * 2014-07-02 2018-01-30 Waratek Limited Command injection protection for java applications
US10592495B1 (en) 2015-09-11 2020-03-17 Amazon Technologies, Inc. Function-based object queries
CN107818100B (zh) * 2016-09-12 2019-12-20 杭州海康威视数字技术股份有限公司 一种sql语句执行方法及装置
CN106446153A (zh) * 2016-09-21 2017-02-22 广州特道信息科技有限公司 一种分布式newSQL数据库系统及方法
US10482098B2 (en) 2016-11-14 2019-11-19 Microsoft Technology Licensing, Llc Consuming streamed data records
CN108231130B (zh) * 2016-12-15 2021-05-04 北京兆易创新科技股份有限公司 一种eMMC测试方法及装置
CN106649804A (zh) * 2016-12-29 2017-05-10 深圳市优必选科技有限公司 数据查询服务器的数据处理方法及装置、数据处理系统
US10649987B2 (en) * 2017-01-31 2020-05-12 Salesforce.Com, Inc. Systems, methods, and apparatuses for implementing conditional statement execution within a multi-tenant aware structured query language
US10628421B2 (en) * 2017-02-07 2020-04-21 International Business Machines Corporation Managing a single database management system
JP2020514935A (ja) * 2017-03-15 2020-05-21 ファウナ, インク.Fauna, Inc. データベース用の方法及びシステム
US10747814B2 (en) * 2017-09-29 2020-08-18 Oracle International Corporation Handling semi-structured and unstructured data in a sharded database environment
US11409741B2 (en) 2017-09-30 2022-08-09 Oracle International Corporation Enabling data format specific database functionalities over existing data types by marking operand values
CN108038135A (zh) * 2017-11-21 2018-05-15 平安科技(深圳)有限公司 电子装置、多表关联查询的方法及存储介质
US11188434B2 (en) * 2017-12-08 2021-11-30 Ab Initio Technology Llc Systems and methods for monitoring execution of structured query language (SQL) queries
CN108256109B (zh) * 2018-02-07 2022-04-15 福建星瑞格软件有限公司 列簇类型半结构化数据的结构化查询方法及计算机设备
CN109597814B (zh) * 2018-12-06 2021-02-02 广州及包子信息技术咨询服务有限公司 一种后台管理信息系统的在线快速交付系统
US11157478B2 (en) 2018-12-28 2021-10-26 Oracle International Corporation Technique of comprehensively support autonomous JSON document object (AJD) cloud service
US11700317B2 (en) * 2018-12-30 2023-07-11 Dish Network L.L.C. Error recovery in digital communications
US11423001B2 (en) 2019-09-13 2022-08-23 Oracle International Corporation Technique of efficiently, comprehensively and autonomously support native JSON datatype in RDBMS for both OLTP and OLAP
US20210141719A1 (en) * 2019-11-11 2021-05-13 Goldman Sachs & Co. LLC Assertion engine for validating the configuration of a transaction processing system
US20210311942A1 (en) * 2020-04-02 2021-10-07 International Business Machines Corporation Dynamically altering a query access plan
CN111611011B (zh) * 2020-04-13 2023-01-13 中国科学院计算机网络信息中心 一种支持Blob数据类型的JSON语法扩展方法和解析方法及装置
CN112347125B (zh) * 2020-11-16 2024-06-11 李增国 一种设备数据处理的方法及物联网数据处理方法
US11379258B1 (en) 2021-07-30 2022-07-05 Goldman Sachs & Co. LLC Expression engine for testing transaction processing system
CN114118055B (zh) * 2021-12-06 2024-05-10 中电万维信息技术有限责任公司 复杂sql语句优化解析方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101620633A (zh) * 2008-07-04 2010-01-06 软件股份公司 用于在xml数据库管理系统中生成索引的方法和系统
US7779047B2 (en) * 2007-06-22 2010-08-17 International Business Machines Corporation Pluggable merge patterns for data access services
CN101984439A (zh) * 2010-12-09 2011-03-09 上海市共进通信技术有限公司 基于子查询实现数据源xml查询系统优化的方法

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6507846B1 (en) * 1999-11-09 2003-01-14 Joint Technology Corporation Indexing databases for efficient relational querying
US7478100B2 (en) * 2003-09-05 2009-01-13 Oracle International Corporation Method and mechanism for efficient storage and query of XML documents based on paths
US20060047646A1 (en) * 2004-09-01 2006-03-02 Maluf David A Query-based document composition
US8983931B2 (en) * 2011-11-29 2015-03-17 Sybase, Inc. Index-based evaluation of path-based queries
US8650204B2 (en) * 2011-12-19 2014-02-11 Oracle International Corporation Techniques for efficiently supporting XQuery update facility in SQL/XML

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7779047B2 (en) * 2007-06-22 2010-08-17 International Business Machines Corporation Pluggable merge patterns for data access services
CN101620633A (zh) * 2008-07-04 2010-01-06 软件股份公司 用于在xml数据库管理系统中生成索引的方法和系统
CN101984439A (zh) * 2010-12-09 2011-03-09 上海市共进通信技术有限公司 基于子查询实现数据源xml查询系统优化的方法

Also Published As

Publication number Publication date
US20150039587A1 (en) 2015-02-05
EP3028183A1 (en) 2016-06-08
EP3028183B1 (en) 2022-02-09
WO2015017724A1 (en) 2015-02-05
CN105518676A (zh) 2016-04-20

Similar Documents

Publication Publication Date Title
CN105518676B (zh) 查询任意半结构化数据的通用的sql增强以及高效地支持这样的增强的技术
US11907247B2 (en) Metadata hub for metadata models of database objects
US7685150B2 (en) Optimization of queries over XML views that are based on union all operators
US11526656B2 (en) Logical, recursive definition of data transformations
US8819046B2 (en) Data query translating into mixed language data queries
US7577642B2 (en) Techniques of XML query optimization over static and dynamic heterogeneous XML containers
US8073843B2 (en) Mechanism for deferred rewrite of multiple XPath evaluations over binary XML
US11194802B2 (en) Generating SQL queries from declarative queries for semi-structured data
US10262076B2 (en) Leveraging structured XML index data for evaluating database queries
US8650204B2 (en) Techniques for efficiently supporting XQuery update facility in SQL/XML
US7870121B2 (en) Matching up XML query expression for XML table index lookup during query rewrite
US20100030727A1 (en) Technique For Using Occurrence Constraints To Optimize XML Index Access
US20060122973A1 (en) Mechanism for defining queries in terms of data objects
CN107818125B (zh) 通过simd处理器寄存器对数据进行迭代评估
EP3293644B1 (en) Loading data for iterative evaluation through simd registers
US11550556B1 (en) Efficient semantic analysis of program code
US11640380B2 (en) Technique of comprehensively supporting multi-value, multi-field, multilevel, multi-position functional index over stored aggregately stored data in RDBMS
US20100036825A1 (en) Interleaving Query Transformations For XML Indexes
US20080016088A1 (en) Techniques of XML query optimization over dynamic heterogeneous XML containers

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant