数据处理方法、装置及可读存储介质与流程

文档序号:20768717发布日期:2020-05-15 19:21阅读:162来源:国知局
数据处理方法、装置及可读存储介质与流程

本申请涉及计算机技术领域,具体而言,涉及一种数据处理方法、装置及可读存储介质。



背景技术:

随着信息化的不断深入发展,数据生成速度正在提高,需要处理的数据量急速膨胀,对大规模的数据进行存储、查询以及分析已经成为一个亟待解决的问题。

结构化查询语言(structuredquerylanguage,sql),是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。

sql通过不同的语句来实现数据查询和程序的设计,这些语句可通过对应的数据分析引擎执行,数据分析引擎包括有elasticsearch和spark,elasticsearch是一个分布式、高扩展、高实时的搜索与数据分析引擎,它能很方便的存储结构化、非结构化的海量数据,并向终端客户提供搜索、分析和探索的能力,因此,可用于搜索各种文档,同时提供可扩展且接近实时的搜索,其优点就是能及时快速获取数据,但是无法实现复杂的数据分析和数据探索。而spark是专门为大规模数据处理而设计的快速通用计算引擎,它是一种类hadoopmapreduce的通用并行计算框架,它具有hadoopmapreduce的所有优点,同时基于内存进行计算,其性能远优越于hadoopmapreduce,因此spark能更能好地适用于复杂的数据挖掘和机器学习。

但是由于elasticsearch的性能远高于spark,为了兼容两个引擎,其编程语言中针对不同的任务采用不同的语句进行编程,而语句的不同写法,可能导致性能有较大的差异,使得其数据查询效率较低。



技术实现要素:

本申请实施例的目的在于提供一种数据处理方法、装置及可读存储介质,用以改善现有技术中sql语言执行的性能较低,导致数据查询效率较低的问题。

第一方面,本申请实施例提供了一种数据处理方法,所述方法包括:

获取数据处理语言的目标语句,其中,所述数据处理语言为类sql语言,所述数据处理语言的语句能够按子句构成的管道被切分为多个数据处理任务执行,所述多个数据处理任务包括在spark和/或elasticsearch上执行的任务;

获取所述目标语句中的多个目标子句,所述多个目标子句包括适于在所述spark上执行的多个spark子句以及适于在elasticsearch上执行的多个elasticsearch子句;

根据所述多个spark子句以及所述多个elasticsearch子句之间的依赖关系对所述多个目标子句进行优化,获得优化后的目标语句。

在上述实现过程中,通过将数据处理语言中的语句划分为多个spark子句以及多个elasticsearch子句,然后可按照各个子句之间的依赖关系对数据处理语言中的语句进行优化,从而可提高其数据处理语言执行的性能,进而提高数据查询效率。

可选地,所述根据所述多个spark子句以及所述多个elasticsearch子句之间的依赖关系对所述多个目标子句进行优化,包括:

获取所述多个spark子句中的transform子句;

确定所述transform子句的前向依赖的子句是否为所述多个elasticsearch子句中的elasticsearch子句;

若是,则将所述transform子句转换为对应的elasticsearch子句。

在上述实现过程中,通过将transform子句转换为对应的elasticsearch子句,可使得将由spark执行的语句转换到由elasticsearch执行,由此可提升数据处理语言的执行性能。

可选地,所述将所述transform子句转换为对应的elasticsearch子句之后,还包括:

获取所述多个spark子句中未转换为elasticsearch子句的多个其他transform子句;

确定所述多个其他transform子句之间是否具有单向传递依赖关系;

若是,则将具有单向传递依赖关系的其他transform子句合并为一个transform子句。

在上述实现过程中,将具有单向传递依赖关系的transform子句合并为一个transform子句,由此可减少spark的任务执行数量,以提升数据处理语言的执行性能。

可选地,所述根据所述多个spark子句以及所述多个elasticsearch子句之间的依赖关系对所述多个目标子句进行优化,包括:

