掌桥专利:专业的专利平台
掌桥专利
首页

技术领域

本公开涉及数据转换技术领域,尤其涉及一种ETL算子解析转换算法及其应用系统和电子设备。

背景技术

ETL,是英文Extract-Transform-Load的缩写,用来描述将数据从来源端经过抽取(extract)、转换(transform)、加载(load)至目的端的过程。ETL一词较常用在数据仓库,但其对象并不限于数据仓库。

数据转换过程,需要依据用户构建的算子图进行数据逻辑执行,以此来完成数据转换处理,让数据按照一定的算子逻辑程序实现输入数据集到目标输出数据集的数据转换。

而现有技术对算子图的执行,比如通过Spark-SQL的执行逻辑,对不同格式的数据执行ETL操作。虽然也支持几种数据源,但是Spark-SQL在每次执行ETL操作之时,都会引入Context及相应的RDD,会增加操作难度,使用不灵活。况且随着业务的发展,ETL的算子越来越复杂、ETL的各种次要逻辑和主体逻辑混杂、ETL的几种执行模式区分不明显、缺少业务上的梳理(这可能导致测试不充分)等等问题,这些问题的存在也导致算子的扩展修改存在困难,数据集的功能渗透导致ETL的核心逻辑经常改动,Spark-SQL的逻辑程序也意味着其对算子图的处理方式有限,只能按照固定逻辑模型(只读联机分析处理)对数据的算子图进行分析处理,自由度不高。因此Spark-SQL在执行ETL上,对于数据转换的算子构建执行还显得不够灵活,无法让用户自由地对数据转换进行算子灵活构建和计算时机管理。

发明内容

为了解决上述问题,本申请提出一种ETL算子解析转换算法及其应用系统和电子设备。

本申请一方面,提出一种ETL算子解析转换算法,包括如下步骤:

获取算子图,并根据所述算子图生成所需要的翻译器参数;

根据所述算子图生成对应的ETL上下文,并输入至翻译器;

翻译器利用所述翻译器参数,对所述算子图进行翻译,生成对应的算子中间表示;

将所述算子中间表示转换为任务引擎通用脚本,并发送至任务引擎工厂进行执行。

作为本申请的一可选实施方案,可选地,获取算子图,并根据所述算子图生成所需要的翻译器参数,包括:

判断DB数据库中是否已经存在待处理的所述算子图:

若存在,则从所述DB数据库中调取得到出对应的所述算子图;

若不存在,则通过ETL模块提供的界面,选择需要转换的数据集,并通过拖拽算子的方式构建得到所述算子图;

根据所述算子图的内容,生成所需要的翻译器参数。

作为本申请的一可选实施方案,可选地,根据所述算子图生成对应的ETL上下文,并输入至翻译器,包括:

将所述算子图输入ETL上下文工厂;

ETL上下文工厂根据所述算子图的内容,生成对应的ETL上下文,所述ETL上下文包括数据源、数据目标和数据转换信息;

利用所述ETL上下文支持所述翻译器。

作为本申请的一可选实施方案,可选地,根据所述算子图生成对应的ETL上下文,并输入至翻译器,还包括:

利用所述ETL上下文产生数据流网,并对所述数据流网进行拓扑排序,确定所述算子图中每个算子的执行顺序;

根据拓扑排序的结果,生成有序的算子序列,得到所述算子图的有序序列;

根据将所述有序序列输入至翻译器,并根据所述有序序列和所述ETL上下文,准备所述ETL上下文的执行环境。

作为本申请的一可选实施方案,可选地,翻译器利用所述翻译器参数,对所述算子图进行翻译,生成对应的算子中间表示,包括:

对所述算子图中的每个算子进行翻译:

翻译器使用前期生成的所述翻译器参数,并按照所述算子图的有序序列,对所述算子图中的每个算子进行翻译,将每个算子转换为中间表示;

将每个算子的中间表示进行组合,得到所述算子图的算子中间表示。

