数据处理方法及装置、存储介质和电子设备与流程

文档序号:16667947发布日期:2019-01-18 23:23阅读:137来源:国知局
本发明的实施方式涉及大数据
技术领域
:,更具体地,本发明的实施方式涉及数据处理方法、数据处理装置、电子设备、计算机可读存储介质。
背景技术
::本部分旨在为权利要求书中陈述的本发明的实施方式提供背景或上下文。此处的描述不因为包括在本部分中就承认是现有技术。随着计算机技术的发展,涌现了各种用于数据处理的数据库,由于数据量较多,在查询或者是获取数据时需要对所有数据进行过滤,以提高数据查询效率。现有技术中,数据按照parquet存储格式进行存储,它将大数据表的数据按列存入文件中。parquet存储格式中包括行组、列块以及页等多个模块。parquet存储格式在数据写入时会按列块以行组为单位计算对应的统计信息,通过这些统计信息和该列的过滤条件可以判断每个行组的数据是否需要扫描和读取。技术实现要素:但是,现有方案中,parquet存储格式通过每一个列块的统计信息来过滤出符合查询条件的数据,当列块的数据分布比较均匀时,误判的概率较高而导致扫描原本不需要扫描的行组,过滤效率较低,准确率较低;另外,导致大数据计算过程中会读取更多的数据,从而消耗更多的资源。因此在现有技术中,高效过滤数据是非常令人烦恼的过程。为此,非常需要一种改进的数据处理方法,以使得能够高效、可靠地对数据进行过滤。在本发明实施方式的第一方面中,提供了一种数据处理方法,包括:获取待处理的数据文件,所述数据文件中的数据按照行组和列块的格式进行存储,所述数据文件包括文件头,所述文件头中包括行组元数据,所述行组元数据中包括与所述数据对应的检索标识;基于接收到的数据查询请求,根据所述行组元数据中包含的所述检索标识对所述数据文件中的数据进行过滤,以得到与所述数据查询请求对应的查询结果。在本发明的一些实施例中,根据所述行组元数据中包含的所述检索标识对所述数据文件中的数据进行过滤包括:判断所述检索标识是否满足过滤条件,并在所述检索标识满足所述过滤条件时从所述数据文件的所有列块中确定待过滤列;对所述待过滤列所在行组中的数据进行行组过滤。在本发明的一些实施例中,判断所述检索标识是否满足过滤条件包括:在确定与所述数据查询请求关联的mapreduce任务中开启过滤设置且所述检索标识不为空时,判定所述检索标识满足所述过滤条件。在本发明的一些实施例中,所述方法还包括:若所述检索标识为空,则读取所述数据文件中存储的所有数据。在本发明的一些实施例中,对所述待过滤列所在行组中的数据进行行组过滤包括:将目标值与所述待过滤列所在行组的行组元数据进行对比,以判断是否为等值查询;通过是否为等值查询确定对所述待过滤列所在行组中的数据的过滤方式;根据所述过滤方式对所述待过滤列所在行组中的数据进行行组过滤。在本发明的一些实施例中,所述行组元数据中包括最大值和最小值,通过是否为等值查询确定对所述待过滤列所在行组中的数据的过滤方式包括:在判定为所述等值查询时,通过行组元数据中的检索标识对所述待过滤列所在行组中的数据进行行组过滤;在判定为非等值查询时,通过行组元数据中的最大值和最小值对所述待过滤列所在行组中的数据进行行组过滤。在本发明的一些实施例中,所述检索标识包括布隆过滤器,通过行组元数据中的检索标识对所述待过滤列所在行组中的数据进行行组过滤包括:判断所述待过滤列所在行组的布隆过滤器中是否包含所述目标值;若所述待过滤列所在行组的布隆过滤器中不包含所述目标值,则将所述待过滤列所在行组过滤掉。在本发明的一些实施例中,在对所述待过滤列所在行组中的数据进行行组过滤之后,所述方法还包括:获取行组过滤后所述数据文件的剩余行组包含的数据;对所述剩余行组包含的数据进行页过滤,并对页过滤后得到的剩余数据进行读取。在本发明的一些实施例中,每个行组包括多个列块,每个列块包括多个页,所述文件头中包括每页的页元数据,对所述剩余行组包含的数据进行页过滤包括:获取经过行组过滤后所述剩余行组包含的所有页的页元数据;将目标值与待过滤列中每页的页元数据进行对比,以确定所述待过滤列中每页的页元数据与所述目标值是否为等值查询;通过所述待过滤列中每页的页元数据与所述目标值是否为等值查询,确定对所述待过滤列中每页包含的数据进行页过滤的过滤方式。在本发明的一些实施例中,页元数据包括最大值和最小值,确定对所述待过滤列中每页包含的数据进行页过滤的过滤方式包括:若所述待过滤列中目标页的页元数据与所述目标值为非等值查询,则通过页元数据中的最大值和最小值对目标页包含的数据进行页过滤。在本发明的一些实施例中,页元数据包括布隆过滤器,确定对所述待过滤列中每页包含的数据进行页过滤的过滤方式包括:若所述待过滤列中目标页的页元数据与所述目标值为所述等值查询,则通过页元数据中的布隆过滤器对所述待过滤列中目标页包含的数据进行页过滤。在本发明的一些实施例中,通过页元数据中的布隆过滤器对所述待过滤列中目标页包含的数据进行页过滤包括:判断页元数据的布隆过滤器中是否包含所述目标值;若页元数据的布隆过滤器中不包含所述目标值,则将所述待过滤列包含的目标页过滤掉。在本发明的一些实施例中,在获取待处理的数据文件之前,所述方法还包括:按照行组、列块以及页的格式将数据写入所述数据文件,并为所述数据文件生成文件头;其中,文件头包括对所述数据文件中的每个行组生成的行组元数据以及为所述数据文件中的每页生成的页元数据。在本发明的一些实施例中,按照行组、列块以及页的格式将数据写入所述数据文件包括:根据每个列块中数据的类型选择数据写入方式,并通过所述数据写入方式将每个列块中的数据更新至内存;当所述内存中数据的大小超过行组阈值时,则按照行组、列块以及页的格式将所述内存中的所有数据写入所述数据文件。在本发明的一些实施例中,所述列块包括多个页,按照行组、列块以及页的格式将所述内存中的所有数据写入所述数据文件包括:将所述内存中的数据按页进行存储,并在每页中包含的数据满足预设条件时将每页包含的数据写入数据文件,直至将所有列块中的数据均按页写入至数据文件中为止。在本发明的一些实施例中,在每页中包含的数据满足预设条件时,所述方法还包括:更新每页对应的页元数据,并更新每个列块所在行组的行组元数据。在本发明的一些实施例中,更新每个列块所在行组的行组元数据包括:计算每个列块中数据的最大值和最小值,并将每个列块中的最新数据写入每个列块对应的行组元数据。在本发明实施方式的第二方面中,提供了一种数据处理装置,包括:文件获取模块,用于获取待处理的数据文件,所述数据文件中的数据按照行组和列块的格式进行存储,所述数据文件包括文件头,所述文件头中包括行组元数据,所述行组元数据中包括与所述数据对应的检索标识;数据查询模块,用于基于接收到的数据查询请求,根据所述行组元数据中包含的所述检索标识对所述数据文件中的数据进行过滤,以得到与所述数据查询请求对应的查询结果。在本发明的一些实施例中,数据查询模块包括:条件判断模块,用于判断所述检索标识是否满足过滤条件,并在所述检索标识满足所述过滤条件时从所述数据文件的所有列块中确定待过滤列;行组过滤模块,用于对所述待过滤列所在行组中的数据进行行组过滤。在本发明的一些实施例中,条件判断模块包括:判断控制模块,用于在确定与所述数据查询请求关联的mapreduce任务中开启过滤设置且所述检索标识不为空时,判定所述检索标识满足所述过滤条件。在本发明的一些实施例中,所述装置还包括:数据读取模块,用于若所述检索标识为空,则读取所述数据文件中存储的所有数据。在本发明的一些实施例中,所述行组元数据中包括最大值和最小值,行组过滤模块包括:第一对比模块,用于将目标值与所述待过滤列所在行组对应的行组元数据中的最大值和最小值进行对比,以判断是否为等值查询;行组过滤方式确定模块,用于通过是否为等值查询确定对所述待过滤列所在行组中的数据的过滤方式;过滤模块,用于根据所述过滤方式对所述待过滤列所在行组中的数据进行行组过滤。在本发明的一些实施例中,行组过滤方式确定模块包括:第一行组过滤模块,用于在判定为所述等值查询时,通过行组元数据中的检索标识对所述待过滤列所在行组中的数据进行行组过滤;第二行组过滤模块,用于在判定为非等值查询时,通过行组元数据中的最大值和最小值对所述待过滤列所在行组中的数据进行行组过滤。在本发明的一些实施例中,所述检索标识包括布隆过滤器,第一行组过滤模块包括:目标值查询模块,用于判断所述待过滤列所在行组的布隆过滤器中是否包含所述目标值;行组过滤控制模块,用于若所述待过滤列所在行组的布隆过滤器中不包含所述目标值,则将所述待过滤列所在行组过滤掉。在本发明的一些实施例中,在对所述待过滤列所在行组中的数据进行行组过滤之后,所述装置还包括:剩余数据获取模块,用于获取行组过滤后所述数据文件的剩余行组包含的数据;页过滤模块,用于对所述剩余行组包含的数据进行页过滤,并对页过滤后得到的剩余数据进行读取。在本发明的一些实施例中,每个行组包括多个列块,每个列块包括多个页,所述文件头中包括每页的页元数据,页过滤模块包括:页元数据获取模块,用于获取经过行组过滤后所述剩余行组包含的所有页的页元数据;第二对比模块,用于将目标值与待过滤列中每页的页元数据与进行对比,以确定所述待过滤列中每页的页元数据与所述目标值是否为等值查询;页过滤方式确定模块,用于通过所述待过滤列中每页的页元数据与所述目标值是否为等值查询,确定对所述待过滤列中每页包含的数据进行页过滤的过滤方式。在本发明的一些实施例中,页元数据包括最大值和最小值,页过滤方式确定模块包括:第一页过滤模块,用于若所述待过滤列中目标页的页元数据与所述目标值为非等值查询,则通过页元数据中的最大值和最小值对所述待过滤列中目标页包含的数据进行页过滤。在本发明的一些实施例中,页元数据包括布隆过滤器,页过滤方式确定模块包括:第二页过滤模块,用于若所述待过滤列中目标页的页元数据与所述目标值为所述等值查询,则通过页元数据中的布隆过滤器对所述待过滤列中目标页包含的数据进行页过滤。在本发明的一些实施例中,第二页过滤模块包括:目标值判断模块,用于判断页元数据的布隆过滤器中是否包含所述目标值;页过滤控制模块,用于若页元数据的布隆过滤器中不包含所述目标值,则将所述待过滤列包含的目标页过滤掉。在本发明的一些实施例中,在获取待处理的数据文件之前,所述装置还包括:数据写入模块,用于按照行组、列块以及页的格式将数据写入所述数据文件,并为所述数据文件生成文件头;其中,文件头包括对所述数据文件中的每个行组生成的行组元数据以及为所述数据文件中的每页生成的页元数据。在本发明的一些实施例中,数据写入模块包括:写入内存模块,用于根据每个列块中数据的类型选择数据写入方式,并通过所述数据写入方式将每个列块中的数据更新至内存;写入文件模块,用于当所述内存中数据的大小超过行组阈值时,则按照行组、列块以及页的格式将所述内存中的所有数据写入所述数据文件。在本发明的一些实施例中,所述列块包括多个页,写入文件模块包括:写入控制模块,用于将所述内存中的数据按页进行存储,并在每页中包含的数据满足预设条件时将每页包含的数据写入数据文件,直至将所有列块中的数据均按页写入至数据文件中为止。在本发明的一些实施例中,在每页中包含的数据满足预设条件时,所述装置还包括:元数据更新模块,用于更新每页对应的页元数据,并更新每个列块所在行组的行组元数据。在本发明的一些实施例中,元数据更新模块包括:更新控制模块,用于计算每个列块中数据的最大值和最小值,并将每个列块中的最新数据写入每个列块对应的行组元数据。在本发明实施方式的第三方面中,提供了一种电子设备,包括:处理器和存储器,所述存储器存储有可执行指令,所述处理器用于调用所述存储器存储的可执行指令执行如上述任意一项所述的数据处理方法。在本发明实施方式的第四方面中,提供了一种计算机可读存储介质,其上存储有程序,该程序被处理器执行时实现如上述任意一项所述的数据处理方法。根据本发明实施方式的数据处理方法和数据处理装置,一方面,通过为数据文件提供文件头,更新了数据存储方式,并通过行组元数据中的检索标识可对数据进行过滤,避免了对不需要的行组中的数据进行查询,减少了数据查询时的工作量,提高了操作效率;另一方面,由于避免了对不需要的行组进行查询,避免了误操作,提高了数据查询准确率,并且可减少资源消耗。附图说明通过参考附图阅读下文的详细描述,本发明示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本发明的若干实施方式,其中:图1示意性示出了根据本发明实施方式的一个示例性应用场景的框架示意图;图2示意性地示出了根据本发明一实施例的数据处理方法的流程图;图3示意性地示出了根据本发明一实施例的数据存储格式示意图;图4示意性地示出了根据本发明一实施例的数据写入过程示意图;图5示意性地示出了根据本发明一实施例的数据过滤过程示意图;图6示意性地示出了根据本发明一实施例的行组过滤过程示意图;图7示意性地示出了根据本发明一实施例的数据读取过程示意图;图8示意性示出了本发明实施例的数据处理装置的示意框图;图9示意性示出了本发明实施例的电子设备的一种方框图;以及图10示意性示出了本发明实施例的一种程序产品。在附图中,相同或对应的标号表示相同或对应的部分。具体实施方式下面将参考若干示例性实施方式来描述本发明的原理和精神。应当理解,给出这些实施方式仅仅是为了使本领域技术人员能够更好地理解进而实现本发明,而并非以任何方式限制本发明的范围。相反,提供这些实施方式是为了使本发明更加透彻和完整,并且能够将本发明的范围完整地传达给本领域的技术人员。本领域技术人员知道,本发明的实施方式可以实现为一种系统、装置、设备、方法或计算机程序产品。因此,本发明可以具体实现为以下形式,即:完全的硬件、完全的软件(包括固件、驻留软件、微代码等),或者硬件和软件结合的形式。根据本发明的实施方式,提出了一种数据处理方法和数据处理装置。此外,附图中的任何元素数量均用于示例而非限制,以及任何命名都仅用于区分,而不具有任何限制含义。下面参考本发明的若干代表性实施方式,详细阐释本发明的原理和精神。发明概述本发明人发现,parquet存储格式通过每一个列块的统计信息来过滤出符合查询条件的数据,当列块的数据分布比较均匀时,误判的概率较高而导致扫描原本不需要扫描的行组,过滤效率较低;另外,会导致大数据计算过程中会读取更多的文件内容,从而消耗更多的资源。基于上述内容,本发明的基本思想在于:获取待处理的数据文件,所述数据文件中的数据按照行组和列块的格式进行存储,所述数据文件包括文件头,所述文件头中包括行组元数据,所述行组元数据中包括与所述数据对应的检索标识;基于接收到的数据查询请求,根据所述行组元数据中包含的所述检索标识对所述数据文件中的数据进行过滤,以得到与所述数据查询请求对应的查询结果。因此,根据本发明的实施方式,可以根据行组元数据中的检索标识对数据文件中的数据进行过滤,从而显著地缩短了对数据进行过滤的时间,提高了数据过滤效率,从而提高了查询效率,实现了数据精准查询,并且降低了硬件资源消耗。在介绍了本发明的基本原理之后,下面具体介绍本发明的各种非限制性实施方式。应用场景总览需要注意的是,下述应用场景仅是为了便于理解本发明的精神和原理而示出,本发明的实施方式在此方面不受任何限制。相反,本发明的实施方式可以应用于适用的任何场景。首先参考图1,图1示出了本发明的实施方式的一个示例性应用场景的框架示意图。如图1所示,用户可以通过数据查询请求对服务器102中存储的数据文件中的数据进行查询,以将数据查询结果返回终端101中。本领域技术人员应该理解,图1所示的示意框架仅是本发明的实施方式可以在其中得以实现的一个示例。本发明实施方式的适用范围不受到该框架任何方面的限制。需要说明的是,服务器102可以是本地服务器或远程服务器,此外,服务器102还可以是其他能够提供存储功能或者处理功能的产品例如云服务器,本发明的实施方式在此不做特殊限定。应该理解的是,本发明的应用场景中,本发明实施方式的动作可以由服务器102执行,但是这些动作中的部分也可以由终端101执行,当然也可以部分由终端101执行、部分由服务器102执行。本发明在执行主体方面不受任何限制,只要执行了本发明实施方式所公开的动作即可。示例性方法下面结合上述的应用场景,参考图2来描述根据本发明示例性实施方式的数据处理方法。图2示出了根据本发明一实施例的数据处理方法的流程图,该数据处理方法可以包括以下步骤:步骤s210,获取待处理的数据文件,所述数据文件中的数据按照行组和列块的格式进行存储,所述数据文件包括文件头,所述文件头中包括行组元数据,所述行组元数据中包括与所述数据对应的检索标识;步骤s220,基于接收到的数据查询请求,根据所述行组元数据中包含的所述检索标识对所述数据文件中的数据进行过滤,以得到与所述数据查询请求对应的查询结果。根据本发明实施方式的数据处理方法和数据处理装置,一方面,通过为数据文件提供文件头,调整了数据存储方式,并通过行组元数据中的检索标识可对数据进行行组过滤,快速排除不需要查询的行组,减少了数据查询时的工作量,提高了操作效率;另一方面,由于避免了对不需要的行组进行查询,避免了误操作,提高了数据查询准确率,并且可减少资源消耗。接下来,结合附图对本示例性实施方式中的数据处理方法进行详细说明。在步骤s210中,获取待处理的数据文件,所述数据文件中的数据按照行组和列块的格式进行存储,所述数据文件包括文件头,所述文件头中包括行组元数据,所述行组元数据中包括与所述数据对应的检索标识。本示例性实施例中,数据文件可以为存储大量数据的hdfs文件,即hadoop分布式文件系统。数据文件中的数据可以按照kiwi存储格式进行存储,由图3中所示可得,kiwi存储格式的逻辑划分可包括如下几个模块:行组rowgroup,按照行将数据物理上划分为多个单元,每一个行组包含表的一定的行数,在一个hdfs文件中至少存储一个行组。列块columnchunk,在一个行组中每一列保存在一个列块中,行组中的所有列连续的存储在这个行组文件中,一个列块中的值都是相同类型的。页page,每一个列块划分为多个页,一个页是最小的逻辑存储的单位。kiwi存储格式是以功能程序包的使用方式来按照定义的存储格式进行数据写入和读取。在创建hive表时可引入该功能程序包,然后在表的创建参数中指定需要启用布隆过滤器用于等值过滤的列,具体使用方法可以通过代码’kiwi.enable.bloomfilters.column’=’id’来表示。在往此表数据导入时,使用maprekiwioutputformat定义的格式和写入方法来完成数据的导入,并在文件元数据中增加对指定列创建的布隆过滤器。按照kiwi存储格式存储的每一个数据文件均对应一个文件头,该文件头指的即是文件元数据,文件元数据中包括行组元数据以及页元数据,行组元数据和页元数据中均包括检索标识以及偏移信息。此处的偏移信息指的是某一个行组的起始数据的在该数据文件的偏移位置,例如从100个字节读取第一个行组,从第500个字节读取第一个行组的第5个页,则第100个字节和第500个字节为偏移信息。继续参考图3可知,存储文件元数据的footer部分中包括一个filemetadata,filemetadata中具体包括每一个行组的行组元数据,即rowgroup0metadata、rowgroup1metadata等等。rowgroup0metadata中包括行组rowgroup、列块columnchunk以及columnmetadata,columnmetadata中包括最大值、最小值和布隆过滤器bloomfilter。本示例性实施例中的检索标识指的即是增加的布隆过滤器。相对于现有技术中的parquet存储格式而言,kiwi存储格式在数据文件的文件头的rowgroupmetadata中增加了布隆过滤器,从而改变了存储格式的文件头,并且文件头中的检索标识可用于hadoopjob计算,进而在读取数据文件中的数据时,快速过滤掉不符合查询条件的数据。除此之外,相对于现有技术中的parquet存储格式而言,kiwi存储格式在数据文件的pageheader中增加了页元数据,从而可以利用写入pageheader的页元数据进行二次过滤,相比于parquet存储格式仅通过行组元数据过滤不符合查询条件的数据而言,kiwi存储格式能更加精确地定位符合查询条件数据的位置,从而减少数据文件的读取。在确定存储格式后,可按照kiwi存储格式将数据写入数据文件中,数据写入数据文件的具体过程可以参考图4所示。在进行数据写入时,可按照行组、列块以及页的格式将数据写入所述数据文件,并为所述数据文件生成文件头。由于一个数据文件中可包括多个行组、一个行组可包括多个列块,一个列块中可包括多个页,因此为数据文件生成的文件头中可包括对所述数据文件中的每个行组生成的行组元数据,除此之外文件头中还包括为所述数据文件中的每页生成的页元数据。行组元数据中可包括数据的最大值、最小值以及检索标识即布隆过滤器,页元数据中也可包括数据的最大值、最小值以及检索标识即布隆过滤器。布隆过滤器实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法。布隆过滤器使用k个哈希函数将元素分别映射成k个占用空间少的对象。一个元素只有k个哈希映射的位向量位置全部为1才表示此元素出现在集合中。具体地,按照行组、列块以及页的格式将数据写入所述数据文件包括:步骤s401,根据每个列块中数据的类型选择数据写入方式,并通过所述数据写入方式将每个列块中的数据更新至内存。也就是说,kiwi存储格式中的写入函数recordwriter根据每个列块中的数据类型选择对应的数据写入方式,此处的数据写入方式可以理解为每一列对应的写入函数columnwriter,该columnwriter用于负责将每一列中需要写入的数据更新至内存中,以暂时缓存在内存中。columnwriters更新每一列内存中的数据,每一列增加一个数据,则会对每一列数据进行统计和计算,计算该列数据的最大值和最小值,以及将更新的数据插入程序在初始化时创建的布隆过滤器中。步骤s402,判断内存中数据的大小是否超过行组阈值,并在所述内存中数据的大小超过行组阈值时,按照行组、列块以及页的格式将所述内存中的所有数据写入所述数据文件。在此过程中,可实时统计内存中缓存的数据的大小,以判断数据大小是否大于行组阈值。若判断内存中数据大小没有超过行组阈值,则返回上层更新数据成功,并继续向内存中写入新的数据。在内存中缓存的数据的大小满足事先设置的行组阈值时,即可以按照组、列块以及页的格式将内存中缓存的所有数据写入数据文件中。行组阈值可以根据实际需求进行设置,例如设置为1gb或者是其他数值等等。在将内存中的数据写入数据文件时,可将所述内存中的数据按页进行存储,并在每页中包含的数据满足预设条件时将每页包含的数据写入数据文件,直至将所有列块中的数据均按页写入至数据文件中为止。此处的预设条件用于表示定义的每页中数据的大小,例如可以为600mb或者其他数值等等。每个行组由多个页组成,columnwriters按照定义的格式将数据按页存储,当达到了page定义的大小,则将数据转交给页写入函数pagewriter,以使pagewriter将每页的数据写入数据文件。除此之外,在每页中包含的数据满足预设条件的同时,可更新每页对应的页元数据,并更新每个列块所在行组的行组元数据。具体可计算每个列块中数据的最大值和最小值,并将每个列块中的最新数据写入每个列块对应的行组元数据。具体地,pagewriter更新该pageheader中的页元数据,即每一列数据的最小值min、最大值max以及布隆过滤器数据结构,同时将该页的pagedata及pageheader写入数据文件,直至将内存中的每一列数据按页存储到数据文件,并更新每一列所在的行组的行组元数据为止。当内存中的数据完全写入数据文件后,表明该行组数据已经写完,此时可更新该行组的标签信息meta,如该行组有多少行,行组元数据汇总计算等。如果close方法被调用,则表明该数据文件只有一个行组,所有数据已经被写入数据文件,则更新数据文件的文件元数据;当接收到closefile方法的调用,则说明数据已经更新完毕,则将内存中所有行组的行组元数据更新到文件末尾,即定义文件格式的footer部分。如果close方法没有被调用,则按照上述方法继续下一个行组的数据写入流程,以生成数据文件。此处的待处理的数据文件可以理解为待读取、待查询、待过滤的数据文件等等。接下来,在步骤s220中,基于接收到的数据查询请求,根据所述行组元数据中包含的所述检索标识对所述数据文件中的数据进行过滤,以得到与所述数据查询请求对应的查询结果。本示例性实施例中,数据文件为步骤s210中获得的待处理的数据文件。数据查询请求可具体通过hivesql来实现。在进行数据查询时,hive可以对sql(structuredquerylanguage,结构化查询语言)语句进行解析,以将sql语句解析为与sql语句对应的mapreduce任务,该mapreduce任务可调用对应的程序包来进行数据读取。例如使用实现maprekiwiinputformat类定义的格式和读取方法对待处理的数据文件进行读取。由于数据文件中包括大量数据,为了避免对不需要的行组的数据进行扫描和查询,提高数据查询效率,可根据行组元数据中包含的检索标识对数据文件进行过滤,准确得到与数据查询请求对应的查询结果。参考图5所示,步骤s220中根据所述行组元数据中包含的所述检索标识对所述数据文件中的数据进行过滤的具体过程包括步骤s51以及步骤s52,详细阐述如下:在步骤s51中,判断所述检索标识是否满足过滤条件,并在所述检索标识满足所述过滤条件时从所述数据文件的所有列块中确定待过滤列。在本发明的一个实施例中,过滤条件用于从数据文件的所有列块中筛选出与数据查询请求对应的查询结果,步骤s51的具体实现过程包括如下步骤:步骤s511,在确定与所述数据查询请求关联的mapreduce任务中开启过滤设置且所述检索标识不为空时,判定所述检索标识满足所述过滤条件。在该步骤中,开启过滤设置指的是判断mapreduce任务中开启过滤条件的配置,具体可以根据系统中其他计算层传给kiwi的参数获取到一个配置项,以根据配置项中的设置确定是否开启过滤设置。如果判断mapreduce任务中开启了过滤条件的配置,则可进一步判断检索标识是否为空。检索标识指的是行组元数据中添加的布隆过滤器。如果检索标识不为空,则可以确定检索标识满足过滤条件。在确定检索标识满足过滤条件之后,还可以从布隆过滤器中获取谓词下推中的谓词。谓词下推指的是一种逻辑优化,优化器可以将谓词过滤下推到数据源,通过将一些过滤条件尽可能的在最底层执行,从而使物理执行跳过无关数据,可以减少每一层交互的数据量从而提升性能。可例如“selectcount(1)fromajoinbona.id=b.idwherea.a>5andb.b<100”sql查询中,在处理join操作之前需要首先对a和b执行tablescan操作,然后再进行join操作,再执行过滤,最后计算聚合函数返回,但是如果把过滤条件a.a>10和b.b<100分别移到a表的tablescan和b表的tablescan的时候执行,可以大大降低join操作的输入数据。本示例性实施例中,获取的谓词可以为判断条件中的条件判断符,这些条件判断符包括但不限于“=、>、<、!=”等符号。通过这些谓词中的条件判断符,可快速过滤掉不符合条件的行组。步骤s512,若所述检索标识为空,则读取所述数据文件中存储的所有数据。在该步骤中,如果检索标识为空,则确定不满足过滤条件,即不存在过滤设置,因此可以读取数据文件中存储的所有数据。在读取数据文件中的所有数据时,可按照页进行读取。需要说明的是,步骤s511和步骤s512的执行顺序既可以如图5中所示的先执行步骤s511,再执行步骤s512;也可以先执行步骤s512,再执行步骤s511;或者同时执行步骤s511和步骤s512,本示例性实施例中对此不作特殊限定。继续参照图5所示,在步骤s52中,对所述待过滤列所在行组中的数据进行行组过滤。本步骤中,待过滤列可以为所有列块中的任意一个,可根据查询顺序依次进行更新。如果确定了待过滤列,则可以找出待过滤列所在的行组。例如,待过滤列为第1列,第1列所在行组为行组0。行组过滤用于对数据文件中的数据进行初步过滤,从而加快查询速度和效率。步骤s52的具体过程参考图6所示,具体包括:步骤s601,将目标值与所述待过滤列所在行组的行组元数据进行对比,以判断是否为等值查询。目标值例如可以为数据查询请求中要查询的id值,可以通过sql语句来表示,其中可包括上述的谓词即条件判断符,例如目标值可表示为id>10或者是id=15等等。等值查询可以理解为判断目标值与待过滤列所在行组的行组元数据相等的查询条件。可例如,查询语句中包括的目标值为id>15,第1列所在行组即行组0中包含的列块的id为0~10,则为非等值查询。查询语句中包括的目标值为id=10,第1列所在行组即行组0中包含的列块的id为0~10,则为等值查询。步骤s602,通过是否为等值查询确定对所述待过滤列所在行组中的数据的过滤方式。其中,过滤方式可以包括采用检索标识过滤以及采用最大值和最小值过滤中的任意一种。具体地,在为等值查询时,可将过滤方式确定为采用检索标识过滤。在为非等值查询时,可将过滤方式确定为采用最大值和最小值过滤。步骤s603,根据所述过滤方式对所述待过滤列所在行组中的数据进行行组过滤。例如,查询语句中包括的目标值为id>10,第1列所在行组即行组0中包含的列块的id为0~10,则为非等值查询,可以按照第一列数据中的最大值和最小值对行组0中的数据进行过滤。若查询语句中包括的目标值为id=10,第1列所在行组即行组0中包含的列块的id为0~10,则为等值查询,此时可以根据布隆过滤器对行组0中的数据进行查询,以确定是否需要过滤掉行组0。进一步地,步骤s603中通过布隆过滤器判断是否过滤掉行组的具体步骤包括:判断所述待过滤列所在行组的布隆过滤器中是否包含所述目标值;若所述待过滤列所在行组的布隆过滤器中不包含所述目标值,则将所述待过滤列所在行组过滤掉。可例如,查询语句中包括的目标值为id=10,若待过滤的第1列所在的行组即行组0包括的布隆过滤器中不包含id=10,则可以直接将行组0中的数据过滤掉。在将行组0过滤掉的同时,不需要查询行组0中包括的列块和页,避免了对不符合条件的行组进行查询,提高了数据查询效率。若待过滤的第1列所在的行组即行组0包括的布隆过滤器中包含id=10,则可以将行组0中的数据保留。本示例性实施例中,通过为文件头包括的行组元数据中提供检索标识,并通过检索标识对等值查询情况下的数据文件进行行组过滤,相对于最大值和最小值方式而言,提高了过滤效率。通过对每一个待过滤列所在的行组进行行组过滤,可以过滤掉一部分不符合条件的行组,以减少后续不需要扫描的行组,减少了数据量,从而提高了查询效率。由于减少了行组,可在一定程度上避免误操作和误扫描,从而实现精准查询,并且可减少硬件资源消耗。在此基础上,在对所述待过滤列所在行组中的数据进行行组过滤之后,可得到多个剩余行组。此时可获取行组过滤后所述数据文件的剩余行组包含的数据;对所述剩余行组包含的数据再次进行页过滤,并对页过滤后得到的剩余数据进行读取。由于每一列中包括多个页,而且并不是每一页中的数据都符合数据查询请求,因此可对每个剩余行组中包括的所有页进行筛选,得到与数据查询请求对应的查询结果。通过对数据进行页过滤并读取页过滤后的剩余数据,能够减小文件读取量,避免了更多的资源消耗。由于每个行组包括多个列块,每个列块包括多个页,所述文件头中包括每页的页元数据,对所述剩余行组包含的数据进行页过滤包括:获取经过行组过滤后所述剩余行组包含的所有页的页元数据;将目标值与待过滤列中每页的页元数据进行对比,以确定所述待过滤列中每页的页元数据与所述目标值是否为等值查询;通过所述待过滤列中每页的页元数据与所述目标值是否为等值查询,确定对所述待过滤列中每页包含的数据进行页过滤的过滤方式。页元数据中也可以包括每一页数据的最大值、最小值以及检索标识,目标值依旧为数据查询请求中包含的查询值。每一列可包括多个页,因此待过滤列可包括多个不同的页元数据,例如待过滤列为第1列,其中包括第1页、第2页、第3页、第4页。将目标值与待过滤列包含的每页的页元数据进行对比,具体可将目标值与每页的页元数据中的最大值以及最小值等进行对比,以确定所述待过滤列中每页的页元数据与所述目标值是否为等值查询。假设第1列包含的所有页的页元数据中,第1页对应id<5,第2页对应id=6,第3页对应id>8,第4页对应id=10。若查询语句中包括的目标值为id=10,此时可以认为是等值查询。查询语句中包括的目标值为id>10,此时可以认为是非等值查询。与行组过滤类似地,在为等值查询时,可将过滤方式确定为采用检索标识过滤。在为非等值查询时,可将过滤方式确定为采用最大值和最小值过滤。具体而言,若所述待过滤列中目标页的页元数据与所述目标值为非等值查询,则通过页元数据中的最大值和最小值对目标页包含的数据进行页过滤。若所述待过滤列中目标页的页元数据与所述目标值为所述等值查询,则通过页元数据中的布隆过滤器对所述待过滤列中目标页包含的数据进行页过滤。目标页可以为待过滤列包括的任意一页,并且可以随意切换,直至将数据文件中的所有页都过滤完为止。例如,查询语句中包括的目标值为id=10,若目标页为第4页,则可以通过页元数据中的布隆过滤器对所述第4页包含的数据进行页过滤。详细地,可先判断第4页对应的页元数据的布隆过滤器中是否包含所述目标值;若页元数据的布隆过滤器中不包含所述目标值,则将所述待过滤列包含的目标页过滤掉。例如,数据查询语句中包括的目标值为id=10,若待过滤的第1列包含的第4页对应的页元数据包括的布隆过滤器中包含id=10,则可以将第4页中的数据保留。若待过滤的第1列所在包含的第4页对应的布隆过滤器中不包含id=10,则可以将第4页中的数据过滤掉。再例如,查询语句中包括的目标值为id>10,假设第1列包含的所有页的页元数据中,第1页对应id<5,第2页对应id=6,第3页对应id>8,第4页对应id=10。若目标列为第2页,则可以确定为非等值查询,此时可以通过页元数据中的最大值和最小值对所述第2页包含的数据进行页过滤。由于最大值和最小值与目标值不匹配,则可将第2页中包含的数据过滤掉。另外,还可以不判断是否为等值查询,直接根据页元数据中的最大值和最小值对数据文件进行页过滤,以得到查询结果。本示例性实施例中的方法,可以根据对满足条件的行组中的所有页进行过滤,经过双重过滤能够更加精准地定位到符合数据查询请求的数据的位置,减少了数据文件的读取量,提高了效率。在过滤完之后,可以得到剩余的页,此时可以将剩余页的元数据和剩余行组的行组元数据进行重组更新、以便于后续数据读取。进一步地,可根据剩余行组和剩余页的元数据,以页为单位,通过函数pageoffset读取数据文件中的数据,以得到与数据查询请求对应的查询结果。再参考图7所示对整个数据处理过程进行详细描述。具体包括步骤s701~步骤s707,其中:在步骤s701中,读取数据文件的文件元数据。具体从文件头footer部分读取。在步骤s702中,从footer部分读取行组元数据。在步骤s703中,判断是否开启过滤设置,若未开启,则转至步骤s707;若开启,则转至步骤s704。在步骤s704中,通过行组元数据中的布隆过滤器或最大值、最小值进行行组过滤。例如,在为等值查询时,使用布隆过滤器进行行组过滤;在为非等值查询时,使用最大值、最小值进行行组过滤。在步骤s705中,对剩余行组进行页过滤。在步骤s706中,对剩余行组和剩余页进行重组。在步骤s707中,按页读取数据文件中的数据。由此可知,图7中所示的数据处理方法能够达到以下有益效果:通过为文件头包括的行组元数据中提供检索标识,并通过检索标识对等值查询情况下的数据文件进行行组过滤,相对于最大值和最小值方式而言,提高了过滤效率。通过对每一个待过滤列所在的行组进行行组过滤,可以过滤掉一部分不符合条件的行组,以减少后续不需要扫描的行组,减少了数据量,从而提高了查询效率。对每个剩余行组中包括的所有页进行筛选,得到与数据查询请求对应的查询结果。通过对数据进行页过滤,能够更加精确地定位符合数据查询请求的数据的位置,而只读取页过滤后的剩余数据,能够减小文件读取量,避免了更多的资源消耗。示例性装置接下来,参考图8对本发明示例性实施方式的数据处理装置进行说明。如图8所示,数据处理装置800可以包括:文件获取模块801、数据查询模块802。其中:文件获取模块801,用于获取待处理的数据文件,所述数据文件中的数据按照行组和列块的格式进行存储,所述数据文件包括文件头,所述文件头中包括行组元数据,所述行组元数据中包括与所述数据对应的检索标识;数据查询模块802,用于基于接收到的数据查询请求,根据所述行组元数据中包含的所述检索标识对所述数据文件中的数据进行过滤,以得到与所述数据查询请求对应的查询结果。在本发明的一些实施例中,数据查询模块包括:条件判断模块,用于判断所述检索标识是否满足过滤条件,并在所述检索标识满足所述过滤条件时从所述数据文件的所有列块中确定待过滤列;行组过滤模块,用于对所述待过滤列所在行组中的数据进行行组过滤。在本发明的一些实施例中,条件判断模块包括:判断控制模块,用于在确定与所述数据查询请求关联的mapreduce任务中开启过滤设置且所述检索标识不为空时,判定所述检索标识满足所述过滤条件。在本发明的一些实施例中,所述装置还包括:数据读取模块,用于若所述检索标识为空,则读取所述数据文件中存储的所有数据。在本发明的一些实施例中,所述行组元数据中包括最大值和最小值,行组过滤模块包括:第一对比模块,用于将目标值与所述待过滤列所在行组对应的行组元数据中的最大值和最小值进行对比,以判断是否为等值查询;行组过滤方式确定模块,用于通过是否为等值查询确定对所述待过滤列所在行组中的数据的过滤方式;过滤模块,用于根据所述过滤方式对所述待过滤列所在行组中的数据进行行组过滤。在本发明的一些实施例中,行组过滤方式确定模块包括:第一行组过滤模块,用于在判定为所述等值查询时,通过行组元数据中的检索标识对所述待过滤列所在行组中的数据进行行组过滤;第二行组过滤模块,用于在判定为非等值查询时,通过行组元数据中的最大值和最小值对所述待过滤列所在行组中的数据进行行组过滤。在本发明的一些实施例中,所述检索标识包括布隆过滤器,第一行组过滤模块包括:目标值查询模块,用于判断所述待过滤列所在行组的布隆过滤器中是否包含所述目标值;行组过滤控制模块,用于若所述待过滤列所在行组的布隆过滤器中不包含所述目标值,则将所述待过滤列所在行组过滤掉。在本发明的一些实施例中,在对所述待过滤列所在行组中的数据进行行组过滤之后,所述装置还包括:剩余数据获取模块,用于获取行组过滤后所述数据文件的剩余行组包含的数据;页过滤模块,用于对所述剩余行组包含的数据进行页过滤,并对页过滤后得到的剩余数据进行读取。在本发明的一些实施例中,每个行组包括多个列块,每个列块包括多个页,所述文件头中包括每页的页元数据,页过滤模块包括:页元数据获取模块,用于获取经过行组过滤后所述剩余行组包含的所有页的页元数据;第二对比模块,用于将目标值与待过滤列中每页的页元数据与进行对比,以确定所述待过滤列中每页的页元数据与所述目标值是否为等值查询;页过滤方式确定模块,用于通过所述待过滤列中每页的页元数据与所述目标值是否为等值查询,确定对所述待过滤列中每页包含的数据进行页过滤的过滤方式。在本发明的一些实施例中,页元数据包括最大值和最小值,页过滤方式确定模块包括:第一页过滤模块,用于若所述待过滤列中目标页的页元数据与所述目标值为非等值查询,则通过页元数据中的最大值和最小值对所述待过滤列中目标页包含的数据进行页过滤。在本发明的一些实施例中,页元数据包括布隆过滤器,页过滤方式确定模块包括:第二页过滤模块,用于若所述待过滤列中目标页的页元数据与所述目标值为所述等值查询,则通过页元数据中的布隆过滤器对所述待过滤列中目标页包含的数据进行页过滤。在本发明的一些实施例中,第二页过滤模块包括:目标值判断模块,用于判断页元数据的布隆过滤器中是否包含所述目标值;页过滤控制模块,用于若页元数据的布隆过滤器中不包含所述目标值,则将所述待过滤列包含的目标页过滤掉。在本发明的一些实施例中,在获取待处理的数据文件之前,所述装置还包括:数据写入模块,用于按照行组、列块以及页的格式将数据写入所述数据文件,并为所述数据文件生成文件头;其中,文件头包括对所述数据文件中的每个行组生成的行组元数据以及为所述数据文件中的每页生成的页元数据。在本发明的一些实施例中,数据写入模块包括:写入内存模块,用于根据每个列块中数据的类型选择数据写入方式,并通过所述数据写入方式将每个列块中的数据更新至内存;写入文件模块,用于当所述内存中数据的大小超过行组阈值时,则按照行组、列块以及页的格式将所述内存中的所有数据写入所述数据文件。在本发明的一些实施例中,所述列块包括多个页,写入文件模块包括:写入控制模块,用于将所述内存中的数据按页进行存储,并在每页中包含的数据满足预设条件时将每页包含的数据写入数据文件,直至将所有列块中的数据均按页写入至数据文件中为止。在本发明的一些实施例中,在每页中包含的数据满足预设条件时,所述装置还包括:元数据更新模块,用于更新每页对应的页元数据,并更新每个列块所在行组的行组元数据。在本发明的一些实施例中,元数据更新模包括:更新控制模块,用于计算每个列块中数据的最大值和最小值,并将每个列块中的最新数据写入每个列块对应的行组元数据。示例性电子设备接下来,介绍根据本发明的另一示例性实施方式的用于数据处理的电子设备。所属
技术领域
:的技术人员能够理解,本发明的各个方面可以实现为系统、方法或程序产品。因此,本发明的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。在一些可能的实施方式中,根据本发明的数据处理可以至少包括至少一个处理单元、以及至少一个存储单元。其中,所述存储单元存储有程序代码,当所述程序代码被所述处理单元执行时,使得所述处理单元执行本说明书上述“示例性方法”部分中描述的根据本发明各种示例性实施方式的步骤。例如,所述处理单元可以执行如图2中所示的步骤:步骤s210,获取待处理的数据文件,所述数据文件中的数据按照行组和列块的格式进行存储,所述数据文件包括文件头,所述文件头中包括行组元数据,所述行组元数据中包括与所述数据对应的检索标识;步骤s220,基于接收到的数据查询请求,根据所述行组元数据中包含的所述检索标识对所述数据文件中的数据进行过滤,以得到与所述数据查询请求对应的查询结果。下面参照图9来描述根据本发明的这种实施方式的用于数据处理的电子设备900。图9所示的数据处理设备900仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。如图9所示,数据处理设备900以通用计算设备的形式表现。数据处理设备900的组件可以包括但不限于:上述至少一个处理单元901、上述至少一个存储单元902、连接不同系统组件(包括存储单元902和处理单元901)的总线903。总线903表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器、外围总线、图形加速端口、处理器或者使用多种总线结构中的任意总线结构的局域总线。存储单元902可以包括易失性存储器形式的可读介质,例如随机存取存储器(ram)9021和/或高速缓存存储器9022,还可以进一步包括只读存储器(rom)9023。存储单元902还可以包括具有一组(至少一个)程序模块9024的程序/实用工具9025,这样的程序模块9024包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。数据处理设备900也可以与一个或多个外部设备904(例如键盘、指向设备、蓝牙设备等)通信,还可与一个或者多个使得用户能与数据处理设备900交互的设备通信,和/或与使得数据处理设备900能与一个或多个其它计算设备进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(i/o)接口905进行。并且,数据处理设备900还可以通过网络适配器906与一个或者多个网络(例如局域网(lan),广域网(wan)和/或公共网络,例如因特网)通信。如图所示,网络适配器906通过总线903与数据处理设备900的其它模块通信。应当明白,尽管图9中未示出,可以结合数据处理设备900使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、raid系统、磁带驱动器以及数据备份存储系统等。示例性介质接下来,对本发明示例性实施方式的介质进行说明。在一些可能的实施方式中,本发明的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当所述程序产品在终端设备上运行时,所述程序代码用于使所述终端设备执行本说明书上述“示例性方法”部分中描述的根据本发明各种示例性实施方式的数据处理方法中的步骤,例如,所述程序产品可以执行如图2中所示的步骤。所述程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。如图10所示,描述了根据本发明的实施方式的用于数据处理的程序产品1000,其可以采用便携式紧凑盘只读存储器(cd-rom)并包括程序代码,并可以在终端设备,例如个人电脑上运行。然而,本发明的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、有线、光缆、rf等等,或者上述的任意合适的组合。可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如java、c++等,还包括常规的过程式程序设计语言—诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络——包括局域网(lan)或广域网(wan)—连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。应当注意,尽管在上文详细描述中提及了数据处理设备的若干装置或子装置,但是这种划分仅仅并非强制性的。实际上,根据本发明的实施方式,上文描述的两个或更多装置的特征和功能可以在一个装置中具体化。反之,上文描述的一个装置的特征和功能可以进一步划分为由多个装置来具体化。此外,尽管在附图中以特定顺序描述了本发明方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。虽然已经参考若干具体实施方式描述了本发明的精神和原理,但是应该理解,本发明并不限于所公开的具体实施方式,对各方面的划分也不意味着这些方面中的特征不能组合以进行受益,这种划分仅是为了表述的方便。本发明旨在涵盖所附权利要求的精神和范围内所包括的各种修改和等同布置。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1