确定所述多个目标子句中最后执行的目标子句;

确定与所述目标子句不具有依赖关系的冗余子句;

将所述冗余子句从所述的数据处理语言的目标语句中删除。

在上述实现过程中,通过删除数据处理语言中的冗余自居,从而可减少语句的执行数量,进而可提升数据查询效率。

可选地,所述根据所述多个spark子句以及所述多个elasticsearch子句之间的依赖关系对所述多个目标子句进行优化,包括:

获取所述多个spark子句中的join子句;

确定所述join子句的后置子句是否为transform子句;

若是,则将所述transform子句合并到所述join子句中。

在上述实现过程中,通过将transform子句合并到join子句中,可减少spark的任务执行数量,并且减少参与关联查询的数据量,可提升数据查询效率。

可选地,所述将所述transform子句合并到所述join子句中之后,还包括:

确定所述join子句中是否存在只涉及单一数据集的目标条件且所述单一数据集不依赖于除所述join子句之外的其他子句;

若是,则生成加入所述目标条件的新的join子句,并将原来的join子句替换为新的join子句。

在上述实现过程中,通过生成新的join子句,可减少参与关联查询的数据量,进而提升数据查询效率。

可选地,所述将所述transform子句合并到所述join子句中之后,还包括:

确定所述join子句中涉及的第一数据集和第二数据集的大小是否超过预设阈值;

若否,则利用所述第一数据集对所述第二数据集进行in子查询形成前置执行语句,并将所述前置执行语句插入到所述join子句之前,所述前置执行语句执行后获得第三数据集,所述第三数据集的数据量小于所述第二数据集的数据量;

将所述join子句中的第二数据集替换为所述第三数据集。

在上述实现过程中,通过进行数据转换,可使得参与处理的数据量减少,进而减少参与join查询的数据量,进一步提升数据处理语言的执行性能。

可选地,所述获得优化后的所述目标语句之后,还包括:

执行所述优化后的目标语句。

第二方面,本申请实施例提供了一种数据处理装置,所述装置包括:

语句获取模块,用于获取数据处理语言的目标语句,其中,所述数据处理语言为类sql语言,所述数据处理语言的语句能够按子句构成的管道被切分为多个数据处理任务执行,所述多个数据处理任务包括在spark和/或elasticsearch上执行的任务;

子句获取模块,用于获取所述目标语句中的多个目标子句,所述多个目标子句包括适于在所述spark上执行的多个spark子句以及适于在elasticsearch上执行的多个elasticsearch子句;

语句优化模块,用于根据所述多个spark子句以及所述多个elasticsearch子句之间的依赖关系对所述多个目标子句进行优化,获得优化后的目标语句。

可选地,所述语句优化模块,用于:

获取所述多个spark子句中的transform子句;

确定所述transform子句的前向依赖的子句是否为所述多个elasticsearch子句中的elasticsearch子句;

若是,则将所述transform子句转换为对应的elasticsearch子句。

可选地,所述语句优化模块,还用于:

获取所述多个spark子句中未转换为elasticsearch子句的多个其他transform子句;

确定所述多个其他transform子句之间是否具有单向传递依赖关系;

若是,则将具有单向传递依赖关系的其他transform子句合并为一个transform子句。

可选地,所述语句优化模块,还用于:

确定所述多个目标子句中最后执行的目标子句;

确定与所述目标子句不具有依赖关系的冗余子句;

将所述冗余子句从所述的数据处理语言的目标语句中删除。

可选地,所述语句优化模块,还用于:

获取所述多个spark子句中的join子句;

确定所述join子句的后置子句是否为transform子句;

若是,则将所述transform子句合并到所述join子句中。

可选地,所述语句优化模块,还用于:

确定所述join子句中是否存在只涉及单一数据集的目标条件且所述单一数据集不依赖于除所述join子句之外的其他子句;