作为本申请的一可选实施方案,可选地,将所述算子中间表示转换为任务引擎通用脚本,并发送至任务引擎工厂进行执行,包括:

根据所述算子图的算子中间表示,生成对应的任务引擎通用脚本,并将所述任务引擎通用脚本输入至任务引擎工厂,准备执行对应的任务;

在所述任务引擎工厂中,对所述任务进行排队、调度和执行,生成对应的任务执行结果;

通过任务管理系统获取所述任务执行结果,并将所述任务执行结果返回至用户;

流程执行结束。

本申请另一方面,提出一种实现所述ETL算子解析转换算法的应用系统,包括:

算子图获取模块,用于获取算子图,并根据所述算子图生成所需要的翻译器参数;

ETL上下文生成模块,用于根据所述算子图生成对应的ETL上下文,并输入至翻译器;

翻译模块,用于利用所述翻译器参数,对所述算子图进行翻译,生成对应的算子中间表示;

任务执行模块,用于将所述算子中间表示转换为任务引擎通用脚本,并发送至任务引擎工厂进行执行。

本申请另一方面,还提出一种电子设备,包括:

处理器;

用于存储处理器可执行指令的存储器;

其中,所述处理器被配置为执行所述可执行指令时实现所述的ETL算子解析转换算法。

本发明的技术效果:

本申请通过获取算子图,并根据所述算子图生成所需要的翻译器参数;根据所述算子图生成对应的ETL上下文,并输入至翻译器;翻译器利用所述翻译器参数,对所述算子图进行翻译,生成对应的算子中间表示;将所述算子中间表示转换为任务引擎通用脚本,并发送至任务引擎工厂进行执行。能够利用翻译器对算子图进拓扑排序并进行翻译,经过算子图翻译后,利用拓扑构建的得到对应的算子中间表示转换生成对应的任务引擎通用脚本,使得任务引擎工厂能够对算子图生成的任务引擎通用脚本进行灵活执行,进行灵活调度、排队执行,提高对算子图的执行灵活度。本申请采用任务引擎通用脚本作为算子执行的中间代码,相对于固定逻辑模型,其任务执行逻辑更加灵活,用户也可以自由地对数据转换进行算子灵活构建和计算时机管理。

根据下面参考附图对示例性实施例的详细说明,本公开的其它特征及方面将变得清楚。

附图说明

包含在说明书中并且构成说明书的一部分的附图与说明书一起示出了本公开的示例性实施例、特征和方面,并且用于解释本公开的原理。

图1示出为本发明ETL算子解析转换算法的实施流程示意图;

图2示出为本发明的应用系统示意图;

图3示出为本发明的组成结构示意图;

图4示出为本发明电子设备的应用示意图

具体实施方式

以下将参考附图详细说明本公开的各种示例性实施例、特征和方面。附图中相同的附图标记表示功能相同或相似的元件。尽管在附图中示出了实施例的各种方面,但是除非特别指出,不必按比例绘制附图。

在这里专用的词“示例性”意为“用作例子、实施例或说明性”。这里作为“示例性”所说明的任何实施例不必解释为优于或好于其它实施例。

另外,为了更好的说明本公开,在下文的具体实施方式中给出了众多的具体细节。本领域技术人员应当理解,没有某些具体细节,本公开同样可以实施。在一些实例中,对于本领域技术人员熟知的、手段、元件和电路未作详细描述,以便于凸显本公开的主旨。

实施例1

如图1所示,本申请一方面,提出一种ETL算子解析转换算法,包括如下步骤:

S1、获取算子图,并根据所述算子图生成所需要的翻译器参数;

S2、根据所述算子图生成对应的ETL上下文,并输入至翻译器;

S3、翻译器利用所述翻译器参数,对所述算子图进行翻译,生成对应的算子中间表示;

S4、将所述算子中间表示转换为任务引擎通用脚本,并发送至任务引擎工厂进行执行。

如图2所示,本方案包含DB数据库/前端输入、ETL上下文工厂、翻译器、任务引擎工厂和任务管理系统。

