CN116018581A - 变换计算机程序的操作以供在数据库处执行 - Google Patents
变换计算机程序的操作以供在数据库处执行 Download PDFInfo
- Publication number
- CN116018581A CN116018581A CN202180054604.2A CN202180054604A CN116018581A CN 116018581 A CN116018581 A CN 116018581A CN 202180054604 A CN202180054604 A CN 202180054604A CN 116018581 A CN116018581 A CN 116018581A
- Authority
- CN
- China
- Prior art keywords
- database
- program
- operations
- language
- supported
- 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
Images
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/245—Query processing
- G06F16/2452—Query translation
- G06F16/24526—Internal representations for queries
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/51—Source to source
-
- 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/2433—Query languages
-
- 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/2433—Query languages
- G06F16/2448—Query languages for particular applications; for extensibility, e.g. user defined types
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2452—Query translation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
- G06F16/24534—Query rewriting; Transformation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24553—Query execution of query operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24564—Applying rules; Deductive queries
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/34—Graphical or visual programming
Abstract
一种方法包括执行指定操作的程序以及访问转换文件,该转换文件包括用于将程序的语言转换成数据库的语言的指令。转换文件指定受数据库支持的使用程序的语言的操作和使用数据库的语言的受支持操作的语义含义。程序的不受数据库支持的操作由该程序处理。从转换文件确定程序的受数据库支持的操作,并且使用转换文件将表示受支持操作的程序的一部分转换成数据库的语言并将其传输到数据库。由在数据库内执行表示受数据库支持的操作的程序的经转换部分所产生的数据由程序接收。
Description
优先权声明
本申请要求于2020年9月4日提交的美国临时专利申请第17/012,633号的优先权,该临时专利申请的全部内容通过引用并入本文。
技术领域
本公开涉及变换计算机程序的操作以供在数据库处执行的技术。
背景技术
复杂的计算通常可以表示为通过有向图的数据流,其中计算的组件与图的顶点相关联,并且组件之间的数据流对应于图的链路(弧、边)。实施此类基于图的计算的系统在名称为“执行表示为图的计算(Executing Computations Expressed as Graphs)”的美国专利号5,966,072中进行描述,该专利的全部内容以引用方式并入本文。在一些情况下,与顶点相关的计算可以表示为对数据源的查询。可以将查询提供给数据源(例如,数据库),并且与数据源相关联的数据处理系统(例如,数据库管理系统)可以返回由查询指定的数据。
发明内容
一般而言,在第一方面,一种用于变换计算机程序的操作以供在数据库处执行的方法包括:由数据处理系统执行指定操作的程序,其中该程序用语言编写;访问转换文件,该转换文件包括用于将程序的语言转换成数据库的语言的一个或多个指令,该转换文件指定受数据库支持的使用程序的语言的一个或多个操作,并且进一步指定使用数据库的语言的一个或多个受支持操作的语义含义;从该转换文件确定该程序的不受数据库支持的一个或多个操作;由该程序处理不受数据库支持的一个或多个操作;从该转换文件确定该程序的受数据库支持的一个或多个操作,并且对于受数据库支持的一个或多个操作:使用转换文件将表示受数据库支持的一个或多个操作的程序的一部分转换成数据库的语言;将程序的经转换的部分传输至数据库;以及通过程序从数据库接收由在数据库内执行程序的经转换部分而产生的数据,该程序的经转换部分表示受数据库支持的一个或多个操作。
一般而言,在可与第一方面组合的第二方面中,该方法包括由程序对从数据库接收的数据执行一个或多个附加操作。
一般而言,在可与第一方面或第二方面组合的第三方面中,该方法包括由程序对从不受数据库支持的一个或多个操作的处理返回的数据执行一个或多个附加操作。
一般而言,在可与第一方面至第三方面中的任一方面组合的第四方面中,程序包括可执行数据流图,该可执行数据流图具有表示操作的组件,该操作由表示操作之间的数据流的链路所连接。
一般而言,在可与第一方面至第四方面中的任一方面组合的第五方面中,对表示受数据库支持的一个或多个操作的程序的一部分进行转换包括生成使用数据库的语言的对数据库的一个或多个查询,以用于在数据库内执行一个或多个操作。
一般而言,在可与第一方面到第五方面中的任一方面组合的第六方面中,程序的至少一个操作包括查询操作,并且方法包括从程序移除受数据库支持的一个或多个操作,并且将使用数据库的语言的对数据库的一个或多个查询插入到查询操作中。
一般而言,在可与第一方面至第六方面中的任一方面组合的第七方面中,确定受数据库支持的一个或多个操作包括将一个或多个模式匹配规则应用于转换文件中使用程序的语言指定的一个或多个操作。
一般而言,在可与第一方面至第七方面中的任一方面组合的第八方面中,语义含义对使用数据库的语言的一个或多个受支持操作的数据类型、运算符的含义、函数的含义或操作的预期结果中的至少一者进行说明。
一般而言,在可与第一方面至第八方面中的任一方面组合的第九方面中,转换文件不被编码在程序中。
一般而言,在可与第一方面至第九方面中的任一方面组合的第十方面中,该方法包括从程序接收对数据库的语言的指示。
一般而言,在可与第一方面至第十方面中的任一方面组合的第十一方面中,程序的语言包括数据操纵语言(DML),并且数据库的语言包括结构化查询语言(SQL)。
一般而言,在可与第一方面至第十一方面中的任一方面组合的第十二方面中,转换文件包括用于将程序的语言转换成包括数据库的语言的多个数据库的语言的一个或多个指令。
一般而言,在可与第一方面至第十二方面中的任一方面组合的第十三方面中,一种系统包括一个或多个处理器和存储指令的一个或多个存储设备,该指令在由一个或多个处理器执行时使得一个或多个处理器执行操作,该操作包括:由数据处理系统执行指定操作的程序,其中该程序用语言编写;访问转换文件,该转换文件包括用于将程序的语言转换成数据库的语言的一个或多个指令,该转换文件指定受数据库支持的使用程序的语言的一个或多个操作,并且进一步指定使用数据库的语言的一个或多个受支持操作的语义含义;从该转换文件确定该程序的不受数据库支持的一个或多个操作;由该程序处理不受数据库支持的一个或多个操作;从该转换文件确定该程序的受数据库支持的一个或多个操作,并且对于受数据库支持的一个或多个操作:使用转换文件将表示受数据库支持的一个或多个操作的程序的一部分转换成数据库的语言;将程序的经转换的部分传输至数据库;以及通过程序从数据库接收由在数据库内执行程序的经转换部分而产生的数据,该程序的经转换部分表示受数据库支持的一个或多个操作。
一般而言,在可与第一方面至第十三方面中的任一方面组合的第十四方面中,一种非暂态计算机可读存储介质存储指令,该指令用于使计算系统执行以下操作:由数据处理系统执行指定操作的程序,其中该程序用语言编写;访问转换文件,该转换文件包括用于将程序的语言转换成数据库的语言的一个或多个指令,该转换文件指定受数据库支持的使用程序的语言的一个或多个操作,并且进一步指定使用数据库的语言的一个或多个受支持操作的语义含义;从该转换文件确定该程序的不受数据库支持的一个或多个操作;由该程序处理不受数据库支持的一个或多个操作;从该转换文件确定该程序的受数据库支持的一个或多个操作,并且对于受数据库支持的一个或多个操作:使用转换文件将表示受数据库支持的一个或多个操作的程序的一部分转换成数据库的语言;将程序的经转换的部分传输至数据库;以及通过程序从数据库接收由在数据库内执行程序的经转换部分而产生的数据,该程序的经转换部分表示受数据库支持的一个或多个操作。
一般而言,在可与第一方面至第十四方面中的任一方面组合的第十五方面中,一种方法包括:由数据处理系统执行指定操作的计算机程序,该计算机程序用编程语言编写;访问转换文件,该转换文件包括用于将计算机程序的编程语言转换成数据库的语言的一个或多个指令,该转换文件指定受数据库支持的使用程序的语言的一个或多个操作,并且进一步指定使用数据库的语言的一个或多个受支持操作的语义含义;从该转换文件确定该程序的受数据库支持的一个或多个操作,并且对于受数据库支持的一个或多个操作:使用转换文件将表示受数据库支持的一个或多个操作的程序的一部分转换成数据库的语言;将程序的经转换的部分传输至数据库;以及通过程序从数据库接收由在数据库内执行程序的经转换部分而产生的数据,该程序的经转换部分表示受数据库支持的一个或多个操作。
一般而言,在可与第一方面至第十五方面中的任一方面组合的第十六方面中,该方法包括从转换文件确定程序的不受数据库支持的一个或多个操作,以及由计算机程序处理不受数据库支持的一个或多个操作。
一般而言,在可与第一方面至第十六方面中的任一方面组合的第十七方面中,计算机程序不处理程序的受数据库支持的一个或多个操作。
一般而言,在可与第一方面至第十七方面中的任一方面组合的第十八方面中,计算机程序仅处理不受数据库支持的一个或多个操作。
一般而言,在可与第一方面至第十八方面中的任一方面组合的第十九方面中,数据处理系统不执行表示受数据库支持的一个或多个操作的计算机程序的一部分。
上述实施方式中的一个或多个实施方式可以提供以下优点中的一个或多个优点。
此处所描述的技术使得计算机程序的操作(例如,可执行数据流图)能够被变换以供在数据库(例如,关系数据库)处执行。具体地,这里描述的技术包括转换文件,该转换文件指定用于将使用程序的语言指定的操作转换成数据库的语言的指令,使得程序的一些操作或全部操作可以被嵌入到对数据库的查询中。以这种方式,转换文件便于将一个或多个操作的计算负荷从执行程序的数据处理系统“下推”到数据库,从而降低数据处理系统处的处理要求,并且使得能够更有效地整体使用计算资源。
由于数据库可以使用具有不同能力的多种不同语言(例如,SQL方言),因此由使用特定语言的一个数据库支持的程序的操作可能不被使用不同语言的另一数据库支持。这里描述的转换文件指定数据库可使用的一组语言中的每种语言支持程序的哪些操作。通过这样做,转换文件允许数据库有效地与变换程序的系统“协商”有关下推到数据库的操作。换言之,如果系统基于转换文件确定数据库所使用的语言不支持程序的特定操作,则系统可以决定不将该操作下推到数据库110(或者可以将计算步骤重新排序或采取另一动作)。另外,由于转换文件在运行时被访问,因此它可被扩展以指定由附加数据库语言支持的操作或更新由现有数据库语言支持的操作,或既指定由附加数据库语言支持的操作又更新由现有数据库语言支持的操作,而不需要修改底层计算机程序。以这种方式,程序可以被重新使用并且使其操作被下推到几乎任何数据库。
在转换文件中指定的转换还可对使用程序的语言所指定的操作的语义含义进行说明。通过这样做,提高了转换的准确性,并且可以通过例如即使可能不存在与使用程序的语言指定的操作对应或等同的使用数据库的语言的操作时也允许进行转换来支持对附加操作的转换。
通过将操作“下推”至一个或多个数据库,而不是由执行程序的数据处理系统执行下推操作,数据库的内置功能可有效地用于执行程序的任何数据处理系统。
提供本发明内容以便以简化形式介绍将在下文具体实施方式中进一步描述的一些概念。本发明内容并非旨在标识所要求保护的主题的关键特征或必要特征。
一种或多种具体实施的详细内容在附图及下文的具体实施方式中进行说明。此处描述的技术的其他特征、目标和优点将从描述和附图以及从权利要求书中显而易见。
附图说明
图1是用于变换计算机程序的操作以供在数据库处执行的系统的框图。
图2A和图2B是变换计算机程序的操作以供在数据库处执行的示例的框图。
图3A至图3C是示出用于变换计算机程序的操作以供在数据库处执行的系统的附加细节的框图。
图3D至图3P是示出变换引擎的附加细节的框图。
图3Q至图3T是示出用于变换计算机程序的操作以供在数据库处执行的系统的附加细节的框图。
图4A和图4B是变换计算机程序的操作以供在数据库处执行的示例的框图。
图5是转换文件的扩展性的示例的框图。
图6A至图6C示出了在各个优化阶段的可执行数据流图。
图7是用于变换计算机程序的操作以供在数据库处执行的过程的流程图。
具体实施方式
图1示出了用于变换计算机程序的操作以供在数据库处执行的系统100。系统100包括开发环境102、执行环境104、存储系统106、108和多个候选数据库110a、110b、......、110N(统称为“数据库110”)。一般而言,可选开发环境102为用户提供方法以创建计算机程序诸如数据流图112。例如,开发环境102提供图形化开发环境或其他用户界面,其使得用户能够指定可以数据流图112的形式表达的计算或规则。在生成被配置成根据用户的规范执行操作的数据流图112之后,开发环境102将数据流图112传递到执行环境104以供编译和执行。一般而言,本文描述的数据流图是可执行数据流图,并且有时可互换地使用术语“数据流图”和“可执行数据流图”。可执行数据流图具有一个或多个组件,并且有时可与“节点”或“顶点”互换地使用术语“组件”。节点、组件或顶点对应于程序代码,如同样在所引用的美国专利第5,966,072号中第5列的底部所示。例如,分类组件对应于特定程序模板。同样的技术也可以用于SQL命令。每个命令可具有一个或多个相关联的模板。如从所引用的美国专利第5,966,072号的摘要和第1-2,5,9-11列中明显看出,本领域技术人员认识到,本文所述的可执行数据流图用于直接调用计算。
执行环境104包括用于将数据流图112编译成可执行程序(例如,可执行数据流图)的编译器引擎114和用于执行操作以执行可执行程序的执行引擎116。在操作中,编译器引擎114从开发环境102(或从另一个源,诸如存储系统106、108中的一者)接收表示数据流图112的数据。在一些情况下,编译器引擎114确定待由数据流图112的可执行版本处理的数据(例如,输入数据)被存储在一个或多个数据库110上,该数据库可以是关系数据库。例如,可执行数据流图112的输入组件可以指定输入数据被存储在一个或多个数据库110上。
换言之,计算机系统100包括耦接到数据存储装置诸如存储系统106的开发环境102,其中开发环境102被配置成构建与可执行数据流图112相关联的数据处理应用,该可执行数据流图实现对从一个或多个输入数据集通过处理图组件的图流动到一个或多个输出数据集的数据执行的基于图的计算,其中数据流图112由数据存储装置中的数据结构指定,具有多个组件的数据流图112由数据结构指定并表示由一个或多个链路连接的图组件,该链路由数据结构指定并表示图组件之间的数据流;执行环境104,该执行环境耦接到存储系统106并且被托管在一个或多个计算机上,执行环境104包括编译器引擎114,该编译器引擎被配置为读取指定数据流图112的所存储的数据结构并且分配和配置计算资源,诸如用于执行由编译器引擎114分配给数据流图的图组件的计算的进程;执行环境104包括执行引擎116,该执行引擎用于调度和控制所分配进程的执行,以用于执行操作从而执行可执行程序。
在上述和其它情况下,编译器引擎114调用变换引擎118,该变换引擎被配置为变换数据流图112的一些操作或全部操作,使得操作可由数据库110中的一个或多个数据库(或与相应数据库相关联的数据处理系统)执行。例如,变换引擎118生成对数据库110的查询(例如,SQL查询),当在数据库处执行该查询时,使得数据库执行数据流图112的一个或多个操作并且返回结果。然后,将查询代替一个或多个操作插入到数据流图112中,以产生经变换的数据流图122,从而将一个或多个操作的计算负荷从执行环境104有效地“下推”到数据库110。
为了将数据流图112的一些操作或全部操作转换成可由数据库110执行的指令,变换引擎118被配置为接收存储在存储系统106中的转换文件120。一般而言,转换文件120包括用于将使用数据流图112的语言定义的操作转换成数据库110的语言的指令。例如,数据流图112使用诸如数据操纵语言(DML)之类的语言定义操作。另一方面,数据库110被配置为使用不同语言解释指令(例如,查询),诸如SQL或其方言(例如,DB2、PostgreSQL、Oracle等)。因此,变换引擎118使用转换文件120来将使用数据流图112的语言定义的一个或多个操作转换成可由相应数据库110解释的查询。
由于数据库110可以使用具有不同能力的多种不同语言(例如,SQL方言),因此由使用特定语言的一个数据库110支持的可执行数据流图112的操作可能不被使用不同语言的另一数据库110支持。因此,转换文件120指定数据库110可使用的一组语言中的每种语言支持数据流图112的哪些操作。通过这样做,转换文件120允许数据库110有效地与变换引擎118“协商”有关下推到数据库110的操作。换言之,如果变换引擎118基于转换文件120确定数据库110所使用的语言不支持数据流图112的特定操作,则变换引擎118可以决定不将该操作下推到数据库110(或者如下文所述,可以将计算步骤重新排序或采取另一动作)。另外,由于转换文件120在运行时被访问,因此它可被扩展以指定由附加数据库语言支持的操作或更新由现有数据库语言支持的操作,或既指定由附加数据库语言支持的操作又更新由现有数据库语言支持的操作,而不需要修改底层数据流图112。以这种方式,可以重新使用数据流图112,并且变换引擎118可以将其操作下推到几乎任何数据库110。下面参考图5描述关于转换文件120的扩展性的附加细节。
在一个示例中,如果计算机程序诸如可执行数据流图的操作可使用数据库的语言来表达,使得该操作(或等同操作)可由数据库(或数据库管理系统)来执行,则该操作受数据库(或数据库语言)“支持”。在一个示例中,如果计算机程序(例如,可执行数据流图)的操作不能使用数据库的语言来表达,或者该操作(或等同操作)不能由数据库(或数据库管理系统)来执行,或两者皆有,则该操作不受数据库(或数据库语言)支持。在一个示例中,使用转换文件120来确定特定数据库(或数据库语言)是否支持计算机程序的操作。
在一些示例中,在转换文件120中指定的转换对使用数据流图112的语言所指定的操作的语义含义进行说明。在此上下文中,使用术语“语义含义”来指代从一种语言到另一种语言的不将含义与转换相关联的简单的一对一转换之外的转换。例如,转换文件120中指定的转换可对数据类型(例如,类型敏感性)、运算符或函数的含义、操作的预期结果、或它们的组合,以及关联含义或不仅仅是语法转换的其他转换进行说明。通过在将使用数据流图112的语言所指定的操作转换成数据库110的语言时对该操作的语义含义进行说明,提高了转换的准确性并且可以支持对附加操作的转换(例如,通过例如即使可能不存在与使用数据流图112的语言指定的操作对应或等同的使用数据库110的语言的操作时也允许进行转换)。
在将数据流图112的一些操作或全部操作变换为对一个或多个数据库110的查询之后,变换引擎118将经变换的数据流图122传递给编译器引擎114以供编译。编译器引擎114将经变换的数据流图122编译成可执行程序,并将可执行程序传输到执行引擎116。执行引擎116执行操作以执行可执行程序并将结果存储在存储系统108中,该存储系统可以与存储系统106相同或不同。为了执行可执行程序,执行引擎116调用查询引擎124来执行由与数据流图的经转换部分相关联的程序的一部分所指定的操作。通过这样做,使查询引擎124将由变换引擎118生成的查询传输至适当的数据库110。数据库110(或与相应数据库相关联的数据处理系统,诸如数据库管理系统(DBMS))执行从查询引擎124接收的每个查询并且返回所得数据。查询引擎124将从数据库110接收的数据提供给执行引擎116,并且执行引擎116执行操作以根据与数据流图的未转换部分相关联的程序的一部分来处理数据。
参考图2A,系统200示出了变换计算机程序的操作以供在数据库处执行的示例。在此示例中,将数据流图202提供给编译器引擎114以供编译。数据流图202包括表示数据输入的输入组件203a、203b、表示要对数据输入或从另一操作组件流动的数据执行的操作的操作组件203c、203d、203e、203f和表示经处理数据的输出目的地(例如,写入目的地)的输出组件203g。在该示例中,输入组件203a表示来自数据库110a(“DB1”)的数据输入,该数据库是关系数据库。另一方面,输入组件203b表示未存储在关系数据库中或以其他方式不能被查询的数据输入。
编译器引擎114调用变换引擎118以产生对关系数据库110a的查询,以用于访问由输入组件203a指定的数据。变换引擎118还确定由组件203c表示的“操作1”(或其一部分)是否可经由查询被下推至数据库110a。为此,变换引擎118首先确定数据库110a所使用的语言是“方言1”。该信息从例如输入组件203a或与输入组件203a相关联的文件获得。变换引擎118然后读取转换文件204以确定由组件203c表示的“操作1”是否可以从数据流图202的语言被转换成数据库110a所使用的语言“方言1”。
例如,假设由输入组件203a表示的输入数据包括客户的名和姓的单独记录,并且由组件203c表示的“操作1”用于通过使用数据流图202的语言的表达式“First+Last”将客户的名和姓组合成单个字符串。通过将使用数据流图202的语言所指定的“操作1”的表达式与转换文件204进行比较(例如,使用模式匹配技术,如下所述),变换引擎118确定该表达式可以被转换成“方言1”语言。另外,由于转换文件204对在从数据流图202的语言到数据库110a的语言的转换中的表达式的语义含义进行说明,因此变换引擎118确定表达式“First+Last”应当被转换成使用“方言1”语言的“First,Last”(而不是例如用于数字输入的Total(First,Last))。
在将“操作1”从数据流图202的语言转换成数据库110a的语言之后,变换引擎118生成对数据库110a的查询以访问指定的输入数据并执行经转换的操作。变换引擎118将数据流图202中的输入组件203a和组件203c替换为查询组件206,以产生经变换的数据流图208。变换引擎118然后将经变换的数据流图208传递给编译器引擎114以供编译。编译器引擎114将经变换的数据流图208编译成可执行程序210,并且将程序210传输到执行引擎116(或传输到存储系统以供存储)。执行引擎116执行操作以执行可执行程序210,包括调用查询引擎124以将查询212传输到数据库110a,如由与查询组件206相关联的程序210的一部分所指定。数据库110a执行查询212并将所得数据返回到查询引擎124。查询引擎124将接收到的数据提供给执行引擎116,并且执行引擎116执行操作以根据与数据流图的未转换部分相关联的程序210的一部分(例如,组件203b、203d、203e、203f和203g)来处理数据。
参考图2B,系统250示出了变换计算机程序的操作以供在数据库处执行的另一示例。在此示例中,将数据流图252提供给编译器引擎114以供编译。数据流图252与图2A中所示的数据流图202相同,除了现在从数据库110b(“DB 2”)接收输入数据,如输入组件253a所示。与数据库110a非常类似,数据库110b是关系数据库。然而,数据库110b使用与数据库110a不同的语言(“方言2”)。
在此示例中,编译器引擎114调用变换引擎118以产生对关系数据库110b的查询,以用于访问由输入组件253a指定的数据。变换引擎118还读取转换文件204以确定由组件203c表示的“操作1”是否可以从数据流图252的语言被转换成数据库110b所使用的语言“方言2”。如在先前示例中,假设由组件203c表示的“操作1”用于通过使用数据流图252的语言的表达式“First+Last”将客户的名和姓组合成单个字符串。通过将使用数据流图252的语言的“操作1”的表达式与转换文件204中指定的“方言2”的支持操作进行比较,变换引擎118确定该表达式可以被转换成“方言2”语言。另外,由于转换文件204对在从数据流图252的语言到数据库110b的语言的转换中的表达式的语义含义进行说明,因此变换引擎118确定表达式“First+Last”应当被转换成使用“方言2”语言的“First||Last”(而不是例如用于数字输入的Sum(First,Last))。
在将“操作1”从数据流图252的语言转换成数据库110b的语言之后,变换引擎118生成对数据库110b的查询以访问指定的输入数据并执行经转换的操作。变换引擎118将数据流图252中的输入组件253a和组件203c替换为查询组件256,以产生经变换的数据流图258。然后,变换引擎118将经变换的数据流图258传递给编译器引擎114,编译器引擎将经变换的数据流图258编译成可执行程序260,并将程序260程序传输至执行引擎116。执行引擎116执行操作以执行可执行程序260,如上所述,包括调用查询引擎124以将查询262传输到数据库110b,如由与查询组件256相关联的程序260的一部分所指定。如图2A和图2B中的示例所示,这里描述的技术允许相同的数据流图被优化,并且在使用不同语言的不同数据库上运行,而不需要修改底层数据流图。
参考图3A,系统300示出了系统100的附加细节。在该示例中,执行环境104的编译器引擎114(例如,从开发环境102、从存储系统106或108)接收数据流图302。数据流图302包括表示数据输入的输入组件303a、303b、表示要对数据输入或从另一操作组件流动的数据执行的操作的操作组件303c、303d、303e、303f和表示经处理数据的输出目的地的输出组件303g。在该示例中,输入组件303a表示来自数据库110a(“DB1”)的数据输入,并且输入组件303b表示来自数据库110b(“DB 2”)的数据输入,这两个数据库都是关系数据库。
由于数据流图302被配置为访问来自关系数据库的数据,因此编译器引擎114调用变换引擎118来生成对关系数据库110a、110b中的每一者的查询,以访问由输入组件303a、303b指定的数据。变换引擎118还读取转换文件120以确定数据流图302的一些操作或全部操作(例如,由组件303c、303d、303e、303f表示的操作(或其部分))是否可以被转换成一个或多个数据库的语言。在该示例中,变换引擎118能够至少将由组件303c表示的“操作1”转换成数据库110a的语言。下面参考图3D至图3P描述用于转换数据流图的操作的过程的附加细节。
在将一些操作或全部操作从数据流图302的语言转换成数据库110a、110b中的一者的语言之后,变换引擎118生成对数据库110a、110b的一个或多个查询以访问指定的输入数据并且执行经转换的操作(如果有的话)。在该示例中,变换引擎118将数据流图302中的输入组件303a和组件303c替换为经变换的数据流图306中的查询组件304a。变换引擎118还将输入组件303b替换为经变换的数据流图306中的查询组件304b。
然后,变换引擎118将经变换的数据流图306传递给编译器引擎114,编译器引擎将经变换的数据流图306编译成可执行程序308,并将程序308程序传输至执行引擎116。然后,执行引擎116执行操作以执行可执行程序308。一般而言,程序308的执行包括远程执行过程310和本地执行过程312,其可取决于数据流图302的实现串行或并行地发生,或两者。在远程执行过程310期间,执行引擎116执行与数据流图的经转换部分相关联的程序308的一部分。具体地,执行引擎116执行程序308的一部分,该部分包括机器代码309a、309b,该机器代码表示用于对数据库110a、110b的查询的指令。通过这样做,执行引擎116使查询引擎124向数据库110a、110b传输查询314a、314b(例如,如所生成的查询组件304a、304b中所定义)。数据库110a、110b中的每一者执行相应的查询314a、314b以产生查询结果316a、316b,并且查询结果316a、316b被返回到查询引擎124(或执行引擎116,或两者)。
在该示例中,执行引擎116使用查询结果316a、316b作为本地执行过程312的输入数据。在本地执行过程312期间,执行引擎116执行与数据流图的未转换部分相关联的程序308的一部分。具体地,执行引擎116执行程序308的一部分,该部分包括机器代码309c、309d、309e、309f,这些机器代码表示数据流图的未被转换或未被下推到数据库110的操作。由程序310的执行产生的数据可被存储、向用户显示、或两者,等等。
图3B和图3C示出了用于变换计算机程序的操作以供在数据库处执行的系统300的附加细节。在该示例中,开发环境102向编译器引擎114提供数据流图302以供编译。数据流图302包括表示数据输入的输入组件303a、303b、表示要对数据输入或从另一操作组件流动的数据执行的操作的操作组件303c、303d、303e、303f和表示经处理数据的输出目的地的输出组件303g。一般而言,组件303c、303d、303e、303f指定要对流过数据流图302的数据执行的各种操作,包括过滤操作、聚合操作(例如,计数、求和、求取最小值、求取最大值、求取平均值等)以及合并操作等。在一个示例中,每个操作包括定义整个操作的一个或多个表达式。在一些情况下,这些表达式是嵌套的,诸如在由组件303d所表示的操作中。术语“操作”和“表达式”有时在本公开中可互换使用,尽管注意到在一些示例中表达式比操作具有更大的粒度。
这里描述的技术可用于将一些操作或全部操作(或操作的部分,诸如构成操作的一个或多个表达式)从数据流图302的语言转换成数据库110的语言。具体地,变换引擎118利用转换文件120以与操作的语义含义一致的方式将操作(或其部分)从数据流图302的语言转换成数据库110的语言。在一些示例中,操作被转换成使用数据库110的语言的查询,该查询代替经转换的操作被插入到数据流图302中,从而允许操作被有效地下推到数据库。关于转换文件120的附加细节提供如下:
转换文件(有时称为“方言文件”)包含数据库语言规范(例如,SQL方言规范)序列,诸如:
sql dialect“default”{...}
sql dialect“db2”{...}
sql dialect“db2eee”{...}
数据流图中的每个输入数据源指定数据库名称(或DBMS名称)或包括提供数据库名称的文件。该信息可被系统用来查找或以其他方式获得数据库语言或方言。在一个示例中,如果没有发现其他方言与数据库名称匹配,则使用“默认”SQL方言。
方言继承:
在一个示例中,方言可以指定基础方言,并且然后可以覆盖其参数或规则中的一些:
sql dialect"greenplum"{base dialect="postgresql";}
sql dialect"db2eee"{base dialect="db2";}
如果没有指定基础方言,则将“默认”方言用作基础方言。
方言规则:
在一个示例中,SQL方言规范包括体现表达式的语义含义的多个模式匹配规则。一般而言,模式匹配是根据规则(例如,模式匹配规则)检查在给定表达式或表达式序列中是否存在某一模式的成分的动作。这些规则可具有以下形式:
sql(...)=dml(...);
在一个示例中,DML表达式是函数调用或一元或二元运算符:
sql(a*b)=dml(a*b);
sql(ABS(num))=dml(math_abs(num));
在一个示例中,函数或运算符的自变量可为符号名(如上文)或常量:
sql(SIGN(num))=dml(compare(num,0));
符号可以匹配实际DML中出现在位置上的任何子表达式。如果子表达式可以被静态地评估为等于该常量,则常量可匹配,因此常量的形式在一些示例中不是关键的。例如,在一些示例中,DML表达式compare(foo,(int)0)匹配上面的模式。
在一个示例中,模式按照它们出现的顺序进行匹配,因此更具体的模式可以与一般模式组合:
sql(TRUNC(num))=dml(decimal_truncate(num,0));
sql(TRUNC(num,num_places)=dml(decimal_truncate(num,num_places));
如果没有模式匹配特定的DML表达式,则可以确定方言不支持此类表达式。因此,该表达式可能不被转换或下推。
在规则的DML侧,文本被解析为DML表达式,并且针对经解析的DML表达式进行匹配。在一个示例中,如果实际DML具有键值自变量,则首先绑定这些键值自变量并将其转换为位置自变量以进行匹配。
在规则的SQL侧,使用SQL分词器来对文本进行分词,该SQL分词器理解来自所有公共SQL方言的关键字。与规则的DML侧中使用的名称匹配的任何非关键字符号将被重写为模式匹配时该名称所绑定的任何名称。
方言参数:
除了基础方言之外,方言可指定若干其他参数来控制SQL的生成。例如,可使用一个或多个参数来控制:为空列生成GROUP BY和ORDER BY子句、如何呈现字符串拼接、记录限制操作的下推、列或表别名中所允许的字符数、无需输入的合并的下推、或它们的组合等等。
参考图3D至图3P,示出了变换引擎118的附加细节。出于解释的目的,变换引擎118被示为包括过程部分320和数据部分322。在该示例中,过程部分320包括由变换引擎118执行以变换数据流图302的操作以便在数据库110处执行的操作的流程图。数据部分322包括数据流图302、指定一系列数据库及其对应方言的方言映射324、和转换文件326。
在该示例中,过程部分320中示出的过程开始于变换引擎118接收(328)数据流图302(图3E)。例如,变换引擎118经由编译器引擎114从开发环境102或存储系统106、108接收数据流图302。接下来,变换引擎生成(330)用于输入组件303a、303b的访问来自关系数据库的数据的查询组件304a、304b(图3F)。查询组件304a、304b包括使用数据库的语言的查询(例如,SELECT语句)以从数据库110检索由输入组件303a、303b指定的数据。如数据部分322中所示,所生成的查询组件304a、304b替换数据流图302中的输入组件303a、303b。
变换引擎118选择(332)数据流图302中的独立操作或操作序列以考虑进行转换(图3G)。在一个示例中,变换引擎118按照拓扑顺序处理数据流图302,因此从左到右考虑操作和操作序列。接下来,变换引擎118选择(334)操作以考虑进行转换(图3H)。因为步骤332处的选择产生单个操作(由组件303c表示的“操作1”),所以变换引擎118在这里选择了需要考虑的该操作。
在选择操作之后,变换引擎118识别(336)该操作内的表达式,读取(338)转换文件326,并且确定(340)该表达式是否受数据库支持(例如,该表达式是否能够从数据流图的语言被转换成数据库的语言)。如图3I所示,变换引擎118识别用于“操作1”的表达式“ExpressionA(In)”。由于“操作1”被配置为处理从数据库“DB 1”(例如,数据库110a)接收的数据,因此其仅可在逻辑上被下推到数据库“DB 1”。这样,变换引擎118考虑所识别的表达式是否可以被转换成数据库“DB 1”的语言。为此,变换引擎118使用方言映射324来确定数据库“DB 1”使用“方言1”语言。然后,变换引擎118访问转换文件326以确定表达式“ExpressionA(In)”是否由使用“方言1”的数据库“DB 1”支持。由于存在匹配(由粗虚线指示),因此变换引擎118将该表达式转换(342)为使用“方言1”语言的查询。另外,变换引擎118更新数据流图302(在时间T1处示出),以将查询插入到查询组件304a中并且移除表示“操作1”的组件303c,从而产生如图3J中所示的经变换的数据流图306(在时间T2处)。
参考图3K,变换引擎118确定在所选操作中不存在附加表达式(344)并且在所选序列中不存在附加操作(346),但是确定存在需要考虑的附加序列(348)。因此,变换引擎118选择(332)经变换的数据流图303中的新的操作序列以考虑进行转换。在该示例中,所选操作包括由组件303d表示的“操作2”和由组件303e表示的“操作3”。变换引擎118然后选择(334)要考虑的操作(“操作2”,如图3L中所示)并且识别(336)该操作内的表达式。由于“操作2”包括嵌套表达式,因此变换引擎118以独立表达式“ExpressionC(In)”开始,读取(338)转换文件326,并且确定(340)该表达式是否受数据库支持,如图3M所示。因为“操作2”被配置成处理从数据库“DB 2”(例如,数据库110b)接收到的数据,因此变换引擎118考虑所识别的表达式是否可被转换成数据库“DB 2”的语言。为此,变换引擎118使用方言映射324来确定数据库“DB 2”使用“方言2”语言。然后,变换引擎118访问转换文件326以确定表达式“ExpressionC(In)”是否由使用“方言2”的数据库“DB 2”支持。由于存在匹配(由粗虚线指示),因此变换引擎118将该表达式转换(342)为使用“方言2”语言的查询。另外,变换引擎118更新经变换的数据流图306(在时间T1处示出),以将查询插入到查询组件304b中并且移除来自表示“操作2”的组件303d的表达式,从而产生如图3N中所示的经更新的数据流图306(在时间T2处)。
在转换“ExpressionC(In)”并相应地更新数据流图306之后,变换引擎118确定(344)存在用于所选操作的附加表达式。这样,变换引擎118识别(336)“ExpressionB(In)”,读取(338)转换文件326,并且确定(340)该表达式是否受数据库“DB 2”支持,如图3O所示。由于转换文件326中没有针对“ExpressionB(In)”的匹配,因此变换引擎118确定该表达式不被数据库“DB 2”所使用的“方言2”语言支持。因此,变换引擎118不转换(350)该表达式或任何从属表达式。由于在此示例中由组件303e表示的“操作3”和由组件303f表示的“操作4”各自至少部分地依赖于“操作2”(和“ExpressionB(In)”),因此变换引擎118不尝试转换或下推这些操作或它们的对应表达式。因此,变换引擎118确定(348)不存在要考虑的附加序列,并且输出(352)经变换的数据流图,如图3P所示。
注意,尽管变换引擎118在以上示例中不考虑由组件303e和303f表示的操作,但是在操作不依赖于不能被转换或下推的操作的其他示例中可以考虑这些操作。另外,在一些示例中,变换引擎118可以对操作或其对应的表达式进行重新排序,包括将操作或表达式分解为单独的组件,以便使得操作或表达式能够被下推。例如,在以上示例的另选型式中,变换引擎118可以交换“操作2”和“操作3”的次序以允许“操作3”被下推,如果这样做不会影响数据流图的预期结果的话。
图3Q至图3T示出了用于变换计算机程序的操作以供在数据库处执行的系统300的附加细节。在对数据流图302的操作进行变换以产生经变换的数据流图306之后,变换引擎118将经变换的图306传递到编译器引擎114以供编译。编译器引擎114将经变换的数据流图306编译成可执行程序308,该可执行程序具有机器代码309a、309b、309c、309d、309e、309f,这些机器代码表示可被执行以执行经变换的数据流图306的操作的指令,如图3R所示。编译器引擎114将程序308提供给执行引擎116以供执行。如上所述,执行引擎116可以通过执行程序308的与数据流图的经转换部分相关联的一部分来开始,如图3S所示。具体地,执行引擎116执行程序308的一部分,该部分包括机器代码309a、309b,该机器代码表示用于对数据库110a、110b的查询的指令。通过这样做,执行引擎116使查询引擎124(或执行引擎本身)建立与待被查询的数据库110a、110b的通信,并且将查询314a、314b(其可以与由变换引擎118插入到查询组件304a、304b中的查询相同)传输到相应的数据库110a、110b。数据库110a、110b中的每一者执行相应的查询314a、314b以产生查询结果316a、316b,并且查询结果316a、316b被返回到查询引擎124(或执行引擎116,或两者)。
在接收到查询结果316a、316b时,执行引擎116将查询结果316a、316b作为输入来执行与数据流图的未转换部分相关联的程序308的一部分。具体地,执行引擎116执行程序308的一部分,该部分包括机器代码309c、309d、309e、309f,这些机器代码表示数据流图的未被转换或未被下推到数据库110的操作。程序310的执行结果354可被存储在例如存储系统108中、或向用户显示、或两者,等等。
参考图4A,环境400示出了变换计算机程序的操作以供在数据库处执行的真实示例。在该示例中,变换引擎118接收具有输入查询组件403a和操作组件403b的数据流图402。需注意,在该示例中仅示出了数据流图402的一部分。输入查询组件403a指定使用数据库(例如,数据库110)的语言的查询,以从数据库中的表“输入1”检索所有记录。操作组件403b指定使用数据流图402的语言的操作,该操作被配置为针对输入数据中的每个记录对名(“fname”)和姓(“lname”)字段(其间具有空格)进行首字母大写和串接。
为了确定操作组件403b中的一些或全部表达式是否可被下推至数据库,变换引擎118首先识别数据库所使用的语言(例如,基于输入查询组件403a、与输入组件403a相关联的文件等)。假设变换引擎118确定数据库的语言是“方言1”,则变换引擎118读取转换文件404,以确定由操作组件403b表示的一些或全部表达式是否由“方言1”语言支持。由于存在针对操作的每个表达式的匹配,因此变换引擎118能够将操作从数据流图402的语言完全转换成数据库的语言。变换引擎118产生经变换的数据流图406,其中操作组件403b被移除并且经转换的操作被插入到输入查询组件403a中,从而有效地将操作组件403b中指定的处理下推到数据库。
参考图4B,环境450示出了变换计算机程序的操作以供在数据库处执行的另一真实示例。环境450中所示的示例类似于环境400中所示的示例,不同的是,输入组件403a现在访问来自使用“方言2”语言的数据库中的表“输入2”的数据。与前一示例非常类似,变换引擎118读取转换文件404,以确定由操作组件403b表示的一些或全部表达式是否由数据库的语言支持。在该示例中,变换引擎118再次发现存在针对操作的每个表达式的匹配,尽管转换略有不同。因此,变换引擎118产生经变换的数据流图408,其中经转换的操作代替操作403b被插入到输入查询组件403a中。如环境400和图450中的示例所示,这里描述的技术使得相同的数据流图能够被优化,并且在使用不同语言的不同数据库上运行,而不需要修改底层数据流图源代码。
参考图5,环境500示出了根据在此描述的技术的转换文件502的扩展性的示例。在该示例中,变换引擎118接收与图3A至图3T中描述的数据流图302相同的数据流图302(在已经添加了输入查询组件304a、304b之后)。回想变换引擎118不能转换或下推在组件303d中指定的“ExpressionB(In)”,因为转换文件没有指示此类操作在“DB 2”数据库(例如,数据库110b)所使用的“方言2”语言的能力范围内。因此,变换引擎不能够转换或下推由组件303e表示的任何操作,尽管转换文件指示这些操作受支持,因为这些操作依赖于从组件303d输出的数据。
在环境500中,转换文件502已被扩展为包括对“ExpressionB(In)”(在图5中以粗体示出)的支持。因此,变换引擎118现在能够将相同的数据流图302变换为高度优化且高效的经变换的数据流图504,其中在组件303d和303e中指定的所有操作都被下推(需注意,在此示例中,组件303f所表示的操作不能被下推,因为它依赖于来自两个不同数据库的数据)。因此,转换文件502(除了这里描述的其他技术之外)通过允许用户将系统的能力扩展到他们遇到的任何特定数据库(或者更新现有数据库)来提供极大的灵活性。由于系统在运行时拾取转换文件,因此转换不用二进制编码,并且允许相同的源代码(例如,用于计算机程序诸如数据流图)在任何数据库上高效地运行。
参考图6A至图6C,示出了在优化的各个阶段的数据流图600。在图6A中,数据流图600是完全未优化的,从而导致计算资源的严重低效率和负担。在图6B中,数据流图600已经被优化,使得它更快、更高效并且使用更少的计算资源。使用诸如无效或冗余组件消除、早期过滤、或记录缩减、或它们的组合等技术来优化数据流图600。用于优化数据流图的技术的附加细节可在名称为“用于数据流图优化的系统和方法(Systems and Methods forDataflow Graph Optimization)”的美国专利申请第15/993,284号中描述,该专利申请的全部内容通过引用并入本文。最后,在图6C中,已经使用这里描述的下推技术进一步优化了数据流图600。由于先前在本地(例如,由执行环境)执行的操作已经被下推到一个或多个数据库,因此图6C中示出的数据流图600比图6A和图6B中示出的数据流图更快、更高效,并且使用更少的计算资源。
图7示出了用于变换计算机程序的操作以便在数据库处执行的示例性过程700的流程图。过程700可由本文中所描述的系统(例如,系统100、200、250、300)和组件(例如,执行环境104或其组件,诸如变换引擎118)中的一者或多者来实现,包括被配置成实现参考图1至图6描述的技术的一个或多个计算系统。
过程700的操作包括由数据处理系统执行(702)指定操作的程序(例如,计算机程序),其中该程序用语言(例如,编程语言)编写。例如,该程序是计算机程序,诸如数据流图(例如,数据流图112、202、302等),该数据流图具有表示操作的节点,该操作通过表示操作之间的数据流的链路连接。在一个示例中,该程序用数据操纵语言(DML)编写。
过程700的操作进一步包括访问(704)转换文件,该转换文件包括用于将程序的语言转换成数据库的语言的一个或多个指令。转换文件(例如,转换文件120)指定受数据库支持的使用程序的语言的一个或多个操作,并且进一步指定使用数据库的语言的一个或多个受支持操作的语义含义。在一个示例中,数据库是关系数据库,并且数据库的语言是结构化查询语言(SQL)或SQL方言。在一个示例中,从程序接收对数据库的语言的指示。在一个示例中,转换文件包括用于将程序的语言转换成包括数据库的语言的多个数据库的语言的一个或多个指令。在一个示例中,语义含义对使用数据库的语言的一个或多个受支持操作的数据类型、运算符的含义、函数的含义或操作的预期结果中的至少一者进行说明。在一个示例中,转换文件是可扩展的,在运行时被访问,并且不被编码在程序中(例如,不被编码在用于程序的二进制代码或机器代码中,而是可作为例如存储装置中的单独文件被访问)。
基于转换文件,确定程序的不受数据库支持的一个或多个操作(706)。由程序处理不受数据库支持的一个或多个操作(708)。在一个示例中,操作706和708是可选的。在一个示例中,程序不处理该程序的受数据库支持的一个或多个操作(例如,程序仅处理不受数据库支持的一个或多个操作)。在一个示例中,数据处理系统不执行表示受数据库支持的一个或多个操作的程序的一部分。在一个示例中,在接收到执行受数据库支持的一个或多个操作所产生的数据之后,由程序处理不受数据库支持的一个或多个操作,其中由此类执行产生的数据被用作不受数据库支持的一个或多个操作的输入数据。
使用转换文件,确定程序的受数据库支持的一个或多个操作(710)。在一个示例中,确定数据库支持(或不支持,或两者)的一个或多个操作包括将一个或多个模式匹配规则应用于转换文件中使用程序的语言所指定的一个或多个操作。
对于受数据库支持的一个或多个操作,该过程的操作包括(712):基于转换文件将表示受数据库支持的一个或多个操作的程序的一部分转换成数据库的语言;向数据库传输程序的经转换部分;以及通过程序从数据库接收由在数据库内执行程序的经转换部分而产生的数据,该程序的经转换部分表示受数据库支持的一个或多个操作。在一个示例中,对表示受数据库支持的一个或多个操作的程序的一部分进行转换包括生成使用数据库的语言的对数据库的一个或多个查询。在一个示例中,对数据库的查询指定使用数据库的语言的一个或多个操作(或一个或多个操作的等同物)。在一个示例中,在数据库内执行查询产生由在数据库内执行程序的经转换部分而得到的数据,该程序的经转换部分表示受数据库支持的一个或多个操作。在一个示例中,程序的至少一个操作包括查询操作,并且过程包括从程序移除受数据库支持的一个或多个操作,并且将使用数据库的语言的对数据库的一个或多个查询插入到查询操作中。在一个示例中,由程序对从数据库接收的数据以及对从不受数据库支持的一个或多个操作的处理返回的数据执行一个或多个附加操作。
本说明书中描述的主题和操作的具体实施,包括开发环境102、执行环境104及其组件,可在数字电子电路中实现,或在计算机软件、固件或硬件中实现,包括本说明书中公开的结构及其结构等同物,或在其中的一者或多者的组合中实现。本说明书中描述的主题的实施方式可实施为一个或多个计算机程序(也称为数据处理程序)(即计算机程序指令的一个或多个模块,所述一个或多个计算机程序指令编码在计算机存储介质上以供数据处理装置执行或控制所述数据处理装置的操作)。计算机存储介质可以是或可被包括在计算机可读存储设备、计算机可读存储基板、随机或串行存取存储器阵列或设备或它们中的一者或多者的组合中。计算机存储介质也可以是或被包括在一个或多个单独的物理部件或介质(例如,多个CD、盘或其他存储设备)中。主题可以在存储在非暂态计算机存储介质上的计算机程序指令上实施。
本说明书中描述的操作可以被实施为由数据处理装置对存储在一个或多个计算机可读存储设备上或从其他源接收的数据执行的操作。
术语“数据处理装置”涵盖用于处理数据的所有种类的装置、设备和机器,包括例如可编程处理器、计算机、片上系统或前述项中的多个项或前述项的组合。装置可包括专用逻辑电路(例如FPGA(现场可编程门阵列)或ASIC(专用集成电路))。除了硬件之外,所述装置还可包括为相关计算机程序提供执行环境的代码(例如构成处理器固件、协议栈、数据库管理系统、操作系统、跨平台运行时环境、虚拟机或它们中的一者或多者的组合的代码)。装置和执行环境可实现各种不同计算模型基础设施,诸如web服务、分布式计算和网格计算基础设施。
计算机程序(也称为程序、软件、软件应用程序、脚本或代码)可以用任何形式的编程语言编写,包括编译或解释语言、声明性或过程性语言,并且可以以任何形式部署,包括作为独立程序或作为模块、组件、子例程、对象或适用于计算环境的其他单元。计算机程序可但不必需对应于文件系统中的文件。程序可以存储在保存其他程序或数据(例如,存储在标记语言文档中的一个或多个脚本)的文件的一部分中,专用于所讨论的程序的单个文件中,或者存储在多个协调文件中(例如,存储一个或多个模块、子程序或部分代码的文件)。计算机程序可以部署为在一台计算机上或在多台计算机上执行,这些计算机位于一个站点或跨多个站点分布并通过通信网络互连。
本说明书中描述的过程和逻辑流程可以由执行一个或多个计算机程序的一个或多个可编程处理器执行,以通过对输入数据进行操作并生成输出来执行动作。这些过程和逻辑流程也可以由专用逻辑电路(例如FPGA(现场可编程门阵列)或ASIC(专用集成电路))来执行,并且装置也可以被实施为专用逻辑电路。
适合于执行计算机程序的处理器包括例如通用和专用微处理器两者,以及任何种类的数字计算机的任何一个或多个处理器。通常,处理器将从只读存储器或随机存取存储器或这两者接收指令和数据。计算机的基本元件是用于根据指令执行动作的处理器以及用于存储指令和数据的一个或多个存储器设备。通常,计算机还将包括用于存储数据的一个或多个大容量存储设备(例如,磁盘、磁光盘或光盘),或者可操作地耦接以从其接收数据或向其传送数据或两者,然而,计算机不需要具有此类设备。此外,计算机可以嵌入另一设备(例如,移动电话、个人数字助理(PDA)、移动音频或视频播放器、游戏控制台、全球定位系统(GPS)接收器或便携式存储设备(例如,通用串行总线(USB)闪存驱动器))中。适用于存储计算机程序指令和数据的设备包括所有形式的非易失性存储器、介质和存储器设备,包括例如半导体存储器设备(例如,EPROM、EEPROM和闪存设备)、磁盘(例如,内部硬盘或可移动磁盘)、磁光盘以及CD-ROM和DVD-ROM盘。处理器和存储器可以由专用逻辑电路补充或并入其中。
本说明书描述的主题的实施方式可以在计算系统中实施,所述计算系统包括后端组件(例如,作为数据服务器),或者包括中间件组件(例如,应用服务器),或者包括前端组件(例如,具有图形用户界面或Web浏览器的用户计算机,用户可以通过所述图形用户界面或Web浏览器与本说明书中描述的主题的实施方式交互),或者一个或多个这样的后端、中间件或前端组件的任何组合。系统的组件可以通过数字数据通信的任何形式或介质(例如通信网络)互连。通信网络的示例包括局域网(LAN)和广域网(WAN)、网间网络(例如,互联网)和对等网络(例如,自主对等网络)。
计算系统可以包括用户和服务器。用户和服务器通常彼此远离并且通常通过通信网络进行交互。用户与服务器的关系是由于运行在相应计算机上的计算机程序产生的,并且彼此具有用户-服务器关系。在一些实施方式中,服务器将数据(例如,HTML页面)传输到用户设备(例如,出于向与用户设备交互的用户显示数据和从所述用户接收用户输入的目的)。可以在服务器处从用户设备接收在用户设备处生成的数据(例如,用户交互的结果)。
虽然本说明书包含许多特定实施方式细节,但是这些不应被解释为对任何实施方式或可能要求保护的内容的范围的限制,而是作为特定于特定实施方式的特征的描述。在本说明书中在单独实施方式的上下文中描述的某些特征也可以在单个实施方式中组合实施。反过来,在单个实施方案的上下文中描述的各个特征也可单独地或者以任何合适的子组合在多个实施方式中实施。此外,尽管上文所述特征可呈某些组合来发挥作用,甚至在最初照此要求保护,但在一些情况下,要求保护的组合中的一个或多个特征可从此组合中删除,并且要求保护的组合可以是针对某子组合或子组合的变型。
类似地,尽管附图按具体顺序示出各操作,但是这不应理解为此类操作必须按照所示的具体顺序或相继顺序来执行,或者执行所有所示操作必须获得理想结果。在某些情形下,多重任务处理和并行处理会是有利的。此外,上述实施方式中的各种系统组件的分离不应被理解为在所有实施方式中都需要此类分离,并且应当理解,所描述的程序组件和系统通常可以一起集成在单个软件产品中或封装到多个软件产品中。
其他实施方式均在以下权利要求书的范围内。
Claims (20)
1.一种方法,所述方法包括:
由数据处理系统执行指定操作的程序,其中所述程序用语言编写;
访问转换文件,所述转换文件包括用于将所述程序的所述语言转换成数据库的语言的一个或多个指令,其中所述转换文件指定受所述数据库支持的使用所述程序的所述语言的一个或多个操作,并且进一步指定使用所述数据库的所述语言的所述一个或多个受支持操作的语义含义;
从所述转换文件确定所述程序的不受所述数据库支持的所述操作中的一个或多个操作;
由所述程序处理不受所述数据库支持的所述操作中的所述一个或多个操作;
从所述转换文件确定所述程序的受所述数据库支持的所述操作中的一个或多个操作;以及
对于受所述数据库支持的所述操作中的所述一个或多个操作:
使用所述转换文件将表示受所述数据库支持的所述操作中的所述一个或多个操作的所述程序的一部分转换成所述数据库的所述语言;
将所述程序的所述经转换的部分传输至所述数据库;以及
通过所述程序从所述数据库接收由在所述数据库内执行所述程序的所述经转换部分而产生的数据,所述程序的所述经转换部分表示受所述数据库支持的所述操作中的所述一个或多个操作。
2.根据权利要求1所述的计算机实现的方法,所述方法包括由所述程序对从所述数据库接收的所述数据以及对从不受所述数据库支持的所述操作中的所述一个或多个操作的所述处理返回的数据执行一个或多个附加操作。
3.根据权利要求1所述的计算机实现的方法,其中所述程序包括可执行数据流图,所述可执行数据流图具有表示所述操作的组件,所述操作由表示所述操作之间的数据流的链路所连接。
4.根据权利要求1所述的计算机实现的方法,其中对表示受所述数据库支持的所述操作中的所述一个或多个操作的所述程序的所述部分进行转换包括生成使用所述数据库的所述语言的对所述数据库的一个或多个查询,以用于在所述数据库内执行所述操作中的所述一个或多个操作。
5.根据权利要求4所述的计算机实现的方法,其中所述程序的所述操作中的至少一个操作包括查询操作,所述方法包括:
从所述程序中移除受所述数据库支持的所述一个或多个操作;以及
将使用所述数据库的所述语言的对所述数据库的所述一个或多个查询插入到所述查询操作中。
6.根据权利要求1所述的计算机实现的方法,其中确定受所述数据库支持的所述操作中的所述一个或多个操作包括将一个或多个模式匹配规则应用于所述转换文件中使用所述程序的所述语言指定的所述一个或多个操作。
7.根据权利要求1所述的计算机实现的方法,其中所述语义含义对使用所述数据库的所述语言的所述一个或多个受支持操作的数据类型、运算符的含义、函数的含义或操作的预期结果中的至少一者进行说明。
8.根据权利要求1所述的计算机实现的方法,其中所述转换文件不被编码在所述程序中。
9.根据权利要求1所述的计算机实现的方法,所述方法包括从所述程序接收对所述数据库的所述语言的指示。
10.根据权利要求1所述的计算机实现的方法,其中所述程序的所述语言包括数据操纵语言,并且其中所述数据库的所述语言包括结构化查询语言。
11.根据权利要求1所述的计算机实现的方法,其中所述转换文件包括用于将所述程序的所述语言转换成包括所述数据库的所述语言的多个数据库的语言的一个或多个指令。
12.一种系统,所述系统包括:
一个或多个处理器;和
一个或多个存储设备,所述一个或多个存储设备存储指令,所述指令在由所述一个或多个处理器执行时,使所述一个或多个处理器执行操作,所述操作包括:
执行指定操作的程序,其中所述程序用语言编写;
访问转换文件,所述转换文件包括用于将所述程序的所述语言转换成数据库的语言的一个或多个指令,其中所述转换文件指定受所述数据库支持的使用所述程序的所述语言的一个或多个操作,并且进一步指定使用所述数据库的所述语言的所述一个或多个受支持操作的语义含义;
从所述转换文件确定所述程序的不受所述数据库支持的所述操作中的一个或多个操作;
由所述程序处理不受所述数据库支持的所述操作中的所述一个或多个操作;
从所述转换文件确定所述程序的受所述数据库支持的所述操作中的一个或多个操作;以及
对于受所述数据库支持的所述操作中的所述一个或多个操作:
使用所述转换文件将表示受所述数据库支持的所述操作中的所述一个或多个操作的所述程序的一部分转换成所述数据库的所述语言;
将所述程序的所述经转换的部分传输至所述数据库;以及
通过所述程序从所述数据库接收由在所述数据库内执行所述程序的所述经转换部分而产生的数据,所述程序的所述经转换部分表示受所述数据库支持的所述操作中的所述一个或多个操作。
13.根据权利要求12所述的系统,其中所述一个或多个存储设备存储指令,所述指令在由所述一个或多个处理器执行时,使所述一个或多个处理器执行操作,所述操作包括:由所述程序对从所述数据库接收的所述数据以及对从不受所述数据库支持的所述操作中的所述一个或多个操作的所述处理返回的数据执行一个或多个附加操作。
14.根据权利要求12所述的系统,其中对表示受所述数据库支持的所述操作中的所述一个或多个操作的所述程序的所述部分进行转换包括生成使用所述数据库的所述语言的对所述数据库的一个或多个查询。
15.根据权利要求14所述的系统,其中所述程序的所述操作中的至少一个操作包括查询操作,所述一个或多个存储设备存储指令,所述指令在由所述一个或多个处理器执行时,使所述一个或多个处理器执行操作,所述操作包括:
从所述程序中移除受所述数据库支持的所述一个或多个操作;以及
将使用所述数据库的所述语言的对所述数据库的所述一个或多个查询插入到所述查询操作中。
16.根据权利要求12所述的系统,其中所述语义含义对使用所述数据库的所述语言的所述一个或多个受支持操作的数据类型、运算符的含义、函数的含义或操作的预期结果中的至少一者进行说明。
17.一种存储指令的非暂态计算机可读存储介质,所述指令用于使计算系统:
由数据处理系统执行指定操作的程序,其中所述程序用语言编写;
访问转换文件,所述转换文件包括用于将所述程序的所述语言转换成数据库的语言的一个或多个指令,其中所述转换文件指定受所述数据库支持的使用所述程序的所述语言的一个或多个操作,并且进一步指定使用所述数据库的所述语言的所述一个或多个受支持操作的语义含义;
从所述转换文件确定所述程序的不受所述数据库支持的所述操作中的一个或多个操作;
由所述程序处理不受所述数据库支持的所述操作中的所述一个或多个操作;
从所述转换文件确定所述程序的受所述数据库支持的所述操作中的一个或多个操作;以及
对于受所述数据库支持的所述操作中的所述一个或多个操作:
使用所述转换文件将表示受所述数据库支持的所述操作中的所述一个或多个操作的所述程序的一部分转换成所述数据库的所述语言;
将所述程序的所述经转换的部分传输至所述数据库;以及
通过所述程序从所述数据库接收由在所述数据库内执行所述程序的所述经转换部分而产生的数据,所述程序的所述经转换部分表示受所述数据库支持的所述操作中的所述一个或多个操作。
18.根据权利要求17所述的非暂态计算机可读存储介质,所述非暂态计算机可读存储介质包括指令,所述指令用于使所述计算系统通过所述程序对从所述数据库接收的所述数据以及对从不受所述数据库支持的所述操作中的所述一个或多个操作的所述处理返回的数据执行一个或多个附加操作。
19.根据权利要求17所述的非暂态计算机可读存储介质,其中所述程序包括可执行数据流图,所述可执行数据流图具有表示所述操作的组件,所述操作由表示所述操作之间的数据流的链路所连接。
20.根据权利要求17所述的非暂态计算机可读存储介质,其中所述语义含义对使用所述数据库的所述语言的所述一个或多个受支持操作的数据类型、运算符的含义、函数的含义或操作的预期结果中的至少一者进行说明。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17/012,633 | 2020-09-04 | ||
US17/012,633 US20220075778A1 (en) | 2020-09-04 | 2020-09-04 | Transforming operations of a computer program for execution at a database |
PCT/US2021/048993 WO2022051577A1 (en) | 2020-09-04 | 2021-09-03 | Transforming operations of a computer program for execution at a database |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116018581A true CN116018581A (zh) | 2023-04-25 |
Family
ID=78000799
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202180054604.2A Pending CN116018581A (zh) | 2020-09-04 | 2021-09-03 | 变换计算机程序的操作以供在数据库处执行 |
Country Status (9)
Country | Link |
---|---|
US (1) | US20220075778A1 (zh) |
EP (1) | EP4208779A1 (zh) |
JP (1) | JP2023540242A (zh) |
CN (1) | CN116018581A (zh) |
AU (1) | AU2021336433A1 (zh) |
BR (1) | BR112023004061A2 (zh) |
CA (1) | CA3190567A1 (zh) |
DE (1) | DE112021004637T5 (zh) |
WO (1) | WO2022051577A1 (zh) |
Family Cites Families (6)
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 |
US8914807B2 (en) * | 2001-09-28 | 2014-12-16 | International Business Machines Corporation | Method, system, and program for generating a program capable of invoking a flow of operations |
US7516121B2 (en) * | 2004-06-23 | 2009-04-07 | Oracle International Corporation | Efficient evaluation of queries using translation |
US20070027905A1 (en) * | 2005-07-29 | 2007-02-01 | Microsoft Corporation | Intelligent SQL generation for persistent object retrieval |
JP2011157155A (ja) | 2010-01-29 | 2011-08-18 | Brother Industries Ltd | 画像記録装置 |
US11474799B2 (en) * | 2020-07-31 | 2022-10-18 | Snowflake Inc. | Providing code translation related to resilient distributed datasets in database systems |
-
2020
- 2020-09-04 US US17/012,633 patent/US20220075778A1/en active Pending
-
2021
- 2021-09-03 WO PCT/US2021/048993 patent/WO2022051577A1/en unknown
- 2021-09-03 EP EP21783109.8A patent/EP4208779A1/en active Pending
- 2021-09-03 DE DE112021004637.3T patent/DE112021004637T5/de active Pending
- 2021-09-03 CN CN202180054604.2A patent/CN116018581A/zh active Pending
- 2021-09-03 BR BR112023004061A patent/BR112023004061A2/pt unknown
- 2021-09-03 AU AU2021336433A patent/AU2021336433A1/en active Pending
- 2021-09-03 CA CA3190567A patent/CA3190567A1/en active Pending
- 2021-09-03 JP JP2023513773A patent/JP2023540242A/ja active Pending
Also Published As
Publication number | Publication date |
---|---|
WO2022051577A1 (en) | 2022-03-10 |
CA3190567A1 (en) | 2022-03-10 |
DE112021004637T5 (de) | 2023-06-22 |
BR112023004061A2 (pt) | 2023-04-04 |
EP4208779A1 (en) | 2023-07-12 |
US20220075778A1 (en) | 2022-03-10 |
JP2023540242A (ja) | 2023-09-22 |
AU2021336433A1 (en) | 2023-03-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI354908B (en) | Method, computer program product, and computer sys | |
US7860863B2 (en) | Optimization model for processing hierarchical data in stream systems | |
US8799299B2 (en) | Schema contracts for data integration | |
US9383982B2 (en) | Data-parallel computation management | |
US8997070B2 (en) | Extension mechanism for scripting language compiler | |
JP5530449B2 (ja) | モジュラフォレストオートマトン | |
JP2023511631A (ja) | 計算グラフを生成するためのエディタ | |
US20140114952A1 (en) | Optimizing queries of parallel databases | |
CN113283613B (zh) | 深度学习模型的生成方法、优化方法、装置、设备及介质 | |
US8336035B2 (en) | Customizable dynamic language expression interpreter | |
US9823911B2 (en) | Method and apparatus for compiling code based on a dependency tree | |
JP2005018767A (ja) | クエリオプティマイザのシステムおよび方法 | |
CN113031966B (zh) | 一种智能选择编译加速库的深度学习编译优化方法 | |
JP2006228200A (ja) | リレーションシップモデリング | |
US20120272225A1 (en) | Incremental upgrade of entity-relationship systems | |
CN116368494A (zh) | 一种神经网络编译优化方法和相关装置 | |
Cartright et al. | Galago: A Modular Distributed Processing and Retrieval System. | |
WO2018165420A1 (en) | Enterprise integration processing for mainframe cobol programs | |
US20070192083A1 (en) | Linguistic structure for data flow diagrams | |
CN112988163A (zh) | 编程语言智能适配方法、装置、电子设备和介质 | |
CN114611714B (zh) | 模型处理方法、装置、系统、电子设备及存储介质 | |
CN116018581A (zh) | 变换计算机程序的操作以供在数据库处执行 | |
Chang et al. | Support NNEF execution model for NNAPI | |
Cheung | Rethinking the application-database interface | |
JP2002073387A (ja) | データベース処理方法 |
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 |