若是,则生成加入所述目标条件的新的join子句,并将原来的join子句替换为新的join子句。

可选地,所述语句优化模块,还用于:

确定所述join子句中涉及的第一数据集和第二数据集的大小是否超过预设阈值;

若否,则利用所述第一数据集对所述第二数据集进行in子查询形成前置执行语句,并将所述前置执行语句插入到所述join子句之前,所述前置执行语句执行后获得第三数据集,所述第三数据集的数据量小于所述第二数据集的数据量;

将所述join子句中的第二数据集替换为所述第三数据集。

可选地,所述装置还包括:

语句执行模块,用于执行所述优化后的目标语句。

第三方面,本申请实施例提供一种电子设备,包括处理器以及存储器,所述存储器存储有计算机可读取指令,当所述计算机可读取指令由所述处理器执行时,运行如上述第一方面提供的所述方法中的步骤。

第四方面,本申请实施例提供一种可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时运行如上述第一方面提供的所述方法中的步骤。

本申请的其他特征和优点将在随后的说明书阐述,并且,部分地从说明书中变得显而易见,或者通过实施本申请实施例了解。本申请的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。

附图说明

为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1为本申请实施例提供的一种电子设备的结构示意图;

图2为本申请实施例提供的一种数据处理方法的流程图;

图3为本申请实施例提供的一种各个子句之间的依赖关系的示意图;

图4为本申请实施例提供的一种数据处理装置的结构框图。

具体实施方式

下面将结合本申请实施例中附图,对本申请实施例中的技术方案进行清楚、完整地描述。

为了解决现有技术中结构化查询语言sql的性能较差的问题,申请人发明了一种数据处理语言,该数据处理语言为类sql语言,本申请实施例中提供的数据处理语言也是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和关联关系数据库系统,数据处理语言中的编程语句简称为目标语句,其语法规则可以参考sql语言,为了描述的简洁,在此不过多赘述。

用户在执行数据分析处理任务时,输入数据处理语言的编程语句,其语言解析器可以对编程语句内容进行解析,然后按照管道将其拆分为elasticsearch任务和spark任务,elasticsearch任务运行于elasticsearch引擎上,spark任务运行于spark引擎上。

其中,管道类似于linux系统中管道的含义,其用于进程间进行通信,多个命令构成一个进程,这多个命令要连续执行时,前一个命令的输出就作为后一个命令的输入,数据在这些命令之间传递如同形成了一根管道一样。本申请实施例中的es任务和spark任务可以理解为两个进程,es任务的输出结果被当成spark任务的输入进行处理,所以可以语句拆分为不同的数据处理任务。

而由于elasticsearch的性能一般要高于spark的性能,为了兼容两个引擎,其编程语言中针对不同的任务采用不同的语句进行编程,而语句的不同写法,可能导致性能有较大的差异,如一个不好的语句可能导致系统崩溃,所以,本申请实施例中通过发现其语句中可优化的子句来对其进行优化,从而提高了数据处理语言执行的性能,可有效提高数据查询效率。

本申请实施例中提供的数据处理方法,在该方法中,可以先获取数据处理语言的目标语句,其中,数据处理语言的语句能够按子句构成的管道被切分为多个数据处理任务执行,每个数据处理任务在一项数据处理服务中执行,然后获取目标语句中适于在不同的数据处理服务中执行的子句,并根据子句之间的依赖关系对子句进行优化,获得优化后的目标子句。

其中,上述的数据处理任务即为上述的spark任务或elasticsearch任务,数据处理服务是指spark引擎或elasticsearch引擎,或者在不同数据处理服务中执行的子句,对其进行优化,以提升数据处理语言的执行性能。

下面结合各个附图对本申请实施例的数据处理方法进行详细介绍。