本方案主要用于数据转换,使用ETL模块提供的低代码方式,通过拖拽一些视图化的算子来构建一个计算过程,实现输入数据集到目标输出数据集的数据转换。算子图由一个或多个输入算子和至少一个输出算子构成,用户可以导出、导入、删除、保存或者修改算子图,以及管理算子图的计算时机,如级联触发、定时触发等等方式。

用户需要进行逻辑处理、执行的数据集,将在ETL模块中通过每个算子进行逻辑执行,算子执行过程中伴随对应的数据处理。

用户可以通过ETL模块提供的界面,选择需要转换的数据集,并通过拖拽算子的方式构建一个算子图,来实现数据转换的过程。算子图可以包含多个算子,每个算子都代表了一种数据转换操作,例如过滤、排序、聚合等等。用户可以根据自己的需求选择合适的算子来构建自己的算子图。

一旦用户构建好了自己的算子图,ETL模块会将这个计算过程转换为可执行的任务引擎通用脚本,并通过提交任务的方式在任务引擎中排队、调度和执行。用户可以管理算子图的计算时机,例如级联触发、定时触发等等方式,来满足自己的需求。

最终,ETL模块会生成一个或多个目标数据集,这些数据集可以被用户导出、导入、删除、保存或者修改。用户可以根据自己的需求对这些数据集进行进一步处理或者分析。

如图3所示,为本方案的具体实施逻辑示意图。

算子解析的目的是将算子转换为JobEngine可以执行的脚本。最终,需要得到的是一个可执行的脚本才能通过提交JobEngineTask来执行脚本返回需要的结果。

算子转换为Javascript脚本的采用的方式为定义局部变量,即每个算子以自身的Id为名称定义为一个局部变量,然后通过计算关系,组合在一起。如下所示,每个局部变量与每个算子Id一一对应。

任务引擎(JobEngine)通用脚本。该脚本的运行逻辑是由一个Js函数进行描述,脚本将所有的算子的运行逻辑压缩到了一个Js函数中,在函数中声明的每个变量代表一个算子的处理过程。最终,脚本将结果生成出来并产生一个文件,保存在数据集中。

比如在下面的一个任务引擎通用脚本(两个数据集)示例中:

该JS函数的运行逻辑如下:

函数function(c)接收一个参数c,并返回一个函数。

返回的函数中,首先执行了两个变量的定义,分别是算子id_1662111324978和id_1662343921066。这两个变量分别表示从S3存储中加载的两个数据集,并对它们进行了一些列的操作,例如选择特定的列、限制数据集的大小等等。

接下来,将算子id_1662111324978和id_1662343921066进行了内连接操作,连接条件是它们两个数据集中的virginica列相等。连接后的结果保存在变量id_1663847429013中。

最后,从算子id_1663847429013中选择两列数据setosa和versicolor,并限制结果集的大小为200,并返回结果。

函数的作用是将两个数据集进行内连接,然后选择其中的两列数据进行返回。这个函数的实现使用了Spark SQL的API,并且对数据集进行了一些基本的操作,例如选择、限制、内连接等等。

所有输入算子都实现了Translatable,所以可以调用Translatable的方法translate进行转换。Translatable需要依赖一个上下文来进行处理,并将BaseCommand转换为BaseRepresentationCommand(基本表示命令)。详见下述描述。

作为本申请的一可选实施方案,可选地,获取算子图,并根据所述算子图生成所需要的翻译器参数,包括:

判断DB数据库中是否已经存在待处理的所述算子图:

若存在,则从所述DB数据库中调取得到出对应的所述算子图;

若不存在,则通过ETL模块提供的界面,选择需要转换的数据集,并通过拖拽算子的方式构建得到所述算子图;

根据所述算子图的内容,生成所需要的翻译器参数。

判断DB数据库中是否已经存在算子图,如果存在,则从数据库中获取算子图;DB数据库中可以提前存入待处理的算子图文件,可以直接调取出来进行计算。

