CN116069811A - 使用用户定义的函数扩展数据库外部函数 - Google Patents
使用用户定义的函数扩展数据库外部函数 Download PDFInfo
- Publication number
- CN116069811A CN116069811A CN202211349444.7A CN202211349444A CN116069811A CN 116069811 A CN116069811 A CN 116069811A CN 202211349444 A CN202211349444 A CN 202211349444A CN 116069811 A CN116069811 A CN 116069811A
- Authority
- CN
- China
- Prior art keywords
- function
- data
- serializer
- deserializer
- external
- 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.)
- Granted
Links
- 230000006870 function Effects 0.000 title claims abstract description 279
- 238000012545 processing Methods 0.000 claims abstract description 49
- 238000000034 method Methods 0.000 claims description 137
- 230000008569 process Effects 0.000 claims description 85
- 238000003860 storage Methods 0.000 claims description 76
- 230000015654 memory Effects 0.000 claims description 27
- 238000013500 data storage Methods 0.000 description 37
- 238000004891 communication Methods 0.000 description 34
- 230000005540 biological transmission Effects 0.000 description 12
- 239000000872 buffer Substances 0.000 description 10
- 230000008859 change Effects 0.000 description 9
- 230000004044 response Effects 0.000 description 9
- 238000006243 chemical reaction Methods 0.000 description 7
- 230000008878 coupling Effects 0.000 description 7
- 238000010168 coupling process Methods 0.000 description 7
- 238000005859 coupling reaction Methods 0.000 description 7
- 238000005516 engineering process Methods 0.000 description 7
- 238000007726 management method Methods 0.000 description 7
- 238000012546 transfer Methods 0.000 description 7
- 238000004458 analytical method Methods 0.000 description 6
- 230000007246 mechanism Effects 0.000 description 6
- 230000008451 emotion Effects 0.000 description 5
- 238000010586 diagram Methods 0.000 description 4
- 238000005457 optimization Methods 0.000 description 4
- 238000013519 translation Methods 0.000 description 4
- 230000001413 cellular effect Effects 0.000 description 3
- 239000000284 extract Substances 0.000 description 3
- 230000003068 static effect Effects 0.000 description 3
- 230000007704 transition Effects 0.000 description 3
- 244000035744 Hura crepitans Species 0.000 description 2
- 238000013475 authorization Methods 0.000 description 2
- 230000006835 compression Effects 0.000 description 2
- 238000007906 compression Methods 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000007935 neutral effect Effects 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 230000004913 activation Effects 0.000 description 1
- 238000001994 activation Methods 0.000 description 1
- 230000006978 adaptation Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000010267 cellular communication Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000006378 damage Effects 0.000 description 1
- 238000007405 data analysis Methods 0.000 description 1
- 230000006837 decompression Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000009826 distribution Methods 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- GVVPGTZRZFNKDS-JXMROGBWSA-N geranyl diphosphate Chemical compound CC(C)=CCC\C(C)=C\CO[P@](O)(=O)OP(O)(O)=O GVVPGTZRZFNKDS-JXMROGBWSA-N 0.000 description 1
- 229910000078 germane Inorganic materials 0.000 description 1
- 230000036541 health Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 230000007774 longterm Effects 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 230000000116 mitigating effect Effects 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 230000005693 optoelectronics Effects 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 230000000737 periodic effect Effects 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 230000000135 prohibitive effect Effects 0.000 description 1
- 238000013138 pruning Methods 0.000 description 1
- 230000001172 regenerating effect Effects 0.000 description 1
- 238000013341 scale-up Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
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/2455—Query execution
- G06F16/24552—Database cache management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2291—User-Defined Types; Storage management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24564—Applying rules; Deductive queries
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
-
- 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/258—Data format conversion from or to a database
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/955—Retrieval from the web using information identifiers, e.g. uniform resource locators [URL]
- G06F16/9566—URL specific, e.g. using aliases, detecting broken or misspelled links
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
- G06F21/53—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by executing in a restricted environment, e.g. sandbox or secure virtual machine
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Computer Security & Cryptography (AREA)
- Computing Systems (AREA)
- Computer Hardware Design (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开了使用用户定义的函数扩展数据库外部函数。外部函数系统可以在数据库上实现,以在一个或更多个外部网络服务上执行处理。外部函数系统可以包括用于特定外部服务的特定外部函数、与特定外部函数链接的出站串行化器函数和入站串行化器函数。出站串行化器函数可被配置成将查询的数据从数据库格式转变成特定外部网络服务的不同格式。入站去串行化器函数可以配置为接收从外部服务返回的数据,并将数据转变成数据库的格式。
Description
技术领域
本公开的实施例一般涉及基于网络的数据库系统,且更具体而言,涉及使用数据库函数和网络服务。
背景
可将数据上传至数据库,并可通过网络接口提供对数据库的访问。最近,云数据库服务越来越受欢迎,因为可以轻松地创建新的数据库实例来存储数据。虽然新的云数据库服务允许容易地创建数据库,但是云数据库服务产生了关于不同系统之间的数据接口的新问题。例如,很难以一种可扩展的方式管理数据库和不同网络服务之间的数据格式,而不招致令人望而却步的计算和网络开销。
附图简述
从下面给出的详细描述和本公开的各种实施例的附图中,将更全面地理解本公开。
图1示出了根据本公开的一些实施例的示例计算环境,其包括与云存储平台通信的基于网络的数据库系统。
图2是示出根据本公开一些实施例的计算服务管理器的部件的框图。
图3是示出根据本公开一些实施例的执行平台的部件的框图。
图4是根据本公开的一些实施例从概念上示出了由运行在执行平台的给定执行节点上的进程执行用户定义的函数(UDF)的示例软件架构的计算环境。
图5根据本公开的一些实施例显示了用于在中转位置(staging location)实现对UDF的文件访问的数据架构。
图6根据本公开的一些实施例显示了外部函数访问系统架构。
图7根据本公开的一些实施例显示了在外部服务上实施数据库系统的外部函数的方法的流程图。
图8示出了根据本公开的一些实施例的计算机系统形式的机器的图解表示,用于使机器执行本文所讨论方法中的任何一种或更多种方法的指令集合可以在该计算机系统内执行。
详细描述
现在将详细参考用于实现本发明主题的具体示例实施例。这些具体实施例的示例在附图中示出,并且具体细节在以下描述中阐述,以便提供对主题的透彻理解。应当理解,这些示例并不旨在将权利要求的范围限制于所示的实施例。相反,它们旨在覆盖可能被包含在本公开范围内的替代、修改、和等同物。
如前所述,难以将数据库中的数据与不同的外部服务对接。在一些示例实施例中,分布式数据库可以使用外部服务来实现用于处理数据库数据的外部函数。在一些示例实施例中,外部函数是数据库系统的一种类型的UDF;然而,不同于数据库系统的其他UDF(例如,如下所述的出站串行化器UDF、入站去串行化器UDF),外部函数不包含其自己的代码,相反,外部函数调用在数据库外部(例如,在外部网络服务上)存储和执行的代码。在一些示例实施例中,在数据库内部,外部函数被存储为包含数据库用来调用外部服务的信息的数据库对象。例如,存储的信息包括代理服务的URL,代理服务向外部服务中继信息,也从外部服务中继信息。在一些示例实施例中,存储的信息在CREATE EXTERNAL FUNCTION命令中指定。在一些示例实施例中,表示外部函数的数据库对象是在数据库系统的特定数据库中创建的,并且具有特定模式。在一些示例实施例中,使用点符号来调用外部函数以表示完全合格的名称(例如,“select my_DB.my_schema.my_extFunction(col1)from table1;”),它是调用在数据库系统外部执行(例如,远程地执行,用于在第三方网络服务上处理)的代码的数据库函数。在一些示例实施例中,远程执行的代码可以通过代理服务(例如,被配置为与外部服务API对接的HTTP网关)来中继。外部服务的数据可能需要从数据库的数据格式转换成数据库与之通信的外部服务的数据格式。转换发生在两个方向上。例如,为了利用外部服务(例如,情感检测、语言翻译、数据分析服务),在数据库系统上接收查询,并且将查询的相应数据从数据库使用的第一专有格式转换成外部服务使用的第二专有格式,以及然后发送到网络服务进行处理。
一旦处理完成,外部服务可将结果数据传输回数据库,然后将结果数据从第二格式转换回第一格式,以完成查询。数据格式之间的转变可以由数据库系统外部的第三方外部服务和所请求的查询外部服务来完成;但是,为数据库与之通信的每个外部服务配置和维护第三方数据格式转变外部服务会产生大量的计算和网络开销。例如,每个外部服务可以使用其自己的格式,并且为每个外部服务配置转变服务,这从资源的角度(例如,计算和网络开销)来看是不切实际的,并且从用户体验的角度来看也是不切实际的。此外,随着由数据库系统管理的数据的增长,为不同的外部服务实现不同的第三方转变服务的用户还需要验证和保护每个服务的认证和安全性,并在转变服务中提供正确数量的计算设备以有效地转变数据并监视所有这些配置。
为解决上述问题,外部函数系统可实施用户定义的函数,以有效地与每个外部网络服务对接,从而根据外部函数查询处理数据库数据。在一些示例实施例中,外部用户定义的函数被生成并存储在分布式数据库中。此外,串行化器用户定义函数和去串行化器用户定义函数被生成并存储在分布式数据库上,并且当通过查询调用外部函数时与外部函数链接以供执行。串行化器用户定义函数可以将查询的数据库数据从数据库本地的格式转变为外部服务本地的不同格式,其中每个不同的外部服务可以使用不同的数据格式。外部服务可以接收数据并执行所请求的处理,并将结果数据返回给分布式数据库。去串行化器用户定义函数可以接收返回的数据,并将数据从外部服务的格式变换为分布式数据库的格式,且转变后的数据可以作为结果数据提供给查询用户。另外,在一些示例实施例中,串行化器用户定义函数和去串行化器用户定义函数被配置成改变或扩展外部函数的功能,而不必重新生成和重新认证外部用户函数。
通过这种方式,外部函数系统可管理不同网络服务的数据格式变化,并扩展外部函数的功能,而无需借助额外的第三方外部服务来执行处理。这使得分布式数据库系统能够自动处理计算实例的外部函数安全性、供应、认证、监视、和扩展,并且消除了用户在不同网络服务上设置这些特征中的每一个的需要。
此外,外部函数文件系统能够构建新的外部函数能力,且可使用串行化器和去串行化器直接在数据库上对调整进行测试和调试,且无需每次包括新的调整或特征时“重启外部系统”或中间转变服务。
图1示出了根据本公开的一些实施例的示例计算环境100,其包括基于网络的数据库系统102的示例形式的数据库系统。为了避免用不必要的细节模糊本发明主题,图1中省略了与传达对本发明主题的理解不密切相关的各种功能部件。然而,本领域技术人员将容易认识到,各种附加功能部件可以被包括作为计算环境100的一部分,以促进本文没有具体描述的附加功能。在其他实施例中,计算环境可以包括另一种类型的基于网络的数据库系统或云数据平台。
如图所示,计算环境100包括与云存储平台104(例如,Microsoft AzureBlob或谷歌云存储)通信的数据库系统102。数据库系统102是基于网络的系统,用于报告和分析来自包括云存储平台104内的一个或更多个存储位置的一个或更多个不同来源的集成数据。云存储平台104包括多个计算机器,并按需向数据库系统102提供计算机系统资源,例如数据存储和计算能力。
数据库系统102包括计算服务管理器108、执行平台110、和一个或更多个元数据数据库112。数据库系统102托管数据报告和分析服务并向多个客户账户提供数据报告和分析服务。
计算服务管理器108协调和管理数据库系统102的操作。计算服务管理器108还执行查询优化和编译,以及管理提供计算资源的计算服务的集群(也称为“虚拟仓库”)。计算服务管理器108可以支持任意数量的客户端账户,例如提供数据存储和检索请求的终端用户、管理本文描述的系统和方法的系统管理员、以及与计算服务管理器108交互的其他部件/设备。
计算服务管理器108还与客户端设备114通信。客户端设备114对应于数据库系统102支持的多个客户端账户之一的用户。用户可以利用客户端设备114向计算服务管理器108提交数据存储、检索、和分析请求。
计算服务管理器108还与一个或更多个元数据数据库112相耦合,元数据数据库112存储与数据库系统102及其用户相关的各种功能和方面相关的元数据。例如,元数据数据库112可以包括存储在远程数据存储系统中的数据以及可从本地高速缓存获得的数据的概要。另外,元数据数据库112可以包括关于如何在远程数据存储系统(例如,云存储平台104)和本地高速缓存中组织数据的信息。由元数据数据库112存储的信息允许系统和服务在不从存储设备加载或访问实际数据的情况下确定一条数据是否需要被访问。
计算服务管理器108还耦合到执行平台110,执行平台110提供执行各种数据存储和数据检索任务的多个计算资源。执行平台110耦合到云存储平台104。云存储平台104包括多个数据存储设备120-1至120-N。在一些实施例中,数据存储设备120-1至120-N是位于一个或更多个地理位置的基于云的存储设备。例如,数据存储设备120-1至120-N可以是公共云基础设施或私有云基础设施的一部分。数据存储设备120-1至120-N可以包括硬盘驱动(HDD)、固态驱动(SSD)、存储集群、亚马孙(Amazon)S3TM存储系统、或任何其它数据存储技术。另外,云存储平台104可以包括分布式文件系统(例如Hadoop分布式文件系统(HDFS))、对象存储系统等。
执行平台110包括多个计算节点。计算节点上的进程集合执行由计算服务管理器108编译的查询计划。该进程集合可以包括:执行查询计划的第一进程;第二进程,该第二进程使用最近最少使用(least recently used,LRU)策略来监视和删除高速缓存文件,并实现内存不足(OOM)错误缓解进程;从进程日志和状态提取健康信息以发送回计算服务管理器108的第三进程;在系统引导(boot)之后建立与计算服务管理器108的通信的第四进程;以及第五进程,该第五进程为计算服务管理器108提供的给定作业处理与计算集群的所有通信,并将信息传送回计算服务管理器108和执行平台110的其他计算节点。
在一些实施例中,计算环境100的元件之间的通信链路经由一个或更多个数据通信网络来实现。这些数据通信网络可以利用任何通信协议和任何类型的通信介质。在一些实施例中,数据通信网络是彼此耦合的两个或更多个数据通信网络(或子网络)的组合。在可替代实施例中,这些通信链路是使用任何类型的通信介质和任何通信协议来实现的。
计算服务管理器108、元数据库112、执行平台110、和云存储平台104在图1中示为单个的分立部件。然而,计算服务管理器108、元数据库112、执行平台110、和云存储平台104中的每一个都可以被实现为分布式系统(例如,分布在多个地理位置处的多个系统/平台上)。另外,计算服务管理器108、元数据库112、执行平台110、和云存储平台104中的每一个可以根据所接收请求的变化和数据库系统102的变化的需求而(彼此独立地)使其规模放大或缩小。因此,在所描述的实施例中,数据库系统102是动态的并且支持定期改变以满足当前数据处理需求。
在典型操作期间,数据库系统102处理由计算服务管理器108确定的多个作业。这些作业由计算服务管理器108调度和管理,以确定何时以及如何执行作业。例如,计算服务管理器108可以将作业划分为多个离散任务,并且可以确定需要什么数据来执行多个离散任务中的每个离散任务。计算服务管理器108可以将多个离散任务中的每个离散任务分配给执行平台110的一个或更多个节点以处理任务。计算服务管理器108可以确定需要什么数据来处理任务,并且进一步确定执行平台110内的哪些节点最适合于处理该任务。一些节点可能已经高速缓存了处理任务所需的数据,因此是处理该任务的不错的候选者。存储在元数据数据库112中的元数据帮助计算服务管理器108确定执行平台110中的哪些节点已经缓存了处理任务所需的数据的至少一部分。执行平台110中的一个或更多个节点使用由这些节点缓存的数据以及必要时使用从云存储平台104检索到的数据来处理任务。期望从执行平台110内的高速缓存中检索尽可能多的数据,因为检索速度通常比从云存储平台104中检索数据快得多。
如图1所示,计算环境100将执行平台110与云存储平台104分开。在这种布置中,执行平台110中的处理资源和高速缓存资源独立于云存储平台104中的数据存储设备120-1至120-N进行操作。因此,计算资源和高速缓存资源不限于具体的数据存储设备120-1至120-N。相反,所有计算资源和所有高速缓存资源可以从云存储平台104中的任何数据存储资源检索数据,以及将数据存储到其中。
图2是示出根据本公开的一些实施例的计算服务管理器108的部件的框图。如图2所示,计算服务管理器108包括耦合到访问元数据数据库206的访问管理器202和凭证管理系统204,访问元数据数据库206是元数据数据库112的示例。访问管理器202处理针对本文描述的系统的认证和授权任务。凭证管理系统204便于使用远程存储的凭证来访问外部资源,例如远程存储设备中的数据资源。如本文所用,远程存储设备也可以被称为“永久存储设备”或“共享存储设备”。例如,凭证管理系统204可以创建和维护远程凭证储存器定义和凭证对象(例如,在访问元数据数据库206中)。远程凭证储存器定义标识远程凭证储存器,并包括从远程凭证储存器访问安全凭证的访问信息。凭证对象使用非敏感信息(例如,文本串)来标识一个或更多个安全凭证,该非敏感信息将从远程凭证储存器中检索以用于访问外部资源。当在运行时接收到调用外部资源的请求时,凭证管理系统204和访问管理器202使用存储在访问元数据数据库206中的信息(例如,凭证对象和凭证存储定义)来从远程凭证储存器中检索用于访问外部资源的安全凭证。
请求处理服务208管理接收到的数据存储请求和数据检索请求(例如,将对数据库数据执行的作业)。例如,请求处理服务208可以确定处理接收到的查询(例如,数据存储请求或数据检索请求)的数据。数据可能被存储在执行平台110内的高速缓存中,或者被存储在云存储平台104中的数据存储设备中。
管理控制台服务210支持管理员和其他系统管理者对各种系统和进程的访问。另外,管理控制台服务210可以接收执行作业并监视系统上的工作负荷的请求。
计算服务管理器108还包括作业编译器212、作业优化器214、和作业执行器216。作业编译器212将作业解析为多个离散任务,并为多个离散任务中的每个离散任务生成执行代码。作业优化器214基于需要处理的数据来确定执行多个离散任务的最佳方法。作业优化器214还处理各种数据修剪操作和其他数据优化技术,以提高执行作业的速度和效率。作业执行器216执行从队列接收的或由计算服务管理器108确定的作业的执行代码。
作业调度程序和协调器(job scheduler and coordinator)218将接收到的作业发送到适当的服务或系统,以进行编译、优化、并分派到执行平台110。例如,可以将作业优先化并接着按该优先顺序对作业进行处理。在实施例中,作业调度程序和协调器218为由计算服务管理器108调度的内部作业和可以由数据库中的其他系统调度但可以利用执行平台110中的相同处理资源的其他“外部”作业(例如用户查询)确定优先级。在一些实施例中,作业调度程序和协调器218识别或分配执行平台110中的特定节点来处理特定任务。虚拟仓库管理器220管理在执行平台110中实现的多个虚拟仓库的操作。例如,虚拟仓库管理器220可以生成用于执行接收到的查询的查询计划。外部函数系统230被配置为使用基于网络的数据库系统102外部的外部网络服务来管理用于数据处理的外部函数,如下面进一步详细讨论的。尽管在图2中,外部函数系统230在计算服务管理器108中示出,但是在一些示例实施例中,外部函数系统230的实例在执行节点(XP节点)上实现,例如,用于使用外部网络服务对被串行化、去串行化、和处理的查询数据集的部分进行并发处理,如下面进一步详细讨论的。
另外,计算服务管理器108包括配置和元数据管理器222,配置和元数据管理器222管理与存储在远程数据存储设备和本地缓冲器(例如,执行平台110中的缓冲器)中的数据相关的信息。配置和元数据管理器222使用元数据来确定需要访问哪些数据文件来检索用于处理特定任务或作业的数据。监视器和工作负荷分析器224监督由计算服务管理器108执行的进程,并管理跨执行平台110中的虚拟仓库和执行节点的任务(例如,工作负荷)分配。监视器和工作负荷分析器224还根据需要,基于整个数据库系统102中不断变化的工作负荷来重新分配任务,并且还可以基于也可以由执行平台110处理的用户(例如,“外部”)查询工作负荷来重新分配任务。配置和元数据管理器222以及监视器和工作负荷分析器224耦合到数据存储设备226。图2中的数据存储设备226代表数据库系统102内的任何数据存储设备。例如,数据存储设备226可以表示执行平台110中的缓冲器、云存储平台104中的存储设备、或任何其他存储设备。
如本文实施例所述,计算服务管理器108验证来自执行平台(例如,执行平台110)的所有通信,以验证该通信的内容和上下文与已知分配给执行平台的任务一致。例如,不应该允许执行查询A的执行平台的实例请求访问与查询A不相关的数据源D(例如,数据存储设备226)。类似地,给定的执行节点(例如,执行节点302-1)可能需要与另一个执行节点(例如,执行节点302-2)通信,并且应该禁止与第三个执行节点(例如,执行节点312-1)通信,并且任何这样的非法通信可以被记录(例如,在日志或其它位置中)。此外,存储在给定执行节点上的信息限于与当前查询相关的数据,并且在密钥不可用的情况下,任何其他数据都是不可用的,通过销毁或加密来呈现。
图3是示出根据本公开的一些实施例的执行平台110的部件的框图。如图3中所示,执行平台110包括多个虚拟仓库,该多个虚拟仓库包括虚拟仓库1、虚拟仓库2、和虚拟仓库N。每个虚拟仓库包括多个执行节点,每个执行节点包括数据高速缓存和处理器。虚拟仓库可以通过使用多个执行节点来并行执行多个任务。如本文所讨论的,执行平台110可以基于系统和用户的当前处理需求实时添加新的虚拟仓库和删除现有的虚拟仓库。这种灵活性允许执行平台110在需要时快速部署大量计算资源,而不必在不再需要这些计算资源时被迫继续为它们付费。所有虚拟仓库都可以从任何数据存储设备(例如,云存储平台104中的任何存储设备)访问数据。
尽管图3中所示的每个虚拟仓库包括三个执行节点,但是特定的虚拟仓库可以包括任意数量的执行节点。此外,虚拟仓库中执行节点的数量是动态的,使得在存在额外需求时创建新的执行节点,并在现有执行节点不再有用时将其删除。
每个虚拟仓库能够访问图1中所示的数据存储设备120-1至120-N中的任何一个。因此,虚拟仓库没有必要被分配给特定的数据存储设备120-1至120-N,而是可以从云存储平台104内的数据存储设备120-1至120-N中的任何一个访问数据。类似地,图3中所示的每个执行节点可以从数据存储设备120-1至120-N中的任何一个访问数据。在一些实施例中,特定的虚拟仓库或特定的执行节点可以被临时分配给具体的数据存储设备,但是该虚拟仓库或执行节点稍后可以从任何其他数据存储设备访问数据。
在图3的示例中,虚拟仓库1包括三个执行节点302-1、302-2、和302-N。执行节点302-1包括高速缓存304-1和处理器306-1。执行节点302-2包括高速缓存304-2和处理器306-2。执行节点302-N包括高速缓存304-N和处理器306-N。每个执行节点302-1、302-2、和302-N与处理一个或更多个数据存储和/或数据检索任务相关联。例如,虚拟仓库可以处理与内部服务(例如,聚类(clustering)服务、物化视图刷新(materialized view refresh)服务、文件压缩服务、存储过程服务、或文件升级服务)相关联的数据存储和数据检索任务。在其他实施方式中,特定虚拟仓库可以处理与特定数据存储系统或特定类别的数据相关联的数据存储和数据检索任务。
类似于上面讨论的虚拟仓库1,虚拟仓库2包括三个执行节点312-1、312-2、和312-N。执行节点312-1包括高速缓存314-1和处理器316-1。执行节点312-2包括高速缓存314-2和处理器316-2。执行节点312-N包括高速缓存314-N和处理器316-N。另外,虚拟仓库3包括三个执行节点322-1、322-2、和322-N。执行节点322-1包括高速缓存324-1和处理器326-1。执行节点322-2包括高速缓存324-2和处理器326-2。执行节点322-N包括高速缓存324-N和处理器326-N。
在一些实施例中,图3所示的执行节点对于由执行节点缓存的数据是无状态的。例如,这些执行节点不存储或以其他方式维护关于执行节点的状态信息或由特定执行节点缓存的数据。因此,在执行节点发生故障的情况下,可以用另一个节点透明地替换发生故障的节点。由于没有与发生故障的执行节点相关联的状态信息,所以新的(替换)执行节点可以轻松替换发生故障的节点,而无需考虑重新创建特定状态。
尽管图3中所示的执行节点包括一个数据高速缓存和一个处理器,但是替代实施例可以包括包含任意数量的处理器和任意数量的高速缓存的执行节点。另外,高速缓存的大小在不同执行节点之间可以有所不同。图3中所示的高速缓存在本地执行节点中存储从云存储平台104中的一个或更多个数据存储设备检索到的数据。因此,高速缓存减小或消除了在从远程存储系统中不断检索数据的平台中出现的瓶颈问题。本文描述的系统和方法不是从远程存储设备重复访问数据,而是从执行节点中的高速缓存访问数据,这明显更快并且避免了上面讨论的瓶颈问题。在一些实施例中,使用提供对高速缓存的数据的快速访问的高速存储器设备来实现高速缓存。每个高速缓存可以存储来自云存储平台104中的任何存储设备的数据。
此外,高速缓存资源和计算资源可以在不同的执行节点之间变化。例如,一个执行节点可以包含大量的计算资源和最少的高速缓存资源,从而使该执行节点对于需要大量计算资源的任务很有用。另一个执行节点可以包含大量的高速缓存资源和最少的计算资源,从而使该执行节点对于需要缓存大量数据的任务很有用。又一个执行节点可以包含提供更快的输入-输出操作的高速缓存资源,这对于需要快速扫描大量数据的任务很有用。在一些实施例中,基于执行节点将要执行的预期任务,在创建执行节点时确定与特定执行节点相关联的高速缓存资源和计算资源。
另外,与特定执行节点相关联的高速缓存资源和计算资源可以基于由执行节点执行的改变的任务而随时间改变。例如,如果执行节点执行的任务变得更加的处理器密集,则可以为执行节点分配更多的处理资源。类似地,如果执行节点执行的任务需要更大的高速缓存容量,则可以为执行节点分配更多的高速缓存资源。
尽管虚拟仓库1、2、和N与同一执行平台110相关联,但是可以使用在多个地理位置处的多个计算系统来实现虚拟仓库。例如,虚拟仓库1可以由第一地理位置处的计算系统来实现,而虚拟仓库2和虚拟仓库N可以由第二地理位置处的另一计算系统来实现。在一些实施例中,这些不同的计算系统是由一个或更多个不同实体维护的基于云的计算系统。
另外,每个虚拟仓库在图3中被示为具有多个执行节点。可以使用在多个地理位置处的多个计算系统来实现与每个虚拟仓库相关联的多个执行节点。例如,虚拟仓库1的实例在一个地理位置处的一个计算平台上实现执行节点302-1和302-2,而在另一个地理位置处的不同计算平台上实现执行节点302-N。选择特定计算系统来实现执行节点可以取决于各种因素,例如特定的执行节点所需的资源水平(例如,处理资源要求和高速缓存要求)、特定计算系统处可用的资源、地理位置内或地理位置之间的网络的通信能力、以及哪些计算系统已经实现虚拟仓库中的其他执行节点。
执行平台110也是容错的。例如,如果一个虚拟仓库发生故障,那么该虚拟仓库将快速地被位于不同地理位置处的不同虚拟仓库替换。
特定执行平台110可以包括任意数量的虚拟仓库。另外,特定执行平台中虚拟仓库的数量是动态的,使得当需要附加的处理和/或高速缓存资源时创建新的虚拟仓库。类似地,当与虚拟仓库相关联的资源不再有用时,可以删除现有的虚拟仓库。
在一些实施例中,虚拟仓库可以在云存储平台104中的相同数据上操作,但是每个虚拟仓库具有其自己的执行节点,其自己的执行节点具有独立的处理和高速缓存资源。这种配置允许不同虚拟仓库上的请求被独立地处理,并且请求之间没有干扰。这种独立处理与动态添加和移除虚拟仓库的能力相结合,支持为新用户添加新的处理能力,而不会影响现有用户观察到的性能。
图4为计算环境400,其根据本公开的一些实施例从概念上示出了由运行在执行平台110的给定执行节点上的进程执行用户定义的函数(UDF)的示例软件架构。
如图所示,来自执行平台110的执行节点302-1包括执行节点进程410,在一个实施例中,执行节点进程410在处理器306-1上运行,且还可利用高速缓存304-1(或另一存储设备或存储装置)中的存储器。如本文所述,“进程”或“计算进程”可以指由执行节点或执行平台通过一个或更多个线程执行的计算机程序的实例。
如前所述,计算服务管理器108验证来自执行平台110的所有通信,以验证该通信的内容和上下文与已知分配给执行平台110的任务一致。例如,不允许执行查询A的执行平台110请求访问与查询A不相关的特定数据源(例如,数据存储设备226或云存储平台104中的任何一个存储设备)。在一个示例中,执行节点302-1可能需要与第二执行节点(例如,执行节点302-2)通信,但是本文描述的安全机制可以不允许与第三执行节点(例如,执行节点312-1)通信。此外,可以(例如,在日志444或其他位置)记录任何这样的非法通信。此外,存储在给定执行节点上的信息限于与当前查询相关的数据,并且在密钥不可用的情况下,任何其他数据通过破坏或加密而不可用。
在图4的示例中,执行节点进程410正在执行UDF客户端412。在一个实施例中,UDF客户端412被实现为支持以诸如JAVA等特定编程语言编写的UDF。在一个实施例中,UDF客户端412以与用户代码430不同的编程语言(例如,C或C++)来实现,这可以通过使用不同的代码库(例如,具有相同或更少潜在安全漏洞的代码库)来进一步提高计算环境400的安全性。
用户代码430可作为包被提供,例如,以JAR(JAVA档案)文件的形式,其包括一个或更多个UDF的代码。在一个实施例中,服务器实现代码432是启动服务器的JAR文件,该服务器负责接收来自执行节点进程410的请求,分配工作线程以执行用户代码,并返回结果,以及其他类型的服务器任务。
在实施中,来自UDF(例如,基于JAVA的UDF)的操作可通过在沙箱(sandbox)进程420(例如,图5所示的UDF服务器515)内执行的用户代码运行时424执行。在一个实施例中,用户代码运行时424被实现为虚拟机,诸如JAVA虚拟机(JVM)。由于用户代码运行时424在相对于执行节点进程410的独立进程中执行,因此操纵执行节点进程410的风险较低。除了其他类型的信息或消息之外,执行操作的结果可以存储在日志444中,用于查看和检索。在一个实施例中,日志444可以本地存储在执行节点302-1处的存储器中,或者存储在诸如云存储平台104的单独位置。此外,这样的结果可以利用高性能协议从用户代码运行时424返回到UDF客户端412(例如,没有数据的串行化或去串行化,没有存储器副本;对记录批次进行操作,而不必访问单独的列、记录或单元格;利用有效的远程过程调用技术和用于数据传输的网络协议)来进行数据传输(例如,分布式数据集),这进一步提供了数据传输的认证和加密。在一个实施例中,UDF客户端412使用支持用户代码运行时424之间的柱状数据的网络传输的数据传输机制(反之亦然)。
在一个示例中,安全管理器422可通过抛出异常(例如,如果操作不被允许)来防止给定UDF的操作完成,或如果操作被允许,则返回(例如,不做任何事情)。在一个实现中,安全管理器422被实现为JAVA安全管理器对象,其允许应用实现诸如安全管理器策略442之类的安全策略,并且使得应用能够在执行可能不安全或敏感的操作之前确定该操作是什么以及是否正在允许该操作被执行的安全上下文中尝试该操作。安全管理器策略442可以被实现为具有用户代码运行时424被授予的许可的文件。因此,应用(例如,由用户代码运行时424执行的UDF)可以至少部分地基于安全策略来允许或不允许操作。
在一个实施例中,沙箱进程420是执行节点进程410的子进程(或独立进程)。在一个实施例中,子进程指的是给定父进程(例如,在该示例中,执行节点进程410)的子进程。在一个示例中,沙箱进程420是通过使用诸如命名空间和安全计算模式的安全机制(例如,使用对执行进程及其所有后代的系统调用过滤器,从而减少给定操作系统的内核的攻击面)来限制不可信应用的运行环境,从而减少安全漏洞的风险的程序。此外,在一个示例中,与执行节点进程410相比,沙箱进程420是轻量级进程,并且被优化(例如,紧密耦合到给定操作系统内核的安全机制)以在沙箱环境中以安全的方式处理数据库查询。
在一个实施例中,沙箱进程420可利用虚拟网络连接,以便与主体系统内的其他部件进行通信。可以相对于主体系统的其他部件为虚拟网络连接配置一组特定的规则。例如,可以为特定的UDF配置虚拟网络连接的这种规则,以限制由UDF执行的操作可访问的位置(例如,互联网上的特定站点或UDF可以通信的部件)。因此,在这个例子中,UDF可以被拒绝访问互联网上的特定网络位置或站点。
沙箱进程420可理解成为沙箱内的一个(或多个)进程提供受限计算环境,其中可控制和限制这些受限进程,以限制对某些计算资源的访问。
安全机制的示例可包括:命名空间的实施,其中在沙箱环境中执行的每个相应的进程组可访问相应的计算资源(例如,进程ID、主机名、用户ID、文件名、与网络访问相关的名称、和进程间通信),该计算资源不可由另一进程组访问(可访问前一进程组不可访问的不同资源组);其他容器实施等。通过使沙箱进程420作为执行节点进程410的子进程来执行,在一些实施例中,与可以单独利用虚拟机解决方案的其他技术相比,处理给定数据库查询的等待时间可以大大减少(例如,在一些情况下等待时间减少10倍)。
如进一步所示,沙箱进程420可利用沙箱策略440实施给定的安全策略。沙箱策略440可以是具有与沙箱进程420的配置相关的信息以及关于访问和利用系统资源的限制(如果有的话)和许可的细节的文件。示例限制可包括对网络访问或文件系统访问的限制(例如,重新映射文件系统以将文件放置在可能不可访问的不同位置,其他文件可被安装在不同位置,等等)。沙箱进程420限制用户代码运行时424的存储器和处理器(例如,CPU)使用,确保同一执行节点上的其他操作可以执行而不会耗尽资源。
如上所述,沙箱进程420是执行节点进程410的子进程(或独立进程),这实际上意味着沙箱进程420驻留在独立于执行节点进程410的存储器空间中。在发生与沙箱进程420有关的安全漏洞时(例如,来自给定UDF的错误或恶意代码),如果恶意参与者访问任意存储器,则执行节点进程存储的数据或信息受到保护。
尽管图4的上述讨论描述了使用JAVA(例如,面向对象的编程语言)实施的部件,但应理解,计算环境400支持其他编程语言(例如,解释编程语言)。在一个实施例中,PYTHON被支持用于在计算环境400中实现和执行UDF。在该示例中,用户代码运行时424可以被替换为PYTHON解释器,用于在沙箱进程420内执行来自(例如,用PYTHON编写的)UDF的操作。
图5根据一些示例性实施例显示了用于在中转位置实现对UDF的文件访问的数据架构500。UDF服务器515(例如,运行给定执行节点的XP进程的子进程(沙箱进程420))可以管理多个UDF 520(例如,UDF1、UDF2、UDF 3),其中的每一个UDF都可以使用UDF签名(例如,定义)来定义,下面将进一步详细讨论。根据一些示例实施例,每个UDF 520管理一个或更多个UDF接口(例如,编程语言的基类)。例如,UDF1管理流525(例如,Java输入流),其中流的数量可以被指定为由定义UDF签名的终端用户指定的函数或应用的参数。例如,如果给定的UDF是比较两个不同文件(例如,文件2页面2;以及文件3页面4)的差异比较函数,则根据一些示例实施例,可以创建两个流(例如,流1和流2)来处理这两个文件(例如,通过线程)。
UDF服务器515可通过网络接口通道530,例如远程程序调用(例如,gRPC,Google远程程序调用),打开、读取、或关闭对执行节点510(例如,执行节点302-1)的请求,以读取中转文件,其中执行节点(XP节点)实际下载文件(例如,如果文件不在本地)。在执行节点510中,线程535服务于从网络接口通道530接收的请求,例如,执行所请求数据的并发处理。在一些示例实施例中,每个线程535访问中转位置和凭证存储537中的位置和授权。例如,每个线程标识传入的中转数据(例如,“@path/file_name”)并检查文件是否是本地的(例如,在磁盘545上),如果不是,则访问计算服务管理器505(例如,计算服务管理器108)以确定中转数据的文件的位置。在一些示例实施例中,计算服务管理器505还确定给定线程是否有权访问由该线程的中转数据所指示的文件,如果是,则返回中转的位置和用于访问数据的凭证数据(例如,外部中转位置的凭证)。
在一些示例实施例中,线程使用接收到的中转位置和凭证存储537的信息来访问存储设备536(例如,数据存储设备120-1、云存储平台104、对象存储、S3桶),然后逐件下载文件(例如,作为文件的页面),将其作为页面540存储在执行节点510的本地存储器(例如,磁盘545)上。在一些示例实施例中,一旦下载,线程就根据UDF执行文件的处理(例如,解析、元数据检索、字段提取)。下载的文件可以是任何结构,例如结构化数据、非结构化数据(例如图像),其中UDF被配置(例如由UDF开发者、Java开发者)来处理文件,使得结构化和非结构化数据都可以被提取并存储在数据库表中。例如,用户可以编写UDF来从图像文件和一个逗号分隔值(CSV)文件中提取元数据,并且使得当由外部函数系统230实现时,UDF从图像中提取元数据,从CSV中提取行和列,并且将数据存储在基于网络的数据库系统102的表中,而无需将数据发送到外部工具(例如Apache Spark)进行处理。以这种方式,UDF的作者(例如,生成Java UDF文件并指定UDF签名的用户)可以在基于网络的数据库系统102中以高效且可扩展的方式开发UDF。例如,Java UDF可以在任何Java环境中开发、编译、和调试(例如,在UDF开发者的计算机上的本地调试环境中),作为Java文件上传到UDF服务器,然后任何其他用户(例如,SQL调用者,调用UDF的消费者用户)可以运行Java UDF作为他们的常规数据库SQL执行的一部分。
此外,通过实施外部函数系统230,生成Java UDF的用户不需要设计它来缩放。例如,如果要处理的数据量是1,000,000,000个文件,则Java UDF不需要针对文件量进行构建来缩放;相反,可以实例化更大的虚拟仓库(图3),并且由基于网络的数据仓库系统的本地缩放(例如,UDF指定文件的加密、解密、压缩/解压缩、和计算实例分配)来处理缩放。
在一些示例实施例中,文件作为页面下载,其中页面为文件的N大小(例如,32MB)的块。例如,32MB页面大小可以被设置为基于大多数要处理的文件(例如,99%)仅具有一个或两个页面的参数。在一些示例实施例中,在执行节点下载文件期间,存在首先缓存下载数据的节点页面缓冲器538(例如,页面大小缓冲器、32MB存储器缓冲器)。当节点页面缓冲器538满时,它被写入磁盘545,并且节点页面缓冲器538将被后续数据填充,且对于后续文件和块也是如此。以这种方式,非常大的文件将在磁盘上产生一系列32MB文件,但是在超过99%的情况下,在存储器中将只有一页内容,该页内容然后被直接发送到通道530(例如,gRPC通道)以由UDF文件处理。在一些示例实施例中,即使只有一个页面,它仍被写入磁盘545,使得如果(节点中的其他线程的)其他请求想要读取该文件,则其他请求只是从磁盘545拉出该文件。
在一些示例实施例中,接下来的连续页面预缓存在节点的高速缓存中(例如,节点页面缓冲器538)。例如,根据一些示例实施例,UDF_1可以请求文件3的页面2,然后为了优化性能,在响应被发送回UDF_1之后,下载接下来的页面(3和4)(在访问检查计算机服务管理器505以确认对这些页面的访问之后,如对文件3的页面2所做的那样),从而当接收到来自UDF_1的请求这些页面的潜在下一个请求时,线程仅从本地高速缓存访问内容,而不去云。
图6根据一些示例实施例显示了外部函数访问系统架构600。在所示示例中,客户端设备605(例如,客户端设备114)发送包括对外部函数615(例如,外部用户定义的函数)的调用的数据库语句,以在外部服务645中实现对存储平台635中的数据的处理,外部服务645例如是人类语言翻译网络服务(例如,西班牙语翻译成英语,等等),一个情感分析网络服务。在一些示例实施例中,外部函数615是由基于网络的数据库系统610存储的UDF(例如,图5中的UDF 1),并且与串行化器用户定义函数625(例如,图5中的UDF 2)对接,该串行化器用户定义函数625将数据从基于网络的数据库系统610的数据格式(例如,数据库的专有JavaScript对象符号(JSON)数据格式)串行化为外部服务645的格式(例如,外部服务645专有的自定义JSON格式)。
使用去串行化器用户定义函数630(例如,入站UDF文件,图5中的UDF 3)将外部服务645返回的数据从外部服务645的数据格式转变为基于网络的数据库系统610的数据格式。在一些示例实施例中,要由UDF和外部服务645处理的数据被存储在存储平台(例如,图5的存储设备536)中,然后被检索并存储在执行节点中,以供串行化器用户定义函数625和去串行化器用户定义函数630处理。
在一些示例实施例中,基于网络的数据库系统610不直接调用外部服务645,而是调用代理服务640,代理服务640是直接从外部服务645发送和接收数据的API网关服务(例如,Amazon API网关、Microsoft Azure API管理服务)。此外,在一些示例实施例中,基于网络的数据库系统610利用API集成数据库对象,诸如存储用于与代理服务640和外部服务645一起工作的信息(例如,安全信息、凭证、地址)的API集成对象620。
在一些示例实施例中,出站串行化器和入站去串行化器UDF成对写入和存储,用于使用特定外部服务处理数据。例如,串行化器用户定义函数625和去串行化器用户定义函数630由UDF开发者编写,并存储在基于网络的数据库系统610上,用于转变往来于外部服务645的数据。在一些示例实施例中,在基于网络的数据库系统610上,在提供者用户(例如,UDF开发者)的提供者数据库账户上生成外部函数、串行化器、和去串行化器,并且与消费者用户共享UDF,以便使用消费者管理的执行节点(例如,执行外部函数UDF、串行化器UDF、和去串行化器UDF的消费者账户激活的XP节点)在消费者数据库数据上执行。虽然讨论了出站串行化器和入站去串行化器对,但是作为示例,在一些示例实施例中,数据库系统实现没有入站去串行化器的出站串行化器(例如,对于单向出站数据),并且进一步在一些示例实施例中,数据库系统实现没有出站串行化器的入站去串行化器(例如,对于单向入站数据)。
在一些示例实施例中,数据库系统610自动调用串行化器用户定义函数625和去串行化器用户定义函数630,以响应外部函数615被调用。例如,基于网络的数据库系统610(例如,在基于网络的数据库系统610中运行的系统230)调用串行化器用户定义函数625,并将数据库格式化数据从存储平台635传递到串行化器用户定义函数625中。由串行化器用户定义函数625输出的经转变的数据然后被传输到外部服务645。然后,外部服务645执行所请求的处理,并发回仍然是外部服务645的本地专有格式的返回数据。在接收到返回的数据后,基于网络的数据库系统610调用去串行化器用户定义函数630,以将数据变换回基于网络的数据库系统610本地的格式(例如,基于网络的数据库系统610的定制专有JSON格式,从逗号分隔值(CSV)格式转换成不同的CSV格式,从JSON格式转换成CSV格式,从文本(.txt)格式转换成不同的文本格式)。从操作客户端设备605的用户的角度来看,调用具有串行化器用户定义函数625或去串行化器用户定义函数630的外部函数与调用任何其他外部函数相同(例如,用户在查询“SELECT”中指定外部函数,并且基于网络的数据库系统610自动实现串行化器用户定义函数625和去串行化器用户定义函数630)。
尽管在图6中仅示出了单个外部服务、单个外部函数和单对串行化器和去串行化器UDF,但应理解,可由外部函数访问系统架构600生成和管理多个外部服务和多个外部函数以及相应的串行化器/去串行化器UDF对,以使数据库能够与许多不同的外部网络服务有效对接。
图7根据一些示例实施例显示了用于在数据库系统外部的外部服务上实施数据库系统的外部函数的方法700的流程图。在图7的示例中,外部服务是机器学习模型,其对输入单词串执行情感分析,以生成输入串的潜在情感的可能性(例如,正面的、负面的)。尽管作为示例讨论了情感分析网络服务,但是应当理解,可以以类似的方式实现多个不同的网络服务(例如,不同的HTTP服务)。根据一些示例实施例,可以实现的不同网络服务的几个示例包括:语言翻译网络服务,用于将数据库数据从一种语言翻译成另一种语言,反之亦然(例如,英语翻译成法语,西班牙语翻译成英语等);查询基于网络的数据库系统102外部的远程数据库;查找存储在私有受限数据库中的数据(例如,私有数据库中的HIPAA受限信息);用户或组织偏好保持在基于网络的数据库系统102外部的专有数据处理(例如,信用评分、欺诈检测);以及其他网络服务类型。
在操作705中,外部函数系统230生成出站串行化器UDF文件。例如,外部函数系统230使用从UDF开发者接收的代码生成串行化器用户定义函数625(例如,UDF文件),然后串行化器用户定义函数625被存储在基于网络的数据库系统610中。如所讨论的,串行化器用户定义函数625接收基于网络的数据库系统610的数据格式的输入,并将其变换成外部服务可以解析的格式(例如,外部服务645需要并使用的本地数据格式)。作为示例,如下所示生成串行化器用户定义函数625,并将其存储为UDF文件(例如,JavaScript文件、JAR文件):
∷∷∷代码∷∷∷
CREATE OR REPLACE FUNCTION comprehendserializer_udf(event OBJECT)
RETURNS OBJECT LANGUAGE JAVASCRIPT AS
'var textlist=[]
for(i=0;i<EVENT.body.data.length;i++){
let row=EVENT.body.data[i];
//row[0]is the row number and row[1]is the input text.
textlist.push(row[1]);//put text into the textlist
}
//create the request for the service.Also pass the input request aspart of the output.
return{"body":{"LanguageCode":"en","TextList":textlist},"serializerData":EVENT.body}
';
∷∷∷代码∷∷∷
在上述示例中,串行化器用户定义函数625循环通过查询指定的每个输入行。对于每一行,它将row[1]中的字符串添加到textlist数组中。row[0]的值是行号,且其可以被忽略。串行化器返回一个JSON主体,其中包含与外部服务的需求相匹配的语言代码和文本列表。串行化器还经由serializerData字段返回数据,该字段由去串行化器用户定义函数630使用。在上述示例中,根据一些示例实施例,原始输入数据被发送到外部服务645,并且输入数据的长度被用在去串行化器用户定义函数630中,使得去串行化器用户定义函数630知道创建了多少输入请求。
以下是输入串行化器用户定义函数625的数据库格式的数据的示例:
∷∷∷代码∷∷∷
{"body":{"data:"[[0,"I am so happy we got a sunny day for mybirthday."],[1,"$$$$$."],[2,"Today is my last day in the old house."]]}}
∷∷∷代码∷∷∷
将上述数据库格式化代码输入外部服务将产生错误和/或处理可能无法正常运行或根本无法运行。相比之下,下面的代码是串行化器UDF的输出(在调用外部函数时被调用),其格式为外部服务的本地格式:
∷∷∷代码∷∷∷
"TextList":[
"I am so happy we got a sunny day for my birthday.",
"$$$$$.",
"Today is my last day in the old house."]},
"serializerData":{"data":[[0,"I am so happy we got a sunny day for mybirthday."],[1,"$$$$$."],[2,"Today is my last day in the old house."]]}}
∷∷∷代码∷∷∷
继续,在操作710,外部函数系统230生成入站去串行化器UDF文件(例如,使用UDF开发者提供的代码)。例如,外部函数系统230从UDF开发者提供的代码中生成去串行化器用户定义函数630,然后将去串行化器用户定义函数630存储在基于网络的数据库系统610中。如所讨论的,去串行化器处理从外部服务645接收的结果。在一些示例实施例中,仍然生成错误,并且接收到的结果数据包括ErrorList中的错误组合(例如,对于没有成功完成处理的查询数据(例如,在这种情况下的$$$$没有被识别为可分析的句子))并导致ResultList(例如,对于成功完成处理的查询数据)。在一些示例实施例中,去串行化器用户定义函数630将这些结果组合在一起,以形成与传递给外部服务的行的顺序相匹配的完整集合,并以基于网络的数据库系统610的格式返回结果数据。作为示例,去串行化器用户定义函数630如下所示生成,并存储为UDF文件(例如,JavaScript文件、JAR文件)以在运行时环境(runtime environment)中执行:
∷∷∷代码∷∷∷
CREATE FUNCTION comprehenddeserializer_udf(event OBJECT)
RETURNS OBJECT LANGUAGE JAVASCRIPT AS
'//Combine the scored results and the errors into a single list.
var responses=new Array(EVENT.serializerData.data.length);
//output format:array of{
//"Sentiment":(POSITIVE,NEUTRAL,MIXED,NEGATIVE,or ERROR),
//"SentimentScore":<score>,"ErrorMessage":ErrorMessage}.
//If error,errorMessage is set,otherwise sentimentScore is set.
//Insert good results into proper position.
for(i=0;i<EVENT.body.ResultList.length;i++){let row=EVENT.body.ResultList[i];let result=[row.Index,{"Sentiment":row.Sentiment,"SentimentScore":row.SentimentScore}]responses[row.Index]=result}
//Insert errors.
for(i=0;i<EVENT.body.ErrorList.length;i++){let row=EVENT.body.ErrorList[i];let result=[row.Index,{"Sentiment":"Error","ErrorMessage":row.ErrorMessage}]responses[row.Index]=result}return{"body":{"data":responses}};';
∷∷∷代码∷∷∷
在上述示例中,去串行化器用户定义函数630使用来自serializerData数组长度的输入大小初始化名为“responses”的数组。去串行化器用户定义函数630将serializerData发送到去串行化器用户定义函数630,以传递测试串的原始列表。去串行化器用户定义函数630遍历每个无错误结果,并将它们放入结果列表中。接下来,去串行化器用户定义函数630遍历错误结果,并将它们放入结果列表中。结果列表有一个指示它是什么条目的索引位置。在一些示例实施例中,产生的结果的顺序必须匹配输入顺序。结果列表还包含情感信息。在收集了所有响应之后,去串行化器用户定义函数630以基于网络的数据库系统610的进程所使用的特定本地JSON格式返回数据。
在操作715中,外部函数系统230生成外部函数数据库对象。例如,去串行化器用户定义函数630将外部函数615存储在基于网络的数据库系统610中。在一些示例实施例中,外部函数615是使用数据库语句创建的,该数据库语句将调用外部函数时要激活的特定串行化器和去串行化器对相关联。例如,客户端设备605的用户在创建外部函数语句中包括串行化器和去串行化器子句:
∷∷∷代码∷∷∷
CREATE EXTERNAL FUNCTION comprehendsentiment//e.g.,creates externalfunction 615
RETURNS OBJECT...
serializer=comprehendserializer_udf//links serializer user-definedfunction 625 to external function 615
deserializer=comprehenddeserializer_udf//specifies deserializeruser-defined function 630 to external function 615
AS<url_of_proxy_and_resource>;
∷∷∷代码∷∷∷
继续,在操作720,外部函数系统230生成使用外部函数的查询。例如,外部函数系统230使用来自客户端设备605的用户输入的代码来生成使用外部函数的查询。操作720的示例查询包括:
∷∷∷代码∷∷∷
"SELECT comprehendsentiment('Today is a good day');.
∷∷∷代码∷∷∷
在操作725中,外部函数系统230处理查询。例如,调用外部函数,其进一步调用链接的串行化器用户定义函数625来将数据从数据库格式转变成外部服务格式。然后,经转变的出站数据经由网关(例如代理服务640)被传输到外部服务645。外部服务645然后执行所请求的处理,并经由代理服务640将结果数据返回给基于网络的数据库系统610,然后使用去串行化器用户定义的函数630将结果数据去串行化。在一些示例实施例中,除了转变出站和入站数据之外,串行化器用户定义函数625和635还可以扩展和/或改变外部函数的功能和特征,并且还改变哪些数据被发送到网关而不重新生成外部函数,如下面进一步详细讨论的。
在操作730中,外部函数系统230显示外部函数结果。例如,外部结果被显示在客户端设备605上:
∷∷∷代码∷∷∷
{"Sentiment":"POSITIVE",
"SentimentScore":{
"Mixed":0.0024,
"Negative":0.0014,
"Neutral":0.0159,
"Positive":0.9801}}
∷∷∷代码∷∷∷
在一些示例实施例中,串行化器用户定义函数625和去串行化器用户定义函数630可增加URL查询参数,以扩展外部函数的查询处理。外部函数615可以具有固定的URL,并且改变外部函数615将需要重新授权外部函数615,以及重新配置代理服务640和外部服务645,以利用动态查询参数与外部函数一起工作。在一些示例实施例中,串行化器用户定义函数625和去串行化器用户定义函数630还包括使用外部函数615的URL中的参数的函数(例如,URL后缀,在外部函数615的URL中的“?”之后的标签,以执行扩展的查询操作)。在一些示例实施例中,串行化器用户定义函数625的代码被配置成生成具有代理服务640可以与之对接的URL中的不同查询参数的特定URL,从而扩展由外部服务645完成的处理类型。例如,串行化器用户定义函数625可以扩展外部函数615的URL(例如,添加查询的不同方面,诸如控制它的标志,以及附加的查询参数)。
通过这种方式,外部函数系统230可实施串行化器用户定义函数625和去串行化器用户定义函数630,以改变外部函数的行为,而无需重新创建函数。作为附加示例,并且根据一些示例实施例,串行化器用户定义函数625和去串行化器用户定义函数630可以通过改变定制串行化器而不改变使用它们的外部函数(例如,外部函数615)来动态地改变对外部服务645的API请求。
在一些示例实施例中,系统230实施串行化器用户定义函数625和去串行化器用户定义函数630,以改变用于与不同网络服务对接的HTTP呼叫类型。例如,代替将所有POST呼叫类型用于代理服务640和外部服务645,系统230可以实现串行化器用户定义函数625和去串行化器用户定义函数630,以在基于网络的数据库系统610处改变呼叫类型(例如,从POST到GET),而不是在代理服务640或第三方外部服务(例如,中间计算层,诸如AWS Lambda或Azure函数)中转变呼叫类型。
在一些示例实施例中,系统230实施串行化器用户定义函数625和去串行化器用户定义函数630,以设置每个请求的报头。一些网络服务要求为每个请求设置报头(例如,基于与传递给外部服务的特定数据行相关的动态配置设置为每个请求设置报头)。为了以有效的方式设置报头,系统230实现串行化器用户定义函数625来设置报头。例如,串行化器用户定义函数625可以设置与某些优化相关的报头(例如,基于请求中是否有任何空值),或者设置报头以启用仅在特定时间实现的特征或查询方面。这样,不需要调整外部函数615的安全性,因为不需要重新生成外部函数615来设置或改变报头。例如,一些网络服务需要基于所创建的外部函数615的特定ID的安全配置。例如,在基于AWS IAM角色的安全性中,每次重新创建给定的外部函数时,基于IAM角色的安全性都需要手动更新IAM角色的“信任关系”,以允许新函数运行。
所述主题的实施可包括一个或更多个单独或组合的特征,如下文通过示例所示。
示例1.一种方法,包括:在分布式数据库上生成外部函数,以在分布式数据库外部的外部网络服务上处理分布式数据库的数据;在分布式数据库上生成串行化器函数,以将输入到外部函数中的数据从分布式数据库的数据格式串行化为外部网络服务的不同数据格式;在分布式数据库上生成去串行化器函数,以将来自外部网络服务的结果数据从外部网络服务的不同数据格式去串行化为分布式数据库的数据格式;处理调用外部函数来处理由外部网络服务上的分布式数据库管理的数据集的查询,查询的处理包括应用串行化器函数来生成外部网络服务的不同数据格式的出站数据集,查询的处理还包括将出站数据集传输到外部网络服务;以及响应于该查询向客户端设备提供结果数据集,该结果数据集是通过将去串行化器函数应用于由分布式数据库从外部网络服务接收的入站数据集而生成的,外部网络服务通过根据外部函数处理出站数据集来生成入站数据集。
示例2.根据示例1所述的方法,其中,数据集作为函数参数被传递到外部函数中。
示例3.根据示例1或2中任一项所述的方法,其中,生成外部函数包括:将串行化器函数和去串行化器函数与外部函数相关联。
示例4.根据示例1-3中任一项所述的方法,其中,使用查询调用外部函数自动地将串行化器函数应用于从分布式数据库出站到外部网络服务的出站查询数据。
示例5.根据示例1-4中任一项所述的方法,其中,使用查询调用外部函数自动地将去串行化器函数应用于由分布式数据库从外部网络服务接收的入站结果数据。
示例6.根据示例1-5中任一项所述的方法,其中,所述查询由消费者数据库生成。
示例7.根据示例1-6中任一项所述的方法,其中,外部函数、串行化器函数、和去串行化器函数对应于与消费者数据库共享的提供者数据库的共享函数。
示例8.根据示例1-7中任一项所述的方法,其中,在分布式数据库的多个执行节点中的一个或更多个上的运行时环境中激活串行化器函数和去串行化器函数。
示例9.根据示例1-8中任一项所述的方法,其中,所述多个执行节点由消费者数据库管理。
示例10.根据示例1-9中任一项所述的方法,其中:串行化器函数包括第一JavaScript文件;并且去串行化器函数包括第二JavaScript文件;并且运行时环境包括JavaScript执行环境。
示例11.根据示例1-10中任一项所述的方法,其中:串行化器函数包括第一Java应用编程(JAR)文件;并且去串行化器函数包括第二JAR文件;并且运行时环境包括Java虚拟机(JVM)。
示例12.一种系统,包括:机器的一个或更多个处理器;以及存储指令的至少一个存储器,当所述指令被一个或更多个处理器执行时,使得机器执行实现示例1-11中的任一项所述的方法的操作。
示例13.一种包含指令的机器存储介质,所述指令当由机器执行时,使得机器执行实现示例1-11中的任一项所述的方法的操作。
图8示出了根据示例实施例的计算机系统形式的机器800的图解表示,用于使机器800执行本文所讨论方法中的任何一种或更多种方法的指令集合可以在该计算机系统内执行。具体地,图8以计算机系统的示例形式示出了机器800的图解表示,用于使机器800执行本文所讨论方法中的任何一种或更多种方法的指令816(例如,软件、程序、应用、小程序、app、或其他可执行代码)可以在该计算机系统内执行。例如,指令816可以使机器800执行方法700中的任何一个或更多个操作。作为另一个例子,指令816可以使机器800实现图7的方法的一个或更多个部分。以这种方式,指令816将通用的、非编程的机器转换成特定的机器800(例如,计算服务管理器108或执行平台110中的节点),该特定的机器800被专门配置成以本文描述的方式执行所描述和示出的功能中的任何一个。
在替代实施例中,机器800作为独立的设备操作或者可以耦合(例如,联网)到其它机器。在联网部署中,机器800可以在服务器-客户端网络环境中以服务器机器或客户端机器的身份来操作,或者作为对等(或分布式)网络环境中的对等机器来操作。机器800可以包括但不限于服务器计算机、客户端计算机、个人计算机(PC)、平板计算机、膝上型计算机、上网本(netbook)、智能电话、移动设备、网络路由器、网络交换机、网络桥接器(networkbridge)或能够顺序地或以其它方式执行指令816的任何机器,指令916指定要由机器800采取的动作。此外,虽然仅示出了单个机器800,但术语“机器”还应被理解为包括单独或联合地执行指令816以执行本文所讨论方法中的任何一种或更多种方法的机器800的集合。
机器800包括多核处理器810、存储器830和输入/输出(I/O)部件850,它们被配置成例如经由总线802彼此通信。在示例实施例中,多核处理器810(例如,中央处理单元(CPU)、精简指令集计算(RISC)处理器、复杂指令集计算(CISC)处理器、图形处理单元(GPU)、数字信号处理器(DSP)、专用集成电路(ASIC)、射频集成电路(RFIC)、另一处理器或其任何合适的组合)可以包括例如可以执行指令816的处理器812和处理器814。术语“处理器”旨在包括多核处理器810,多核处理器910可以包括可以同时执行指令816的两个或更多个独立处理器(有时称为“核”)。尽管图8示出了多个多核处理器810,但是机器800可以包括具有单核的单个处理器、具有多核的单个处理器(例如,多核处理器)、具有单核的多个处理器、具有多核的多个处理器或者它们的任意组合。
存储器830可以包括主存储器832、静态存储器834和存储单元836,它们都可以由多核处理器810例如经由总线802访问。主存储器832、静态存储器834和存储单元836存储指令816,指令916体现本文描述的方法或功能中的任何一种或更多种。在由机器800执行期间,指令816也可以全部或部分地驻留在主存储器832内、静态存储器834内、在存储单元836的机器存储介质838内、至少一个多核处理器810内(例如,在处理器的高速缓存存储器内)或其任何合适的组合。
I/O部件850包括用于接收输入、提供输出、产生输出、传输信息、交换信息、捕获测量值等的部件。包括在特定机器800中的具体的I/O部件850将取决于机器的类型。例如,诸如移动电话的便携式机器将有可能包括触摸输入设备或其他这样的输入机构,而无头服务器机器将不太可能包括这样的触摸输入设备。将认识到的是,I/O部件850可以包括图8中未示出的许多其他部件。I/O部件850根据功能进行分组仅仅是为了简化下面的讨论,并且该分组决不是限制性的。在各种示例实施例中,I/O部件850可以包括输出部件852和输入部件854。输出部件852可以包括视觉部件(例如,诸如等离子体显示面板(PDP)、发光二极管(LED)显示器、液晶显示器(LCD)、投影仪或阴极射线管(CRT)的显示器)、声学部件(例如,扬声器)、其他信号发生器等。输入部件854可以包括字母数字输入部件(例如,键盘、被配置成接收字母数字输入的触摸屏、光电键盘或其他字母数字输入部件)、基于点的输入部件(例如,鼠标、触控板、轨迹球、操纵杆、运动传感器或另一指向仪器)、触觉输入部件(例如,物理按钮、提供触摸或触摸手势的定位和/或力的触摸屏或其他触觉输入部件)、音频输入部件(例如,麦克风)等。
通信可以使用多种技术来实现。I/O部件850可以包括通信部件864,通信部件964可操作来分别经由耦合882和耦合882将机器800耦合到网络881或设备880。例如,通信部件864可以包括网络接口部件或与网络881对接的另一合适的设备。在进一步的示例中,通信部件864可以包括有线通信部件、无线通信部件、蜂窝通信部件、和经由其他模态提供通信的其他通信部件。设备880可以是另一台机器或多种外围设备中的任一种(例如,经由通用串行总线(USB)耦合的外围设备)。例如,如上所述,机器800可以对应于计算服务管理器108或执行平台110中的任何一个,并且设备880可以包括客户端设备114或本文描述为与数据库系统102或云存储平台104通信的任何其他计算设备。
各种存储器(例如,830、832、834和/或处理器810和/或存储单元836的存储器)可以存储指令816和数据结构(例如,软件)的一个或更多个集合,这些指令916和数据结构体现本文所描述方法或功能中的任何一种或更多种或被本文所描述方法或功能中的任何一种或更多种所利用。当由处理器810执行时,这些指令816使各种操作实现所公开的实施例。
如本文所使用的,术语“机器存储介质”、“设备存储介质”和“计算机存储介质”意思相同,并且可以在本公开中互换使用。这些术语指的是存储可执行指令和/或数据的单个或多个存储设备和/或介质(例如,集中式或分布式数据库和/或相关联的高速缓存和服务器)。相应地,这些术语应当被认为包括但不限于固态存储器以及光和磁介质,包括在处理器内部或外部的存储器。机器存储介质、计算机存储介质和/或设备存储介质的具体示例包括非易失性存储器,非易失性存储器包括例如:半导体存储器设备,诸如可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、现场可编程门阵列(FPGA)和闪存设备;磁盘,例如内部硬盘和可移除磁盘;磁光盘;以及CD-ROM和DVD-ROM光盘。术语“机器存储介质”、“计算机存储介质”和“设备存储介质”具体排除了载波、经调制的数据信号和其他这样的介质(其中的至少一些包含在下面讨论的术语“信号介质”中)。
在各种示例实施例中,网络881的一个或更多个部分可以是自组织网络(ad hocnetwork)、内联网、外联网、虚拟专用网络(VPN)、局域网(LAN)、无线LAN(WLAN)、广域网(WAN)、无线WAN(WWAN)、城域网(MAN)、互联网、互联网的一部分、公共交换电话网络(PSTN)的一部分、普通老式电话服务(POTS)网络、蜂窝电话网络、无线网络、网络、另一种类型的网络、或两种或更多种这样的网络的组合。例如,网络881或网络881的一部分可以包括无线或蜂窝网络,并且耦合882可以是码分多址(CDMA)连接、全球移动通信系统(GSM)连接或另一种类型的蜂窝或无线耦合。在该示例中,耦合882可以实现多种类型的数据传输技术中的任何一种,例如单载波无线电传输技术(1xRTT)、演进数据优化(EVDO)技术、通用分组无线电服务(GPRS)技术、增强型数据速率GSM演进(EDGE)技术、包括3G、第四代无线(4G)网络、通用移动电信系统(UMTS)、高速分组接入(HSPA)、全球微波接入互操作性(WiMAX)、长期演进(LTE)标准的第三代合作伙伴计划(3GPP)、由各种标准设置组织定义的其他技术、其他长程协议、或其他数据传输技术。
指令816可以使用传输介质经由网络接口设备(例如,包括在通信部件864中的网络接口部件)并利用多种众所周知的传输协议(例如,超文本传输协议(HTTP))中的任何一种在网络881上传输或接收。类似地,指令816可以使用传输介质经由耦合882(例如,对等耦合)被传输或接收到设备880。术语“传输介质”和“信号介质”意思相同,并且在本公开中可以互换使用。术语“传输介质”和“信号介质”应被理解为包括能够存储、编码或携带用于由机器800执行的指令816的任何无形介质,并且包括数字或模拟通信信号或便于这样的软件的通信的其他无形介质。因此,术语“传输介质”和“信号介质”应被理解为包括任何形式的经调制的数据信号、载波等。术语“经调制的数据信号”意指这样的信号:其具有以对信号中的信息进行编码的这样的方式设置或更改的其特性中的一个或更多个特性。
术语“机器可读介质”、“计算机可读介质”和“设备可读介质”意思相同,并且在本公开中可以互换使用。这些术语被定义为包括机器存储介质和传输介质。因此,这些术语包括存储设备/介质和载波/经调制的数据信号。
本文描述的示例方法的各种操作可以至少部分地由被临时配置(例如,通过软件)或永久配置为执行相关操作的一个或更多个处理器来执行。类似地,本文描述的方法可以至少部分是处理器实现的。例如,方法700的至少一些操作可以由一个或更多个处理器执行。某些操作的执行可以在一个或更多个处理器之间分配,该一个或更多个处理器不仅驻留在单个机器内,而且跨多个机器部署。在一些示例实施例中,一个或更多个处理器可以位于单个位置中(例如,在家庭环境、办公室环境或服务器场内),而在其他实施例中,处理器可以跨多个位置分布。鉴于上面的公开内容,下面阐述了各种示例。应当注意,一个示例的一个或更多个特征,无论是孤立地还是组合地,都应当被认为是在本申请的公开内容之内。
尽管参考具体的示例实施例描述了本公开的实施例,但显然地,在不偏离本发明主题的更广泛范围的情况下,可以对这些实施例做出各种修改和改变。因此,说明书和附图被认为是说明性的而不是限制性的。形成本申请的一部分的附图通过说明而非限制的方式显示了其中可以实施主题的具体实施例。所示出的实施例以充分的细节被描述,以使本领域的技术人员能够实施本文公开的教导。可以使用其他实施例和从其中衍生的实施例,使得可以做出结构或逻辑的替换和改变而不偏离本公开的范围。因此,此详细描述不应被理解为限制性意义,并且各种实施例的范围仅由所附权利要求连同这些权利要求所享有的完整范围的等同物一起限定。
本发明主题的这样的实施例可以在本文中单独地和/或共同地由术语“发明”提到,这仅仅是为了便利,并不意图自愿将本申请的范围局限于任何单一发明或发明构思(如果实际上公开了多于一种发明或发明构思的话)。因此,虽然本文中已经说明和描述了特定实施例,但是应当理解,可以用经计算以实现相同目的的任何布置来替换所示出的特定实施例。本公开意图涵盖各种实施例的任何和所有改编或变型。在阅读以上描述后,以上实施例的组合以及本文未具体描述的其他实施例对于本领域的技术人员来说将是明显的。
在本文档中,术语“一个(a)”或“一个(an)”,如专利文档中常见的那样,用于包括一个或多于一个,与“至少一个”或“一个或更多个”的任何其他实例或用法无关。在本文档中,术语“或”用于指非排他性的或,因此除非另有说明,否则“A或B”包括“A但不包括B”、“B但不包括A”和“A和B”。在所附权利要求中,术语“包括(including)”和“其中(in which)”被用作相应术语“包括(comprising)”和“其中(wherein)”的纯英语等效词。此外,在所附权利要求中,术语“包括(including)”和“包括(comprising)”是开放式的;也就是说,包括除了权利要求中在这样的术语之后列出的那些元素之外的元素的系统、设备、物品或过程仍然被认为落入该权利要求的范围内。
Claims (30)
1.一种方法,包括:
在分布式数据库上识别处理网络服务上的数据的函数;
存储串行化器函数,以将输入到所述函数中的数据从所述分布式数据库的数据格式串行化为所述网络服务的不同数据格式;
存储去串行化器函数以将来自所述网络服务的结果数据从所述网络服务的不同数据格式去串行化为所述分布式数据库的数据格式;
识别调用所述函数以处理所述网络服务上的数据集的查询;
应用所述串行化器函数来生成所述网络服务的不同数据格式的出站数据集;
从所述网络服务接收入站数据集,所述网络服务通过根据所述函数处理所述出站数据集来生成所述入站数据集;和
将所述去串行化器函数应用于所述入站数据集以生成结果数据集。
2.根据权利要求1所述的方法,其中,所述数据集作为函数参数被传递到所述函数中。
3.根据权利要求1所述的方法,其中,生成所述函数包括:将所述串行化器函数和所述去串行化器函数与所述函数相关联。
4.根据权利要求3所述的方法,其中,使用所述查询调用所述函数自动地将所述串行化器函数应用于从所述分布式数据库出站到所述网络服务的出站查询数据。
5.根据权利要求4所述的方法,其中,使用所述查询调用所述函数自动地将所述去串行化器函数应用于由所述分布式数据库从所述网络服务接收的入站结果数据。
6.根据权利要求1所述的方法,其中,所述查询由客户端设备生成。
7.根据权利要求6所述的方法,还包括:向所述客户端设备提供所述结果数据集。
8.根据权利要求1所述的方法,其中,所述串行化器函数和所述去串行化器函数在所述分布式数据库的多个执行节点中的一个或更多个上的运行时环境中被激活。
9.根据权利要求8所述的方法,其中,所述多个执行节点是被配置成处理所述分布式数据库的数据库数据的计算实例。
10.根据权利要求8所述的方法,其中:
所述串行化器函数包括第一JavaScript文件;以及所述去串行化器函数包括第二JavaScript文件;以及
所述运行时环境包括JavaScript执行环境。
11.根据权利要求8所述的方法,其中:所述串行化器函数包括第一Java应用编程(JAR)文件;和
所述去串行化器函数包括第二JAR文件;和
所述运行时环境包括Java虚拟机(JVM)。
12.一种系统,包括:
机器的一个或更多个处理器;以及
存储指令的至少一个存储器,所述指令当由所述一个或更多个处理器执行时使得所述机器执行操作,所述操作包括:
在分布式数据库上识别处理网络服务上的数据的函数;
存储串行化器函数,以将输入到所述函数中的数据从所述分布式数据库的数据格式串行化为所述网络服务的不同数据格式;
存储去串行化器函数以将来自所述网络服务的结果数据从所述网络服务的不同数据格式去串行化为所述分布式数据库的数据格式;
识别调用所述函数以处理所述网络服务上的数据集的查询;
应用所述串行化器函数来生成所述网络服务的不同数据格式的出站数据集;
从所述网络服务接收入站数据集,所述网络服务通过根据所述函数处理所述出站数据集来生成所述入站数据集;和
将所述去串行化器函数应用于所述入站数据集以生成结果数据集。
13.根据权利要求12所述的系统,其中,所述数据集作为函数参数被传递到所述函数中。
14.根据权利要求12所述的系统,其中,生成所述函数包括:将所述串行化器函数和所述去串行化器函数与所述函数相关联。
15.根据权利要求14所述的系统,其中,使用所述查询调用所述函数自动地将所述串行化器函数应用于从所述分布式数据库出站到所述网络服务的出站查询数据。
16.根据权利要求15所述的系统,其中,使用所述查询调用所述函数自动地将所述去串行化器函数应用于由所述分布式数据库从所述网络服务接收的入站结果数据。
17.根据权利要求12所述的系统,其中,所述查询由客户端设备生成。
18.根据权利要求17所述的系统,所述操作还包括:向所述客户端设备提供所述结果数据集。
19.根据权利要求12所述的系统,其中,所述串行化器函数和所述去串行化器函数在所述分布式数据库的多个执行节点中的一个或更多个上的运行时环境中被激活。
20.根据权利要求19所述的系统,其中,所述多个执行节点是被配置成处理所述分布式数据库的数据库数据的计算实例。
21.根据权利要求19所述的系统,其中:
所述串行化器函数包括第一JavaScript文件;以及所述去串行化器函数包括第二JavaScript文件;以及
所述运行时环境包括JavaScript执行环境。
22.根据权利要求19所述的系统,其中:所述串行化器函数包括第一Java应用编程(JAR)文件;和
所述去串行化器函数包括第二JAR文件;和
所述运行时环境包括Java虚拟机(JVM)。
23.一种包含指令的机器存储介质,所述指令在被机器执行时使所述机器执行操作,所述操作包括:
在分布式数据库上识别处理网络服务上的数据的函数;
存储串行化器函数,以将输入到所述函数中的数据从所述分布式数据库的数据格式串行化为所述网络服务的不同数据格式;
存储去串行化器函数以将来自所述网络服务的结果数据从所述网络服务的不同数据格式去串行化为所述分布式数据库的数据格式;
识别调用所述函数以处理所述网络服务上的数据集的查询;
应用所述串行化器函数来生成所述网络服务的不同数据格式的出站数据集;
从所述网络服务接收入站数据集,所述网络服务通过根据所述函数处理所述出站数据集来生成所述入站数据集;和
将所述去串行化器函数应用于所述入站数据集以生成结果数据集。
24.根据权利要求23所述的机器存储介质,其中,所述数据集作为函数参数被传递到所述函数中。
25.根据权利要求23所述的机器存储介质,其中,生成所述函数包括:
将所述串行化器函数和所述去串行化器函数与所述函数相关联。
26.根据权利要求25所述的机器存储介质,其中,使用所述查询调用所述函数自动地将所述串行化器函数应用于从所述分布式数据库出站到所述网络服务的出站查询数据。
27.根据权利要求26所述的机器存储介质,其中,使用所述查询调用所述函数自动地将所述去串行化器函数应用于由所述分布式数据库从所述网络服务接收的入站结果数据。
28.根据权利要求23所述的机器存储介质,其中,所述查询由客户端设备生成。
29.根据权利要求28所述的机器存储介质,所述操作还包括:向所述客户端设备提供所述结果数据集。
30.根据权利要求23所述的机器存储介质,其中,所述串行化器函数和所述去串行化器函数在所述分布式数据库的多个执行节点中的一个或更多个上的运行时环境中被激活。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17/514,095 | 2021-10-29 | ||
US17/514,095 US11403298B1 (en) | 2021-10-29 | 2021-10-29 | Extending database external functions with user-defined functions |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116069811A true CN116069811A (zh) | 2023-05-05 |
CN116069811B CN116069811B (zh) | 2024-03-12 |
Family
ID=82652569
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211349444.7A Active CN116069811B (zh) | 2021-10-29 | 2022-10-31 | 使用用户定义的函数扩展数据库外部函数 |
Country Status (3)
Country | Link |
---|---|
US (3) | US11403298B1 (zh) |
EP (1) | EP4174679A1 (zh) |
CN (1) | CN116069811B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11403298B1 (en) | 2021-10-29 | 2022-08-02 | Snowflake Inc. | Extending database external functions with user-defined functions |
US20240037114A1 (en) * | 2022-07-27 | 2024-02-01 | Treasure Data, Inc. | Distributed data processing using embedded hermetic and deterministic language |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030093436A1 (en) * | 2001-09-28 | 2003-05-15 | International Business Machines Corporation | Invocation of web services from a database |
US20040045005A1 (en) * | 2002-02-22 | 2004-03-04 | Todd Karakashian | Web services programming and deployment |
US20040199636A1 (en) * | 2001-09-28 | 2004-10-07 | International Business Machines Corporation | Automatic generation of database invocation mechanism for external web services |
CN110688122A (zh) * | 2019-09-30 | 2020-01-14 | 支付宝(杭州)信息技术有限公司 | 编译和执行智能合约的方法及装置 |
US10997286B1 (en) * | 2020-06-02 | 2021-05-04 | Snowflake Inc. | Secure code execution in a database system |
US20210216385A1 (en) * | 2019-10-29 | 2021-07-15 | Snowflake Inc. | Invoking external functions from a data system |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7010612B1 (en) * | 2000-06-22 | 2006-03-07 | Ubicom, Inc. | Universal serializer/deserializer |
US20020016814A1 (en) * | 2000-08-07 | 2002-02-07 | International Business Machines Corporation | Method, system, and program for invoking stored procedures and accessing stored procedure data |
US20030217044A1 (en) * | 2002-05-15 | 2003-11-20 | International Business Machines Corporation | Method and apparatus of automatic method signature adaptation for dynamic web service invocation |
US8108466B2 (en) * | 2008-05-01 | 2012-01-31 | Microsoft Corporation | Automated offloading of user-defined functions to a high performance computing system |
US9946581B2 (en) * | 2010-12-17 | 2018-04-17 | Microsoft Technology Licensing, Llc | Exposing server functions to browser code |
US20130117326A1 (en) * | 2011-11-08 | 2013-05-09 | Microsoft Corporation | External serialization and deserialization |
US10360204B2 (en) | 2014-05-22 | 2019-07-23 | Entit Software Llc | User defined function, class creation for external data source access |
US11403298B1 (en) | 2021-10-29 | 2022-08-02 | Snowflake Inc. | Extending database external functions with user-defined functions |
-
2021
- 2021-10-29 US US17/514,095 patent/US11403298B1/en active Active
-
2022
- 2022-07-19 US US17/813,548 patent/US11803552B2/en active Active
- 2022-10-28 EP EP22204591.6A patent/EP4174679A1/en active Pending
- 2022-10-31 CN CN202211349444.7A patent/CN116069811B/zh active Active
-
2023
- 2023-09-20 US US18/471,001 patent/US20240012819A1/en active Pending
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030093436A1 (en) * | 2001-09-28 | 2003-05-15 | International Business Machines Corporation | Invocation of web services from a database |
US20040199636A1 (en) * | 2001-09-28 | 2004-10-07 | International Business Machines Corporation | Automatic generation of database invocation mechanism for external web services |
US20040045005A1 (en) * | 2002-02-22 | 2004-03-04 | Todd Karakashian | Web services programming and deployment |
CN110688122A (zh) * | 2019-09-30 | 2020-01-14 | 支付宝(杭州)信息技术有限公司 | 编译和执行智能合约的方法及装置 |
US20210216385A1 (en) * | 2019-10-29 | 2021-07-15 | Snowflake Inc. | Invoking external functions from a data system |
CN113490918A (zh) * | 2019-10-29 | 2021-10-08 | 斯诺弗雷克公司 | 从数据仓库调用外部函数 |
US10997286B1 (en) * | 2020-06-02 | 2021-05-04 | Snowflake Inc. | Secure code execution in a database system |
Non-Patent Citations (1)
Title |
---|
ANONYMOUS: "introduction to external functions snowflake ducumentation", 《HTTPS://DOCS.SNOWFLAKE.COM/EN/SQL-REFERENC/EXTERNAL-FUNCTIONS-INTRUDUCTION》, 18 October 2021 (2021-10-18) * |
Also Published As
Publication number | Publication date |
---|---|
US20230139362A1 (en) | 2023-05-04 |
US20240012819A1 (en) | 2024-01-11 |
CN116069811B (zh) | 2024-03-12 |
US11803552B2 (en) | 2023-10-31 |
EP4174679A1 (en) | 2023-05-03 |
US11403298B1 (en) | 2022-08-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102457707B1 (ko) | 동적 공유 데이터 객체 마스킹 | |
US11550845B2 (en) | Accessing files in a database stage using a user defined function | |
CN116069811B (zh) | 使用用户定义的函数扩展数据库外部函数 | |
KR102377084B1 (ko) | 분산 메타 데이터 기반 클러스터 컴퓨팅 | |
CN114096964A (zh) | 安全代码执行 | |
US11966416B2 (en) | Cross-organization and cross-cloud automated data pipelines | |
US11249850B1 (en) | Cluster diagnostics data for distributed job execution | |
US11704100B2 (en) | Inline compilation of user defined functions | |
US11645298B1 (en) | Configuring managed event tables using execution node processes | |
CN113632073B (zh) | 数据源上的可扩展流 | |
US20230084682A1 (en) | Logging from user-defined functions | |
US11487597B1 (en) | Stored procedures in a network based database system | |
US11347527B1 (en) | Secure table-valued functions in a cloud database | |
CN117461031A (zh) | 使用用户自定义函数访问文件 | |
US11726976B1 (en) | Database encoding and decoding for database functions | |
US11928110B2 (en) | Multiple environments and functions in a distributed database |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP03 | Change of name, title or address | ||
CP03 | Change of name, title or address |
Address after: Montana Patentee after: Snowflake Co. Country or region after: U.S.A. Address before: Montana Patentee before: SNOWFLAKE COMPUTING Inc. Country or region before: U.S.A. |