请参照图1,图1为本申请实施例提供的一种电子设备的结构示意图,所述电子设备可以包括:至少一个处理器110,例如cpu,至少一个通信接口120,至少一个存储器130和至少一个通信总线140。其中,通信总线140用于实现这些组件直接的连接通信。其中,本申请实施例中设备的通信接口120用于与其他节点设备进行信令或数据的通信。存储器130可以是高速ram存储器,也可以是非不稳定的存储器(non-volatilememory),例如至少一个磁盘存储器。存储器130可选的还可以是至少一个位于远离前述处理器的存储装置。存储器130中存储有计算机可读取指令,当所述计算机可读取指令由所述处理器110执行时,电子设备执行下述图2所示方法过程,例如,存储器130可用于存储数据处理语言的目标语句,处理器110可用于从存储器130中获取目标语句,然后对目标语句进行分析,确定目标语句中各个子句之间的依赖关系,基于其依赖关系对其进行优化,由此可获得优化后的子句。

可以理解,图1所示的结构仅为示意,所述电子设备还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。图1中所示的各组件可以采用硬件、软件或其组合实现。

请参照图2,图2为本申请实施例提供的一种数据处理方法的流程图,该方法包括如下步骤:

步骤s110:获取数据处理语言的目标语句,其中,数据处理语言为类sql语言,所述数据处理语言的语句能够按子句构成的管道被切分为多个数据处理任务执行,所述多个数据处理任务包括在spark和/或elasticsearch上执行的任务。

其中,多个数据处理任务即包括多个spark任务和多个elasticsearch任务,多个spark任务在spark上执行,多个elasticsearch任务在elasticsearch上执行。

数据处理语言中的编程语句称为目标语句,该目标语句可以是用户输入的,也可以是电子设备中存储的。电子设备在需要对目标语句进行优化时,可以获取目标语句,然后将目标语句按照管道切换为多个数据处理任务,即将目标语句划分为spark任务和elasticsearch任务,切分的每个数据处理任务包括多个子句,也即将目标语句划分为多个目标子句,这些目标子句分别在spark或elasticsearch上执行,每个子句可认为是数据处理语言中的一条编程命令。

步骤s120:获取所述目标语句中的多个目标子句,所述多个目标子句包括适于在所述spark上执行的多个spark子句以及适于在elasticsearch上执行的多个elasticsearch子句。

可以将目标语句中的一条命令确定为一条目标子句,则可获得目标语句中的多个目标子句,这多个目标子句包括适于在spark上执行的多个spark子句以及适于在elasticsearch上执行的多个elasticsearch子句。

步骤s130:根据所述多个spark子句以及所述多个elasticsearch子句之间的依赖关系对所述多个目标子句进行优化,获得优化后的所述目标语句。

依赖关系可以理解为是前一子句执行完后再执行后一子句,即前一子句的输出结果可以作为后一子句的输入数据,如编程语言中各条命令之间依次执行,由于elasticsearch子句执行的输出结果可作为spark子句的输入数据,所以,elasticsearch子句与spark子句之间可能具有依赖性,多个spark子句之间可能具有依赖性,根据各个子句之间的依赖关系可以明确相邻两个子句之间是否可以进行合并为一个子句,或者是否可以删除其中一个子句,只保留一个子句等可优化的子句,所以可按照子句之间的依赖关系对多个子句进行优化。

在上述实现过程中,通过将数据处理语言中的语句划分为多个spark子句以及多个elasticsearch子句,然后可按照各个子句之间的依赖关系对数据处理语言中的语句进行优化,从而可提高其数据处理语言执行的性能,进而提高数据查询效率。

作为一种实施方式,对多个目标子句的优化方式可以包括如下几种方式:

方式一:获取多个spark子句中的transform子句,确定transform子句的前向依赖的子句是否为多个elasticsearch子句中的elasticsearch子句,若是,则将transform子句转换为对应的elasticsearch子句。

其中,transform子句的作用是用于创建交叉表查询,使用交叉表查询汇总数据时,将从作为列标题的指定字段或表达式中选择值,以便能够以一种比使用选择查询更紧凑的方式来查看数据。