如果不存在,则让用户在前端输入或构建算子图。详见上述在ETL模块中构建算子图的描述。

后续需要利用翻译器对算子图进行翻译,因此本处可以提前根据子图的内容,生成翻译器所需要的参数。

作为本申请的一可选实施方案,可选地,根据所述算子图生成对应的ETL上下文,并输入至翻译器,包括:

将所述算子图输入ETL上下文工厂;

ETL上下文工厂根据所述算子图的内容,生成对应的ETL上下文,所述ETL上下文包括数据源、数据目标和数据转换信息;

利用所述ETL上下文支持所述翻译器。

ETL上下文工厂,即上下级的ETL工厂。根据算子图的内容,生成ETL上下文,包括数据源、数据目标、数据转换等信息。

ETL上下文还用于准备上下文执行环境。如图3所示,翻译器进行算子翻译时,需要在执行环境中进行,前提需要根据上下文准备执行环境,在生成对应算子的执行顺序之后,按照有序序列在执行环境中依次对各个算子进行翻译执行。ETL上下文包括数据源、数据目标、数据转换等信息。

作为本申请的一可选实施方案,可选地,根据所述算子图生成对应的ETL上下文,并输入至翻译器,还包括:

利用所述ETL上下文产生数据流网,并对所述数据流网进行拓扑排序,确定所述算子图中每个算子的执行顺序;

根据拓扑排序的结果,生成有序的算子序列,得到所述算子图的有序序列;

根据将所述有序序列输入至翻译器,并根据所述有序序列和所述ETL上下文,准备所述ETL上下文的执行环境。

ETL上下文工厂,根据产生的ETL上下文(算子图的拓扑数据网),将算子图中的算子转换为数据流网(跟拓扑数据网对应,只不过按照拓扑排序的要求进行网络排序),并对数据流网进行排序处理。

利用扑排序算法,对数据流网进行拓扑排序,确定每个算子的执行顺序。根据拓扑排序的结果,生成有序的算子序列。根据ETL上下文和有序的算子序列,准备上下文执行环境,包括数据源、转换过程等。

算子解析的目的是将算子转换为JobEngine可以执行的脚本。最终,需要得到的是一个可执行的脚本才能通过提交JobEngineTask来执行脚本返回需要的结果。

输入算子(BaseCommand):这是一个网状结构,每个算子都引用了它的前驱。

算子转换(Translatable.translate):对输入算子的网状结构进行拓扑排序后(采用删边法对),通过顺序遍历每个算子,将算子转换为算子的某种表示(BaseRepresentationCommand)。

本实施例,拓扑排序的实现可参考现有技术中的拓扑排序算法,本处不作赘述。

本模块中使用scala重新实现了该算法,并基于Scala语言的特性对算法进行了优化。

作为本申请的一可选实施方案,可选地,翻译器利用所述翻译器参数,对所述算子图进行翻译,生成对应的算子中间表示,包括:

对所述算子图中的每个算子进行翻译:

翻译器使用前期生成的所述翻译器参数,并按照所述算子图的有序序列,对所述算子图中的每个算子进行翻译,将每个算子转换为中间表示;

将每个算子的中间表示进行组合,得到所述算子图的算子中间表示。

作为本申请的一可选实施方案,可选地,将所述算子中间表示转换为任务引擎通用脚本,并发送至任务引擎工厂进行执行,包括:

根据所述算子图的算子中间表示,生成对应的任务引擎通用脚本,并将所述任务引擎通用脚本输入至任务引擎工厂,准备执行对应的任务;

在所述任务引擎工厂中,对所述任务进行排队、调度和执行,生成对应的任务执行结果;

通过任务管理系统获取所述任务执行结果,并将所述任务执行结果返回至用户;

流程执行结束。

任务引擎通用脚本:将算子表示转换为Javascript脚本。

翻译器使用生成的翻译器参数,将算子图中的每个算子转换为中间表示。

算子中间表示:将每个算子的中间表示组合成整个算子图的中间表示。