由于elasticsearch的性能高于spark的性能,所以在将spark子句中的满足上述条件的transform子句转换为elasticsearch子句时,使得由elasticsearch来执行elasticsearch子句,由此可提升其数据处理语言执行的性能。

为了便于对子句进行查找,还可以基于多个目标子句之间的依赖关系生成一个双向链表,双向链表中的每个节点即为一个子句对应的节点,该双向链表可表征子句之间的依赖关系,然后可遍历双向链表中的每一个节点,查找当前节点是否为transform子句,若是,则查找该当前节点的前驱节点是否为elasticsearch子句,若是,则表示该transform子句的前向依赖的子句为elasticsearch子句,则可将transform子句转换为elasticsearch子句,并将elasticsearch子句替换当前节点。

其中,将transform子句转换为elasticsearch子句转换的过程可以为:合并transform子句种的field字段,合并where子句,生成新的elasticsearch子句,将新的elasticsearch子句加入链表,代替原有的节点。在合并field字段中由于要保证后续依赖关系的正确性,可以保留transform子句中的当前字段的别名,字段名为真实数据集的真实字段名,由当前字段名找到前置elasticsearch子句中的字段名,以elasticsearch子句中的字段名替换当前字段名。在合并where子句中可以将前置查询条件全部移到本transform子句里,将transform子句中的条件全部改为实体数据集的真实名。

在上述实现过程中,通过将transform子句转换为对应的elasticsearch子句,可使得将由spark执行的语句转换到由elasticsearch执行,由此可提升数据处理语言的执行性能。

方式二:确定多个目标子句中最后执行的目标子句,确定与目标子句不具有依赖关系的冗余子句,将冗余子句从数据处理语言中的目标语句中删除。

数据处理语言中的每个子句默认依赖于管道前面的子句,随着子查询功能的加入,子句与子句之间的依赖关系就可能变得复杂,而消除数据处理语言中语句的冗余子句的前提就是构建各个子句之间的真实依赖关系。由于在方式一中将transform子句转换为对应的elasticsearch子句后,其各个子句之间的依赖关系可能发生了变化,所以,还可以重新获取多个目标子句之间的依赖关系,然后统计每个子句的之间或间接被最后执行的目标子句的依赖关系。

可以从目标子句向前反推获得目标子句之前的所有子句中与目标子句不具有间接或直接依赖关系的冗余子句,这些冗余子句表示在数据处理语言中为多余子句,所以可以将其删除,进而使得在执行数据处理语言中的目标语句时,可减少数据执行量,进而提升数据查询效率。

其中,查找与目标子句不具有依赖关系的冗余子句的过程可以为:例如,如图3所示为目标子句间的依赖关系,连接各个子句之间的带有箭头的连接线表示其依赖关系,如子句3依赖子句1,子句4依赖子句3,子句3依赖子句2,子句5依赖子句3,若最后执行的目标子句为子句5,所以,可按照其依赖关系,向前反推获得与子句5具有依赖关系的目标子句包括子句3、子句2和子句3,而子句4与子句5不具有依赖关系,则子句4即为冗余子句。

方式三:获取多个spark子句中未转换为elasticsearch子句的多个其他transform子句,确定多个其他transform子句之间是否具有单向传递依赖关系,若是,则将具有单向依赖传递关系的其他transform子句合并为一个transform子句。

其中,单向传递依赖关系可以简单理解为前一个transform子句为a<3,后一个transform子句为a>1,则表示这两个transform子句具有单向传递依赖关系。所以,可以将这两个transform子句合并为一个transform子句,这样可以减少spark执行任务的数量,以此来达到提高数据处理语言执行的性能的目的。

在合并两个transform子句时,可以先判断前置transform子句是否有其他子句依赖,若没有,则可直接合并到后置transform子句中,在上述生成的双向链表中,可删除前置节点,然后变更当前节点的依赖,若有,则判断当前节点的transform子句是否有附加的where子句,若没有,则将所有依赖于前置节点的transform子句修改为依赖于当前节点的transform子句,然后再将前置的transform子句合并到当前节点的transform子句中。

方式四:获取多个spark子句中的join子句,确定join子句的后置子句是否为transform子句,若是,则将transform子句合并到join子句中。

可以理解地,join子句用于基于要联接的数据集中的匹配键合并两个数据集。

在上述将多个目标子句生成一个双向链表后,可以遍历双向链表中的每个节点,然后确定当前节点是否为join子句,若是,则判断当前节点的后置节点是否为transform子句,若是,若该join子句无其他节点依赖,则将transform子句合并到join子句中,然后将所有依赖于后置节点的节点修改为依赖于当前节点,删除transform子句的后置节点。

所以,将transform子句合并到join子句中,可以减少spark任务执行的数据量,并且可以缩小参与join优化数据集的数据量,从而提高join子句的执行效率。

方式五:确定join子句中是否存在只涉及单一数据集的目标条件且该单一数据集不依赖于除join子句之外的其他子句,若是,则生成加入目标条件的新的join子句,并将原来的join子句替换为新的join子句。

单一数据集是指join子句涉及的数据集只要一个,这种情况下可以将针对该单一数据集的目标条件提到join子句中,如目标条件可以是指针对单一数据集的相关检索条件,加入目标条件生成新的join子句,使得可以减少join子句执行的数据量,提高join执行效率,若所涉及的数据集为elasticsearch子句,也可提升整个数据处理语言的执行性能。

方式六:确定join子句中涉及的第一数据集和第二数据集的大小是否超过预设阈值,若否,在而利用第一数据集对第二数据集进行in子查询形成前置执行语句,并将前置执行语句插入到join子句之前,前置执行语句执行后获得第三数据集,该第三数据集的数据量小于第二数据集的数据量,将join子句中的第二数据集替换为第三数据集。

其中,若第一数据集和第二数据集的数据量相差很大时,如第一数据集的数据量远远大于第二数据集的数据量,这是新形成的in子查询就由spark处理,这种情况下,可针对join子句生成分段执行计划,即将join子句涉及的数据集对应的语句划分为多段子句,然后每段子句分别执行,这样可使得前置任务先执行。

in子查询是指出现在where子句中的select语句,执行in子查询可以返回一个数据集合,通过与这个数据集合的比较来确定另一个查询集合,如此可采用第一数据集对第二数据集进行in子查询形成前置执行语句,使得可减少join子句执行的数据量,提高join执行效率。

需要说明的是,为了便于查找各个节点,若上述优化方式中查找节点可以均是基于多个目标子句形成的双向链表来查找的,则在每个方式进行优化后,可更新双向链表以及双向链表中的各个节点,即重新确定各个子句之间的依赖关系。

另外,上述六个优化方式可以并行执行,也可以按照上述方式一至方式六依次串行执行,或者也可以只使用其中的至少一种优化方式对其进行优化也可达到提升数据处理语言的执行性能的目的。当然,在并行执行时,可以将各个优化方式获得的语句进行合并,但是合并之后可能其语句还可以再进行优化,所以,为了一次性对语句进行优化,上述六个优化方式可以串行执行,最后获得优化后的目标语句。

为了测试数据处理语言的执行性能,还可以执行优化后的目标语句,由此可确定其目标语句的执行时间以及执行速度,进而可基于其执行速度确定数据处理语言的执行性能,然后将结果输出给开发人员,使得开发人员可以知晓优化结果。

或者,还可以将每个优化方式后获得的优化结果输出给开发人员,使得开发人员可以对每个优化方式的优化结果进行实时掌控。

请参照图4,图4为本申请实施例提供的一种数据处理装置200的结构框图,该装置200可以是电子设备上的模块、程序段或代码。应理解,该装置200与上述图2方法实施例对应,能够执行图2方法实施例涉及的各个步骤,该装置200具体的功能可以参见上文中的描述,为避免重复,此处适当省略详细描述。