转换为任务引擎通用脚本:将算子图的中间表示转换为任务引擎通用脚本,以便在任务引擎中执行。脚本将所有的算子的运行逻辑压缩到了一个Js函数。

提交任务到任务引擎工厂:将任务引擎通用脚本提交到任务引擎工厂,以便进行排队、调度和执行。

通过任务管理获取任务结果:通过任务管理系统获取任务执行结果,并将结果返回给用户。

停止:流程执行结束。脚本将结果生成出来并产生一个文件,保存在数据集中。

任务引擎工厂和任务管理系统,可以结合ETL模块的系统平台,具体进行应用,本实施例不做赘述。

因此,本申请通过将用户输入的算子图转换为可执行的任务引擎通用脚本,并通过任务引擎工厂进行排队、调度和执行。在这个过程中,需要进行多次处理和转换,包括生成翻译器参数、生成ETL上下文、产生数据流网、拓扑排序、生成有序序列、准备执行环境等等。最终,通过任务管理系统获取任务执行结果,并将结果返回给用户。

在数据转换过程中,将算子图解析转换为对应的任务引擎通用脚本,用户可以参与任务引擎通用脚本的排序、调度和在线重构等,为用户提供较大灵活度的算子解析和任务执行便利,加大了算子图的执行灵活度。

显然,本领域的技术人员应该明白,实现上述实施例中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成的,程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各控制的实施例的流程。本领域技术人员可以理解,实现上述实施例中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成的,程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各控制的实施例的流程。其中,存储介质可为磁碟、光盘、只读存储记忆体(Read-OnlyMemory,ROM)、随机存储记忆体(RandomAccessMemory,RAM)、快闪存储器(FlashMemory)、硬盘(HardDiskDrive,缩写:HDD)或固态硬盘(Solid-StateDrive,SSD)等;存储介质还可以包括上述种类的存储器的组合。

实施例2

基于实施例1的实施原理,本申请另一方面,提出一种实现所述ETL算子解析转换算法的应用系统,包括:

算子图获取模块,用于获取算子图,并根据所述算子图生成所需要的翻译器参数;

ETL上下文生成模块,用于根据所述算子图生成对应的ETL上下文,并输入至翻译器;

翻译模块,用于利用所述翻译器参数,对所述算子图进行翻译,生成对应的算子中间表示;

任务执行模块,用于将所述算子中间表示转换为任务引擎通用脚本,并发送至任务引擎工厂进行执行。

上述各个模块,可以参见实施例1中的应用描述,本实施例不再赘述。

上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。

实施例3

如图4所示,更进一步地,本申请另一方面,还提出一种电子设备,包括:

处理器;

用于存储处理器可执行指令的存储器;

其中,所述处理器被配置为执行所述可执行指令时实现所述ETL算子解析转换算法。

本公开实施例来电子设备包括处理器以及用于存储处理器可执行指令的存储器。其中,处理器被配置为执行可执行指令时实现前面任一所述ETL算子解析转换算法。

此处,应当指出的是,处理器的个数可以为一个或多个。同时,在本公开实施例的电子设备中,还可以包括输入装置和输出装置。其中,处理器、存储器、输入装置和输出装置之间可以通过总线连接,也可以通过其他方式连接,此处不进行具体限定。

存储器作为一计算机可读存储介质,可用于存储软件程序、计算机可执行程序和各种模块,如:本公开实施例的ETL算子解析转换算法所对应的程序或模块。处理器通过运行存储在存储器中的软件程序或模块,从而执行电子设备的各种功能应用及数据处理。

输入装置可用于接收输入的数字或信号。其中,信号可以为产生与设备/终端/服务器的用户设置以及功能控制有关的键信号。输出装置可以包括显示屏等显示设备。

以上已经描述了本公开的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的技术改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。

相关技术
  • 厂站端自动化系统动态特性三维仿真的解析算法及应用
  • 一种基于NODEJS应用的文件转换解析方法、系统
技术分类

06120116481391