可选地,所述装置200包括:

语句获取模块210,用于获取数据处理语言的目标语句,其中,所述数据处理语言为类sql语言,所述数据处理语言的语句能够按子句构成的管道被切分为多个数据处理任务执行,所述多个数据处理任务包括在spark和/或elasticsearch上执行的任务;

子句获取模块220,用于获取所述目标语句中的多个目标子句,所述多个目标子句包括适于在所述spark上执行的多个spark子句以及适于在elasticsearch上执行的多个elasticsearch子句;

语句优化模块230,用于根据所述多个spark子句以及所述多个elasticsearch子句之间的依赖关系对所述多个目标子句进行优化,获得优化后的目标语句。

可选地,所述语句优化模块230,用于:

获取所述多个spark子句中的transform子句;

确定所述transform子句的前向依赖的子句是否为所述多个elasticsearch子句中的elasticsearch子句;

若是,则将所述transform子句转换为对应的elasticsearch子句。

可选地,所述语句优化模块230,还用于:

获取所述多个spark子句中未转换为elasticsearch子句的多个其他transform子句;

确定所述多个其他transform子句之间是否具有单向传递依赖关系;

若是,则将具有单向传递依赖关系的其他transform子句合并为一个transform子句。

可选地,所述语句优化模块230,还用于:

确定所述多个目标子句中最后执行的目标子句;

确定与所述目标子句不具有依赖关系的冗余子句;

将所述冗余子句从所述的数据处理语言的目标语句中删除。

可选地,所述语句优化模块230,还用于:

获取所述多个spark子句中的join子句;

确定所述join子句的后置子句是否为transform子句;

若是,则将所述transform子句合并到所述join子句中。

可选地,所述语句优化模块230,还用于:

确定所述join子句中是否存在只涉及单一数据集的目标条件且所述单一数据集不依赖于除所述join子句之外的其他子句;

若是,则生成加入所述目标条件的新的join子句,并将原来的join子句替换为新的join子句。

可选地,所述语句优化模块230,还用于:

确定所述join子句中涉及的第一数据集和第二数据集的大小是否超过预设阈值;

若否,则利用所述第一数据集对所述第二数据集进行in子查询形成前置执行语句,并将所述前置执行语句插入到所述join子句之前,所述前置执行语句执行后获得第三数据集,所述第三数据集的数据量小于所述第二数据集的数据量;

将所述join子句中的第二数据集替换为所述第三数据集。

可选地,所述装置200还包括:

语句执行模块,用于执行所述优化后的目标语句。

本申请实施例提供一种可读存储介质,所述计算机程序被处理器执行时,执行如图2所示方法实施例中电子设备所执行的方法过程。

本实施例公开一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的方法,例如,包括:获取数据处理语言的目标语句,其中,所述数据处理语言为类sql语言,所述数据处理语言的语句能够按子句构成的管道被切分为多个数据处理任务执行,所述多个数据处理任务包括在spark和/或elasticsearch上执行的任务;获取所述目标语句中的多个目标子句,所述多个目标子句包括适于在所述spark上执行的多个spark子句以及适于在elasticsearch上执行的多个elasticsearch子句;根据所述多个spark子句以及所述多个elasticsearch子句之间的依赖关系对所述多个目标子句进行优化,获得优化后的目标语句。

综上所述,本申请实施例提供一种数据处理方法、装置及可读存储介质,通过将数据处理语言中的语句划分为多个spark子句以及多个elasticsearch子句,然后可按照各个子句之间的依赖关系对数据处理语言中的语句进行优化,从而可提高其数据处理语言执行的性能,进而提高数据查询效率。

在本申请所提供的实施例中,应该理解到,所揭露装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

另外,作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

再者,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。

在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。

以上所述仅为本申请的实施例而已,并不用于限制本申请的保护范围,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1