CN108874897A - 数据查询方法及装置 - Google Patents
数据查询方法及装置 Download PDFInfo
- Publication number
- CN108874897A CN108874897A CN201810501501.6A CN201810501501A CN108874897A CN 108874897 A CN108874897 A CN 108874897A CN 201810501501 A CN201810501501 A CN 201810501501A CN 108874897 A CN108874897 A CN 108874897A
- Authority
- CN
- China
- Prior art keywords
- target data
- line
- data block
- sum
- length
- 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
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本公开涉及一种数据查询方法及装置,包括:获取目标数据对应的第一行偏移量和第一长度;根据所述第一行偏移量和第一长度及所述各个数据块的行数,确定所述目标数据对应的目标数据块;根据所述第一行偏移量和第一长度及所述各个数据块的行数,确定所述目标数据在所述目标数据块中对应的第二行偏移量和第二长度;向所述目标数据块所对应的执行器Executor发送目标数据获取指令,所述目标数据获取指令包括所述目标数据块的标识信息,及所述目标数据块对应的所述第二行偏移量及所述第二长度。本公开实施例提供的数据查询方法及装置能够根据用户需求直接从目标HDFS文件中获取指定的数据,实现分页查询,并可以提高数据查询效率,减少对内存的消耗。
Description
技术领域
本公开涉及大数据技术领域,尤其涉及一种数据查询方法及装置。
背景技术
Spark SQL是一种基于Spark的分布式SQL引擎。
在通过Spark SQL(一种基于Spark的分布式SQL引擎)从HDFS(HadoopDistributed File System,分布式文件系统)中读取数据时,相关技术仅能实现查询前N行数据,而不能按照用户需求查询前N行至前N+M行的数据,因此无法实现分页查询。
发明内容
有鉴于此,本公开提出了一种数据查询的方法,能够根据用户需求直接从HDFS中获取指定的数据,实现分页查询,并可以提高数据查询效率,减少对内存的消耗。
根据本公开的一方面,提供了一种数据查询方法,应用于驱动器Driver,所述方法包括:
获取目标数据对应的第一行偏移量和第一长度,其中,所述第一行偏移量指示目标数据在目标HDFS文件中的起始行,所述第一长度为所述目标数据的行数;
获取所述目标HDFS文件中各个数据块的行数;
根据所述第一行偏移量和第一长度及所述各个数据块的行数,确定所述目标数据对应的目标数据块;
根据所述第一行偏移量和第一长度及所述各个数据块的行数,确定所述目标数据在所述目标数据块中对应的第二行偏移量和第二长度;向所述目标数据块所对应的执行器Executor发送目标数据获取指令,所述目标数据获取指令包括所述目标数据块的标识信息,及所述目标数据块对应的所述第二行偏移量及所述第二长度。
根据本公开的另一方面,提供了一种数据查询方法,应用于执行器Executor,所述方法包括:
接收来自驱动器Driver的目标数据获取指令,所述目标获取指令中包括目标数据块的标识信息,及所述目标数据块对应的第二行偏移量及第二长度;
从目标HDFS文件中获取所述目标数据块;
根据所述目标数据块对应的所述第二行偏移量及所述第二长度从所述目标数据块中获取所述目标数据。
根据本公开的另一方面,提供了一种数据查询装置,应用于驱动器Driver,所述装置包括:
第一获取模块,用于获取目标数据对应的第一行偏移量和第一长度,其中,所述第一行偏移量指示目标数据在目标HDFS文件中的起始行,所述第一长度为所述目标数据的行数;
第二获取模块,用于获取所述目标HDFS文件中各个数据块的行数;
第一确定模块,用于根据所述第一行偏移量和第一长度及所述各个数据块的行数,确定所述目标数据对应的目标数据块;
第二确定模块,用于根据所述第一行偏移量和第一长度及所述各个数据块的行数,确定所述目标数据在所述目标数据块中对应的第二行偏移量和第二长度;
发送模块,用于向所述目标数据块所对应的执行器Executor发送目标数据获取指令,所述目标数据获取指令包括所述目标数据块的标识信息,及所述目标数据块对应的所述第二行偏移量及所述第二长度。
根据本公开的另一方面,提供了一种数据查询装置,应用于执行器Executor,所述装置包括:
接收模块,用于接收来自驱动器Driver的目标数据获取指令,所述目标获取指令中包括目标数据块的标识信息,及所述目标数据块对应的第二行偏移量及第二长度;
第一获取模块,用于从目标HDFS文件中获取所述目标数据块;
第二获取模块,用于根据所述目标数据块对应的所述第二行偏移量及所述第二长度从所述目标数据块中获取所述目标数据。
这样一来,由于Driver可以确定目标HDFS文件中目标数据所在的目标数据块,及目标数据块对应的第二偏移量及第二长度,进而使得Executor可以直接从目标HDFS文件中获取目标数据块,并根据第二偏移量及第二长度从目标数据块中获取目标数据,而无需获取目标HDFS文件中的全部数据块,进而对全部数据块中的数据进行遍历以获取目标数据,因此根据本公开实施例的数据查询方法及装置,可以提高数据查询效率,减少对内存的消耗。
根据下面参考附图对示例性实施例的详细说明,本公开的其它特征及方面将变得清楚。
附图说明
包含在说明书中并且构成说明书的一部分的附图与说明书一起示出了本公开的示例性实施例、特征和方面,并且用于解释本公开的原理。
图1示出根据本公开一实施例的一种数据查询方法的流程图;
图2示出根据本公开一实施例的一种数据查询方法的流程图;
图3示出根据本公开一实施例的一种数据查询方法的流程图;
图4示出根据本公开一实施例的一种数据查询方法的流程图;
图5示出根据本公开一实施例的一种数据查询方法的流程图;
图6示出根据本公开一实施例的一种数据查询方法的流程图;
图7示出根据本公开一实施例的一种数据查询方法的流程图;
图8示出根据本公开一实施例的一种数据查询方法的流程图;
图9示出根据本公开一实施例的一种数据查询方法的流程图;
图10示出根据本公开一实施例的一种数据查询装置的结构框图;
图11示出根据本公开一实施例的一种数据查询装置的结构框图;
图12是根据一示例性实施例示出的一种数据查询装置的硬件结构框图。
具体实施方式
以下将参考附图详细说明本公开的各种示例性实施例、特征和方面。附图中相同的附图标记表示功能相同或相似的元件。尽管在附图中示出了实施例的各种方面,但是除非特别指出,不必按比例绘制附图。
在这里专用的词“示例性”意为“用作例子、实施例或说明性”。这里作为“示例性”所说明的任何实施例不必解释为优于或好于其它实施例。
另外,为了更好的说明本公开,在下文的具体实施方式中给出了众多的具体细节。本领域技术人员应当理解,没有某些具体细节,本公开同样可以实施。在一些实例中,对于本领域技术人员熟知的方法、手段、元件和电路未作详细描述,以便于凸显本公开的主旨。
图1示出根据本公开一实施例的一种数据查询方法的流程图,该方法可以应用于Spark SQL引擎的驱动器Driver。Spark SQL引擎中包括驱动器Driver和执行器Executor,其中,Driver用于对进程的调度及任务分配等进行管理,Executor是工作节点上的进程,可以对分配给该进程的任务进行处理。如图1所示,该数据查询方法可以包括:
步骤101、获取目标数据对应的第一行偏移量和第一长度,其中,所述第一行偏移量指示目标数据在目标HDFS文件中的起始行,所述第一长度为所述目标数据的行数。
其中,上述第一行偏移量可以表示目标数据在目标HDFS文件中对应的行的偏移量,也即可以用于指示目标数据在目标HDFS文件中的起始行。其中用于存储数据的目标HDSF文件至少包括一个数据块。举例来说,若数据以Carbondata文件格式存储,则上述数据块可以为Blocklet,若数据以orc等文件格式存储,则上述数据块可以为stripe。每个数据块包括多行数据,上述第一长度可以为目标数据的行数。Driver可以在获取到用于查询目标数据的查询语句后,对查询语句进行解析,以从查询语句中获取第一行偏移量及第一长度。
在一个示例中,查询目标数据的查询语句可以为:
SELECT*FROM carbonTable LIMIT offset,length
其中,carbonTable可以表示待读取目标数据的目标HDFS文件,offset可以表示第一行偏移量,length可以表示第一长度。Driver可以对上述查询语句进行解析,以获得offset及length。
例如:查询语句为SELECT*FROM carbonTable LIMIT 10000,20,表示从carbonTable文件中查询第10001行至第100020行共20行的数据,也即目标数据为carbonTable中第10001行至第100020行共20行的数据。
步骤102、获取所述目标HDFS文件中各个数据块的行数。
Driver可以获取各个数据块的统计信息(举例来说,各个数据块的统计信息可以存储在Footer页脚中,Driver可以从Footer页脚中获取各个数据块的统计信息),并可以从统计信息中获取各个数据块的行数,该数据块的行数为该数据块中已经存储数据的行数。
步骤103、根据所述第一行偏移量和第一长度及所述各个数据块的行数,确定所述目标数据对应的目标数据块。
举例来说,上述目标HDFS文件可以包括多个数据块,目标数据块可以为上述多个数据块中用于存储第一行偏移量和第一长度所标识的目标数据的数据块。Driver可以根据各个数据块的行数,及第一行偏移量及第一长度确定用于存储目标数据的目标数据块。
举例来说,第一行偏移量为10000,第一长度为20,也即目标数据为第10001行至第10020行的数据。假设各个数据块的行数均为8000(实际上,各个数据块的行数也可以不同),也即第1个数据块从第1行至第8000行存储的是目标HDFS文件中第1行至第8000行的数据,第2个数据块从第1行至第8000行存储的是目标HDFS文件中第8001行至第16000行的数据,则目标数据存储在第2个数据块中,Driver可以确定第2个数据块为目标数据块。
步骤104、根据所述第一行偏移量和第一长度及所述各个数据块的行数,确定所述目标数据在所述目标数据块中对应的第二行偏移量和第二长度。
上述第二行偏移量可以为目标数据在目标数据块中行的偏移量,用于指示目标数据在目标数据块中的起始行,上述第二长度可以为目标数据在目标数据块中的行数。
仍以上述示例为例,目标数据存储于在第2个数据块中。在第2个数据块中,上述目标HDFS文件中的第10001行至第10020行的数据存储于第2001行至第2020行中,因此上述目标数据块对应的第二行偏移量为2000,上述目标数据块对应的第二长度为20。
再举例来说,第一行偏移量为10000,第一长度为7000,目标数据为10001行至17000行的数据,各个数据块的行数均为8000,即第2个数据块中从第1行至第8000行存储的是HDFS文件中第8001行至第16000行的数据,第3个数据块中从第1行至第8000行存储的是目标HDFS文件中第16001行至第24000行的数据。因此目标数据存储于第2个数据块和第3个数据块中,在第2个数据块中,上述目标HDFS文件中第10001行至16000行的数据存储于第2001行至第8000行中,在第3个数据块中,目标HDFS文件中第16001行至第17000行的数据存储于第1行至第1000行中,因此上述第2个数据块对应的第二行偏移量为2000,第2个数据块对应的第二长度为6000,上述第3个数据块对应的第二行偏移量为0,第3个数据块对应的第二长度为1000。
步骤105、向所述目标数据块所对应的执行器Executor发送目标数据获取指令,所述目标数据获取指令包括所述目标数据块的标识信息,及所述目标数据块对应的所述第二行偏移量及所述第二长度。
Driver可以根据所述目标数据块的标识信息,及所述目标数据块对应的所述第二行偏移量及所述第二长度生成目标数据获取指令,并发送该目标数据获取指令至Executor,以使得Executor可以响应于目标数据获取指令,从目标HDFS文件中获取目标数据块,并根据该目标数据块对应的第二行偏移量及第二长度从目标数据块中获取目标数据。举例来说,Executor接收到目标数据获取指令后,可以针对目标数据获取指令中携带的目标数据块的标识信息表征的目标数据块,根据第二行偏移量及第二长度启动task,该task可以执行从目标数据块中获取目标数据的操作,包括:从目标HDFS文件中获取目标数据块,对目标数据块中的数据页进行解压缩操作后,根据第二行偏移量及第二长度确定目标数据的索引,根据索引从数据页中获取对应的目标数据。
举例来说,目标数据块为第2个数据块,该第2个数据块对应的第二行偏移量为2000,第二长度为20,Executor针对第2个数据块启动task,该task从目标HDFS文件中获取第2个数据块,根据第二行偏移量2000进行偏移,并从偏移后对应的第2001行开始获取数据,总共获取第2001行至第2020行共20行的数据。
这样一来,由于Driver可以确定目标HDFS文件中目标数据所在的目标数据块,及目标数据块对应的第二偏移量及第二长度,进而使得Executor可以直接从目标HDFS文件中获取目标数据块,并根据第二偏移量及第二长度从目标数据块中获取目标数据,而无需获取目标HDFS文件中的全部数据块,进而对全部数据块中的数据进行遍历以获取目标数据,因此根据本公开实施例的数据查询方法,可以提高数据查询效率,减少对内存的消耗。
图2示出根据本公开一实施例的一种数据查询方法的流程图。
在一种可能的实现方式中,参照图2,上述步骤103、根据所述第一行偏移量和第一长度及所述各个数据块的行数,确定所述目标数据对应的目标数据块,可以包括以下步骤。
步骤1031、按照数据块在目标HDFS文件中的顺序遍历数据块。
步骤1032、对于遍历到的任一数据块,判断该数据块之前的所有数据块与该数据块的行数之和是否大于第一行偏移量,以及判断该数据块之前的所有数据块的行数之和是否小于或者等于第一行偏移量与第一长度之和。
步骤1033、对于遍历到的任一数据块,在该数据块之前的所有数据块与该数据块的行数之和大于第一行偏移量,以及该数据块之前的所有数据块的行数之和小于或者等于第一行偏移量与第一长度之和时,确定该数据块为目标数据块。
Driver可以从第1个数据块开始遍历,判断第1个数据块的行数是否大于第一行偏移量,在行数大于第一行偏移量时,可以确定目标数据落在第1个数据块中,因此Driver可以确定第1个数据块为目标数据块;在行数小于或者等于第一行偏移量时,可以确定目标数据并未落在第1个数据块中,Driver可以继续遍历第2个数据块。
在第1个数据块与第2个数据块的行数之和大于第一行偏移量,且第1个数据块的行数小于或者等于第一行偏移量与第一长度之和时,可以确定目标数据落在第2个数据块中,因此Driver可以确定第2个数据块为目标数据块;在第1个数据块的行数大于第一行偏移量与第一长度之和时,可以确定目标数据已经全部落在第1个数据块中,并未落在第2个该数据块中,因此Driver可以确定第2个数据块并不是目标数据块,可以继续遍历第3个数据块,直至遍历至最后一个数据块,或者Driver可以直接结束遍历。
在确定第2个数据块为目标数据块后,Driver可以继续遍历第3个数据块,以此类推,直至遍历至第N个数据块,在第N个数据块与第1个、第2个、……第N-1个数据块的行数之和大于第一行偏移量,且第1个、第2个、……第N-1个数据块的行数之和小于或者等于第一行偏移量与第一长度之和时,Driver可以确定该数据块为目标数据块,并继续遍历第N+1个数据块;或者在第1个、第2个、……第N-1个数据块的行数之和大于第一行偏移量与第一长度之和时,Driver可以确定该数据块不是目标数据块,Driver可以继续遍历第N+1个数据块,直至遍历至最后一个数据块,或者Driver可以直接结束遍历。
在一个示例中,第一行偏移量为10000,第一长度为7000,各个数据块的行数均为8000,则Driver对第1个数据块进行遍历,确定第1个数据块的行数8000小于第一行偏移量,则第1个数据块不是目标数据块,Driver继续遍历第2个数据块。
第1个数据块与第2个数据块的行数16000大于第一行偏移量10000,且第1个数据块的行数8000小于第一行偏移量与第一长度之和17000,因此Driver可以确定第2个数据块为目标数据块,并可以继续遍历第3个数据块。
第1个数据块、第2个数据块及第3个数据块的行数24000大于第一行偏移量,且第1个数据块与第2个数据块的行数16000小于第一行偏移量与第一长度之和17000,因此Driver可以确定第3个数据块为目标数据块,并可以继续遍历第4个数据块。
第1个数据块、第2个数据块及第3个数据块的行数24000大于第一行偏移量与第一长度之和17000,因此Driver可以确定第4个数据块不是目标数据块,并可以继续遍历第5个数据块,直至遍历至最后一个数据块,或者Driver可以结束遍历。
经过上述遍历操作,Driver可以确定第2个数据块及第3个数据块为目标数据块。
这样一来,由于Driver可以确定目标数据块,故而使得Executor可以从目标HDFS文件中直接获取目标数据块,并从目标数据块中获取目标数据,而不用获取全部的数据块,并对全部的数据块中的数据进行遍历,以获取目标数据,因此,本公开实施例提供的数据查询方法,可以提高数据查询效率,减少对内存的消耗。
图3示出根据本公开一实施例的一种数据查询方法的流程图。
在一种可能的实现方式中,参照图3,上述步骤104、根据所述第一行偏移量和第一长度及各个所述数据块的行数,确定所述目标数据在所述目标数据块中对应的第二行偏移量,可以包括以下步骤。
步骤1041、在该目标数据块之前的所有数据块的行数之和大于或者等于所述第一行偏移量时,确定该目标数据块对应的所述第二行偏移量为0;
步骤1042、在该目标数据块之前的所有数据块的行数之和小于所述第一行偏移量时,确定所述第一行偏移量与该数据块之前的所有数据块的行数之和的差值为该目标数据块对应的第二行偏移量。
在该目标数据块之前的所有数据块的行数之和大于所述第一行偏移量时,表征该目标数据块之前的数据块中已经存储有部分目标数据,因此从该目标数据块中的第一行数据开始存储的即为目标数据,因此Driver可以确定该目标数据块的第二行偏移量为0。
在该目标数据块之前的所有数据块的行数之和等于所述第一行偏移量时,表征该目标数据块中的第一行数据即为目标数据的第一行,因此Driver可以确定该目标数据块的第二行偏移量为0。
在该目标数据块之前的所有数据块的行数之和小于所述第一行偏移量时,表征目标数据存储在该目标数据块中,且非存储在目标数据块的第一行数据,因此,Driver可以确定该目标数据块对应的第二行偏移量为所述第一行偏移量与该数据块之前的所有数据块的行数之和的差值。
在一个示例中,第一行偏移量为10000,第一长度为15000,也即目标数据为10001至25000行,各个数据块的行数均为8000,通过上述确定数据块的过程可以确定目标数据块为第2个数据块、第3个数据块及第4个数据块。在第2个数据块(第1行至第8000行分别存储的是目标HDFS文件中第8001行至第16000行的数据)中,由于第1个数据块的行数小于第一行偏移量,因此Driver可以确定第2个数据块对应的第二行偏移量为10000-8000=2000。
在第3个数据块(第1行至第8000行分别存储的是目标HDFS文件中第16001行至第24000行的数据)中,由于第1个数据块和第2个数据块的行数的和大于第一行偏移量,因此Driver可以确定第3个数据块对应的第二行偏移量为0。
在第4个数据块(第1行至第1000行分别存储的是目标HDFS文件中第24001行至第25000行的数据)中,由于第1个数据块、第2个数据块和第3个数据块的行数的和大于第一行偏移量,因此Driver可以确定第4个数据块对应的第二行偏移量为0。
图4示出根据本公开一实施例的一种数据查询方法的流程图。
在一种可能的实现方式中,参照图4,上述步骤104、根据所述第一行偏移量和第一长度及各个所述数据块的行数,确定所述目标数据在所述目标数据块中对应的第二长度,可以包括以下步骤。
步骤1043、在该目标数据块之前的所有数据块的行数之和小于或者等于所述第一行偏移量,且该目标数据块之前的所有数据块与该目标数据块的行数之和大于或者等于第一行偏移量与第一长度之和时,将所述第一长度作为该目标数据块对应的第二长度。
在该目标数据块之前的所有数据块的行数之和小于或者等于所述第一行偏移量,且该目标数据块之前的所有数据块与该目标数据块的行数之和大于或者等于第一行偏移量与第一长度之和时,Driver可以确定目标数据全部落在该目标数据块中,因此Driver可以将第一长度作为该目标数据块对应的第二长度。
步骤1044、在所述该目标数据块之前的所有数据块的行数之和小于或者等于所述第一行偏移量,且该目标数据块之前的所有数据块与该目标数据块的行数之和小于第一行偏移量与第一长度之和时,确定该目标数据块之前的所有数据块与该目标数据块的行数之和与所述第一行偏移量的差值为该目标数据块对应的第二长度。
在所述该目标数据块之前的所有数据块的行数之和小于或者等于所述第一行偏移量,且该目标数据块之前的所有数据块与该目标数据块的行数之和小于第一行偏移量与第一长度之和时,Driver可以确定目标数据的第一行数据落在该目标数据块中,而目标数据的最后一行未落入该目标数据块中,因此Driver可以确定该目标数据块之前的所有数据块与该目标数据块的行数之和与所述第一行偏移量的差值为该目标数据块对应的第二长度。
步骤1045、在该目标数据块之前的所有数据块与该目标数据块的行数之和小于第一行偏移量与第一长度之和,且该目标数据块之前的所有数据块的行数之和大于所述第一行偏移量时,确定该目标数据块的行数为该目标数据块对应的第二长度;
在该目标数据块之前的所有数据块与该目标数据块的行数之和小于第一行偏移量与第一长度之和,且该目标数据块之前的所有数据块的行数之和大于所述第一行偏移量时,Driver可以确定目标数据的第一行数据未落在该目标数据块中,并且目标数据的最后一行数据也未落在该目标数据块中,即该目标数据块中存储的所有数据均为目标数据,因此Driver可以确定该目标数据块的总行数为该目标数据块对应的第二长度。
步骤1046、在该目标数据块之前的所有数据块与该目标数据块的行数之和大于或者等于第一行偏移量与第一长度之和,且该目标数据块之前的所有数据块的行数之和大于所述第一行偏移量时,确定第一行偏移量与第一长度之和与该目标数据块之前的所有数据块的行数之和的差值为该目标数据块对应的第二长度。
在该目标数据块之前的所有数据块与该目标数据块的行数之和大于或者等于第一行偏移量与第一长度之和,且该目标数据块之前的所有数据块的行数之和大于所述第一行偏移量时,Driver可以确定目标数据的第一行未落入该目标数据块中,但目标数据的最后一行落入在该目标数据块中,因此Driver可以第一行偏移量与第一长度之和与该目标数据块之前的所有数据块的行数之和的差值为该目标数据块对应的第二长度。
在一个示例中,第一行偏移量为10000,第一长度为20,各个数据块的行数为8000行,目标数据块为第2个数据块。由于第1个数据块的行数8000小于第一偏移量10000,且第1个数据块和第2个数据块的行数的和16000大于第一行偏移量与第一长度的和10020,因此目标数据第10001行至10020行均存储在第2个数据块中,Driver可以确定该第2个数据块对应的第二长度为20。
在另一个示例中,第一行偏移量为10000,第一长度为15000,各个数据块的行数为8000行,目标数据块为第2个数据块、第3个数据块和第4个数据块。在第2个数据块中,由于第1个数据块行数8000小于第一行偏移量10000,且第1个数据块和第2个数据块的行数的和16000小于第一行偏移量与第一长度的和25000,因此目标数据第10001行至第16000行存储于第2个数据块中,Driver可以确定该第2个数据块对应的第二长度为16000-10000=6000。
在第3个数据块中,由于第1个数据块与第2个数据块的行数的和16000大于第一偏移量10000,且第1个数据块、第2个数据块和第3个数据块的行数的和24000小于第一行偏移量与第一长度的和25000,因此目标数据第16001行至第24000行存储于第3个数据块中,Driver可以确定该第3个数据块对应的第二长度为第3个数据块的总行数8000。
在第4个数据块中,由于第1个数据块、第2个数据块及第3个数据块的行数的和24000大于第一行偏移量10000,且第1个数据块、第2个数据块、第3个数据块及第4个数据块的行数的和32000大于第一行偏移量与第一长度的和25000,因此目标数据第24001行至第25000行存储于第4个数据块中,Driver可以确定该第4个数据块对应的第二长度为2500-2400=1000。
上述第2个数据块对应的第二行偏移量为2000,第二长度为6000,因此Driver可以向Executor发送包括第2个数据块的标识信息、及第2个数据块对应的第二行偏移量2000和第二长度6000的第一目标数据获取指令,以使得Executor可以根据第一目标数据获取指令从目标HDFS文件中获取第2个数据块,并根据第二行偏移量及第二长度获取第2个数据块中第2001行至8000行的数据。
上述第3个数据块对应的第二行偏移量为0,第二长度为8000,因此Driver可以向Executor发送包括第3个数据块的标识信息、及第3个数据块对应的第二行偏移量0和第二长度8000的第二目标数据获取指令,以使得Executor可以根据第二目标数据获取指令从目标HDFS文件中获取第3个数据块,并根据第二行偏移量及第二长度获取第3个数据块中第1行至8000行的数据。
上述第4个数据块对应的第二行偏移量为0,第二长度为1000,因此Driver可以向Executor发送包括第4个数据块的标识信息、及第4个数据块对应的第二行偏移量0和第二长度1000的第三目标数据获取指令,以使得Executor可以根据第三目标数据获取指令从目标HDFS文件中获取第4个数据块,并根据第二行偏移量及第二长度获取第4个数据块中第1行至1000行的数据。
上述第2个数据块中第2001行至8000行的数据、第3个数据块中第1行至8000行的数据、第4个数据块中第1行至1000行的数据即为上述目标HDFS文件中第10001行至25000行存储的数据。
这样一来,由于Driver可以确定目标数据块中对应的第二行偏移量及第二长度,故而能够使得Executor可以从目标HDFS文件中直接获取目标数据块后,并可以根据第二行偏移量及第二长度直接从目标数据块中获取目标数据,能够根据用户需求直接从表中获取指定的数据,实现分页查询,提高查询效率。
图5示出根据本公开一实施例的一种数据查询方法的流程图,可以应用于SparkSQL引擎的执行器Executor,如图5所示,该方法包括以下步骤:
步骤501、接收来自驱动器Driver的目标数据获取指令,所述目标获取指令中包括目标数据块的标识信息,及所述目标数据块对应的第二行偏移量及第二长度。
其中,目标数据块的标识信息可以唯一标识目标数据块,目标数据块对应的第二行偏移量可以用于指示目标数据在该目标数据块中的起始行,第二长度可以表示目标数据在该目标数据块中的行数。
需要说明的是,Driver确定目标数据块、及目标数据块对应的第二行偏移量及第二长度的过程可以参照前述实施例,本公开在此不再赘述。
步骤502、从目标HDFS文件中获取所述目标数据块。
Executor可以响应于上述目标数据获取指令,从目标HDFS中获取目标数据块的标识信息表征的目标数据块。举例来说,Executor可以将目标HDFS文件中目标数据块的标识信息表征的目标数据块加载至本地。
步骤503、根据所述目标数据块对应的所述第二行偏移量及所述第二长度从所述目标数据块中获取所述目标数据。
在获取目标数据块后,Executor可以根据第二行偏移量及第二长度确定目标数据在目标数据块中的索引,并可以根据索引从目标数据块中获取目标数据。
这样一来,根据本公开实施例提供的数据查询方法,Executor能够根据用户需求直接从HDFS文件中获取指定的数据,实现分页查询;且由于Driver可以确定HDFS文件中目标数据所在的目标数据块,进而使得Executor可以直接从HDFS文件中获取目标数据块,并根据目标数据对应的第二行偏移量及第二长度从目标数据块中获取目标数据,而无需获取HDFS文件中全部的数据块,对全部的数据块中的数据进行遍历,以获取目标数据,因此可以提高数据查询效率,减少对内存的消耗。
图6示出根据本公开一实施例的一种数据查询方法的流程图。
在一种可能的实现方式中,参照图6,上述步骤503、根据所述目标数据块对应的所述第二行偏移量及所述第二长度从所述目标数据块中获取所述目标数据,可以包括以下步骤。
步骤5031、获取目标数据块中各个数据页的行数。
目标数据块中包括多个用于存储数据的数据页(page)。Executor可以获取各个数据页的统计信息(例如从Footer页脚中获取各个数据页的统计信息),并可以从统计信息中获取各个数据页的行数,该数据块的行数为该数据页中已经存储数据的行数。
步骤5032、根据所述各个数据页的行数、所述第二行偏移量及所述第二长度确定所述目标数据块中存储所述目标数据的目标数据页。
图7示出根据本公开一实施例的一种数据查询方法的流程图。
在一种可能的实现方式中,参照图7,上述步骤5032、根据所述各个数据页的行数、所述第二行偏移量及所述第二长度确定所述目标数据块中存储所述目标数据的目标数据页,可以通过以下步骤实现。
步骤50321、按照数据页在目标数据块中的顺序遍历数据页。
步骤50322、对于遍历到的任一数据页,判断该数据页之前的所有数据页与该数据页的行数之和是否大于第二行偏移量,以及判断该数据页之前的所有数据页的行数之和是否小于或者等于第二行偏移量与第二长度之和。
步骤50323、对于遍历到的任一数据页,在该数据页之前的所有数据页与该数据页的行数之和大于第二行偏移量,以及该数据页之前的所有数据页的行数之和小于或者等于第二行偏移量与第二长度之和时,确定该数据页为目标数据块。
其中,上述Executor根据所述各个数据页的行数、所述第二行偏移量及所述第二长度确定所述目标数据块中存储所述目标数据的目标数据页的过程,可以参照上述步骤1031至步骤1033中Driver根据所述第一行偏移量和第一长度及所述各个数据块的行数,确定所述目标数据对应的目标数据块的过程,本公开在此不再赘述。
步骤5033、根据所述各个数据页的行数、及所述第二行偏移量和第二长度,确定所述目标数据在所述目标数据页中,对应的第三行偏移量和第三长度;
图8示出根据本公开一实施例的一种数据查询方法的流程图。
在一种可能的实现方式中,参照图8,上述步骤5033、根据所述各个数据页的行数、及所述第二行偏移量和第二长度,确定所述目标数据在所述目标数据页中,对应的第三行偏移量,可以通过以下步骤实现。
步骤50331、针对任一目标数据页,在该目标数据页之前的所有数据页的行数之和大于或者等于所述第二行偏移量时,确定该目标数据页对应的所述第三行偏移量为0;
步骤50332、在该目标数据页之前的所有数据页的行数之和小于所述第二行偏移量时,确定所述第二行偏移量与该目标数据页之前的所有数据页的行数之和的差值为该目标数据页对应的第三行偏移量。
图9示出根据本公开一实施例的一种数据查询方法的流程图。
在一种可能的实现方式中,参照图9,上述步骤5033、根据所述各个数据页的行数、及所述第二行偏移量和第二长度,确定所述目标数据在所述目标数据页中,对应的第三长度,可以通过以下步骤实现。
步骤50333、针对任一目标数据页,在该目标数据页之前的所有数据页的行数之和小于或者等于所述第二行偏移量,且该目标数据页之前的所有数据页与该目标数据页的行数之和大于或者等于第二行偏移量与第二长度之和时,将所述第二长度作为该目标数据页对应的第三长度;
步骤50334、在所述该目标数据页之前的所有数据页的行数之和小于或者等于所述第二行偏移量,且该目标数据页之前的所有数据页与该目标数据页的行数之和小于第二行偏移量与第二长度之和时,确定该目标数据页之前的所有数据页与该目标数据页的行数之和与所述第二行偏移量的差值为该目标数据页对应的第三长度;
步骤50335、在该目标数据页之前的所有数据页与该目标数据页的行数之和小于第二行偏移量与第二长度之和,且该目标数据页之前的所有数据页的行数之和大于所述第二行偏移量时,确定该目标数据页的行数为该目标数据页对应的第三长度;
步骤50336、在该目标数据页之前的所有数据页与该目标数据页的行数之和大于或者等于第二行偏移量与第二长度之和,且该目标数据页之前的所有数据页的行数之和大于所述第二行偏移量时,确定第二行偏移量与第二长度之和与该目标数据页之前的所有数据页的行数之和的差值为该目标数据也对应的第三长度。
其中,上述Executor根据所述各个数据页的行数、所述第二行偏移量及所述第二长度确定目标数据页中对应的第三行偏移量及第三长度的过程,可以参照上述步骤1041及步骤1046中Driver根据所述第一行偏移量和第一长度及所述各个数据块的行数,确定所述目标数据块对应的第二行偏移量及第二长度的过程,本公开在此不再赘述。
步骤5034、根据所述第三行偏移量及第三长度确定所述目标数据对应的索引;
步骤5035、对所述目标数据页进行解压缩后,根据所述索引从解压缩后的所述数据页中获取目标数据。
Executor可以根据第三行偏移量及第三长度确定目标数据在目标数据页中的索引。Executor在从目标HDFS文件中获取目标数据块后,可以对目标数据块中目标数据页进行解压缩操作,并根据上述索引从解压缩后的目标数据页中获取数据页中的目标数据。
举例来说,Executor在接收目标数据获取指令后,可以针对目标数据获取指令中携带的目标数据块的标识信息所表征的目标数据块启动task,将第二行偏移量及第二长度导入该task后,该task可以执行从目标HDFS文件中获取目标数据块的操作,并在获取目标数据块后,根据第二行偏移量及第二长度确定目标数据块中的目标数据页,及目标数据页中目标数据对应的第三行偏移量及第三长度,在对目标数据页进行解压缩操作后,根据第三行偏移量及第三长度确定目标数据的索引,并根据索引从目标数据页中获取目标数据。
这样一来,由于Executor可以确定目标数据块中存储目标数据的目标数据页,因而可以仅对目标数据页进行解压缩,并从该目标数据页中获取目标数据,而不用解压缩目标数据块中的全部数据页,因此,本公开实施例提供的数据查询方法,可以提高数据查询效率,减少对内存的消耗。
图10示出根据本公开一实施例的一种数据查询装置的结构框图。该装置可以应用于驱动器Driver,如图10所示,该装置可以包括:
第一获取模块1001,可以用于获取目标数据对应的第一行偏移量和第一长度,其中,所述第一行偏移量指示目标数据在目标HDFS文件中的起始行,所述第一长度为所述目标数据的行数;
第二获取模块1002,可以用于获取所述目标HDFS文件中各个数据块的行数;
第一确定模块1003,可以用于根据所述第一行偏移量和第一长度及所述各个数据块的行数,确定所述目标数据对应的目标数据块;
第二确定模块1004,可以用于根据所述第一行偏移量和第一长度及所述各个数据块的行数,确定所述目标数据在所述目标数据块中对应的第二行偏移量和第二长度;
发送模块1005,可以用于向所述目标数据块所对应的执行器Executor发送目标数据获取指令,所述目标数据获取指令包括所述目标数据块的标识信息,及所述目标数据块对应的所述第二行偏移量及所述第二长度。
在一种可能的实现方式中,上述第一确定模块1003还可以用于,
按照数据块在目标HDFS文件中的顺序遍历数据块,对于遍历到的任一数据块:
判断该数据块之前的所有数据块与该数据块的行数之和是否大于第一行偏移量,以及判断该数据块之前的所有数据块的行数之和是否小于或者等于第一行偏移量与第一长度之和;
在该数据块之前的所有数据块与该数据块的行数之和大于第一行偏移量,以及该数据块之前的所有数据块的行数之和小于或者等于第一行偏移量与第一长度之和时,确定该数据块为目标数据块。在一种可能的实现方式中,上述第二确定模块1004还可以用于,
针对任一目标数据块,在该目标数据块之前的所有数据块的行数之和大于或者等于所述第一行偏移量时,确定该目标数据块对应的所述第二行偏移量为0;
在该目标数据块之前的所有数据块的行数之和小于所述第一行偏移量时,确定所述第一行偏移量与该目标数据块之前的所有数据块的行数之和的差值为该目标数据块对应的第二行偏移量。
在一种可能的实现方式中,上述第二确定模块1004还可以用于,
针对任一目标数据块,在该目标数据块之前的所有数据块的行数之和小于或者等于所述第一行偏移量,且该目标数据块之前的所有数据块与该目标数据块的行数之和大于或者等于第一行偏移量与第一长度之和时,将所述第一长度作为该目标数据块对应的第二长度;
在所述该目标数据块之前的所有数据块的行数之和小于或者等于所述第一行偏移量,且该目标数据块之前的所有数据块与该目标数据块的行数之和小于第一行偏移量与第一长度之和时,确定该目标数据块之前的所有数据块与该目标数据块的行数之和与所述第一行偏移量的差值为该目标数据块对应的第二长度;
在该目标数据块之前的所有数据块与该目标数据块的行数之和小于第一行偏移量与第一长度之和,且该目标数据块之前的所有数据块的行数之和大于所述第一行偏移量时,确定该目标数据块的行数为该目标数据块对应的第二长度;
在该目标数据块之前的所有数据块与该目标数据块的行数之和大于或者等于第一行偏移量与第一长度之和,且该目标数据块之前的所有数据块的行数之和大于所述第一行偏移量时,确定第一行偏移量与第一长度之和与该目标数据块之前的所有数据块的行数之和的差值为该目标数据块对应的第二长度。
这样一来,由于Driver可以确定目标HDFS文件中目标数据所在的目标数据块,及目标数据块对应的第二偏移量及第二长度,进而使得Executor可以直接从目标HDFS文件中获取目标数据块,并根据第二偏移量及第二长度从目标数据块中获取目标数据,而无需获取目标HDFS文件中的全部数据块,进而对全部数据块中的数据进行遍历以获取目标数据,因此根据本公开实施例的数据查询装置,可以提高数据查询效率,减少对内存的消耗。
图11示出根据本公开一实施例的一种数据查询装置的结构框图。该装置可以应用于执行器Executor,如图11所示,该装置可以包括:
接收模块1101,可以用于接收来自驱动器Driver的目标数据获取指令,所述目标获取指令中包括目标数据块的标识信息,及所述目标数据块对应的所述第二行偏移量及所述第二长度;
第一获取模块1102,可以用于从目标HDFS中获取所述目标数据块;
第二获取模块1103,可以用于根据所述目标数据块对应的所述第二行偏移量及所述第二长度从所述目标数据块中获取所述目标数据。
这样一来,根据本公开实施例提供的数据查询装置,Executor能够根据用户需求直接从HDFS文件中获取指定的数据,实现分页查询;且由于Driver可以确定HDFS文件中目标数据所在的目标数据块,进而使得Executor可以直接从HDFS文件中获取目标数据块,并根据目标数据对应的第二行偏移量及第二长度从目标数据块中获取目标数据,而无需获取HDFS文件中全部的数据块,对全部的数据块中的数据进行遍历,以获取目标数据,因此可以提高数据查询效率,减少对内存的消耗。
在一种可能的实现方式中,上述第二获取模块1103,可以包括:
第一获取子模块,可以用于获取目标数据块中各个数据页的行数;
第一确定子模块,可以用于根据所述各个数据页的行数、所述第二行偏移量及所述第二长度确定所述目标数据块中存储所述目标数据的目标数据页;
第二确定子模块,可以用于根据所述各个数据页的行数、及所述第二行偏移量和第二长度,确定所述目标数据在所述目标数据页中,对应的第三行偏移量和第三长度;
第三确定子模块,可以用于根据所述第三行偏移量及第三长度确定所述目标数据对应的索引;
第二获取子模块,可以用于对所述目标数据页进行解压缩后,根据所述索引从解压缩后的所述数据页中获取目标数据。
在一种可能的实现方式中,上述第一确定子模块还用于,
按照数据页在目标数据块中的顺序遍历数据页,对于遍历到的任一数据页:
判断该数据页之前的所有数据页与该数据页的行数之和是否大于第二行偏移量,以及判断该数据页之前的所有数据页的行数之和是否小于或者等于第二行偏移量与第二长度之和;
在该数据页之前的所有数据页与该数据页的行数之和大于第二行偏移量,以及该数据页之前的所有数据页的行数之和小于或者等于第二行偏移量与第二长度之和时,确定该数据页为目标数据块。
在一种可能的实现方式中,上述第二确定子模块还用于,
针对任一目标数据页,在该目标数据页之前的所有数据页的行数之和大于或者等于所述第二行偏移量时,确定该目标数据页对应的所述第三行偏移量为0;
在该目标数据页之前的所有数据页的行数之和小于所述第二行偏移量时,确定所述第二行偏移量与该目标数据页之前的所有数据页的行数之和的差值为该目标数据页对应的第三行偏移量。
在一种可能的实现方式中,上述第二确定子模块还用于,
针对任一目标数据页,在该目标数据页之前的所有数据页的行数之和小于或者等于所述第二行偏移量,且该目标数据页之前的所有数据页与该目标数据页的行数之和大于或者等于第二行偏移量与第二长度之和时,将所述第二长度作为该目标数据页对应的第三长度;
在所述该目标数据页之前的所有数据页的行数之和小于或者等于所述第二行偏移量,且该目标数据页之前的所有数据页与该目标数据页的行数之和小于第二行偏移量与第二长度之和时,确定该目标数据页之前的所有数据页与该目标数据页的行数之和与所述第二行偏移量的差值为该目标数据页对应的第三长度;
在该目标数据页之前的所有数据页与该目标数据页的行数之和小于第二行偏移量与第二长度之和,且该目标数据页之前的所有数据页的行数之和大于所述第二行偏移量时,确定该目标数据页的行数为该目标数据页对应的第三长度;
在该目标数据页之前的所有数据页与该目标数据页的行数之和大于或者等于第二行偏移量与第二长度之和,且该目标数据页之前的所有数据页的行数之和大于所述第二行偏移量时,确定第二行偏移量与第二长度之和与该目标数据页之前的所有数据页的行数之和的差值为该目标数据也对应的第三长度。
图12是根据一示例性实施例示出的一种数据查询装置的硬件结构框图。在实际应用中,该装置可通过服务器实现。参照图12,该装置1300可包括处理器1301、存储有机器可执行指令的机器可读存储介质1302。处理器1301与机器可读存储介质1302可经由系统总线1303通信。并且,处理器1301通过读取机器可读存储介质1302中与数据查询逻辑对应的机器可执行指令以执行上文所述的数据查询方法。
本文中提到的机器可读存储介质1302可以是任何电子、磁性、光学或其它物理存储装置,可以包含或存储信息,如可执行指令、数据,等等。例如,机器可读存储介质可以是:随机存取存储器(英文:Radom Access Memory,简称:RAM)、易失存储器、非易失性存储器、闪存、存储驱动器(如硬盘驱动器)、固态硬盘、任何类型的存储盘(如光盘、dvd等),或者类似的存储介质,或者它们的组合。
以上已经描述了本公开的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的技术改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。
Claims (18)
1.一种数据查询方法,其特征在于,应用于驱动器Driver,所述方法包括:
获取目标数据对应的第一行偏移量和第一长度,其中,所述第一行偏移量指示所述目标数据在目标HDFS文件中的起始行,所述第一长度为所述目标数据的行数;
获取所述目标HDFS文件中各个数据块的行数;
根据所述第一行偏移量和第一长度及所述各个数据块的行数,确定所述目标数据对应的目标数据块;
根据所述第一行偏移量和第一长度及所述各个数据块的行数,确定所述目标数据在所述目标数据块中对应的第二行偏移量和第二长度;
向所述目标数据块所对应的执行器Executor发送目标数据获取指令,所述目标数据获取指令包括所述目标数据块的标识信息,及所述目标数据块对应的所述第二行偏移量及所述第二长度。
2.根据权利要求1所述的方法,其特征在于,根据所述第一行偏移量和第一长度及所述各个数据块的行数,确定所述目标数据对应的目标数据块,包括:
按照数据块在目标HDFS文件中的顺序遍历数据块,对于遍历到的任一数据块:
判断该数据块之前的所有数据块与该数据块的行数之和是否大于第一行偏移量,以及判断该数据块之前的所有数据块的行数之和是否小于或者等于第一行偏移量与第一长度之和;
在该数据块之前的所有数据块与该数据块的行数之和大于第一行偏移量,以及该数据块之前的所有数据块的行数之和小于或者等于第一行偏移量与第一长度之和时,确定该数据块为目标数据块。
3.根据权利要求2所述的方法,其特征在于,所述根据所述第一行偏移量和第一长度及各个所述数据块的行数,确定所述目标数据在所述目标数据块中对应的第二行偏移量,包括:
针对任一目标数据块,在该目标数据块之前的所有数据块的行数之和大于或者等于所述第一行偏移量时,确定该目标数据块对应的所述第二行偏移量为0;
在该目标数据块之前的所有数据块的行数之和小于所述第一行偏移量时,确定所述第一行偏移量与该目标数据块之前的所有数据块的行数之和的差值为该目标数据块对应的第二行偏移量。
4.根据权利要求3所述的方法,其特征在于,所述根据所述第一行偏移量和第一长度及各个所述数据块的行数,确定所述目标数据在所述目标数据块中对应的第二长度,包括:
针对任一目标数据块,在该目标数据块之前的所有数据块的行数之和小于或者等于所述第一行偏移量,且该目标数据块之前的所有数据块与该目标数据块的行数之和大于或者等于第一行偏移量与第一长度之和时,将所述第一长度作为该目标数据块对应的第二长度;
在所述该目标数据块之前的所有数据块的行数之和小于或者等于所述第一行偏移量,且该目标数据块之前的所有数据块与该目标数据块的行数之和小于第一行偏移量与第一长度之和时,确定该目标数据块之前的所有数据块与该目标数据块的行数之和与所述第一行偏移量的差值为该目标数据块对应的第二长度;
在该目标数据块之前的所有数据块与该目标数据块的行数之和小于第一行偏移量与第一长度之和,且该目标数据块之前的所有数据块的行数之和大于所述第一行偏移量时,确定该目标数据块的行数为该目标数据块对应的第二长度;
在该目标数据块之前的所有数据块与该目标数据块的行数之和大于或者等于第一行偏移量与第一长度之和,且该目标数据块之前的所有数据块的行数之和大于所述第一行偏移量时,确定第一行偏移量与第一长度之和与该目标数据块之前的所有数据块的行数之和的差值为该目标数据块对应的第二长度。
5.一种数据查询方法,其特征在于,应用于执行器Executor,所述方法包括:
接收来自驱动器Driver的目标数据获取指令,所述目标获取指令中包括目标数据块的标识信息,及所述目标数据块对应的第二行偏移量及第二长度;
从目标HDFS文件中获取所述目标数据块;
根据所述目标数据块对应的所述第二行偏移量及所述第二长度从所述目标数据块中获取所述目标数据。
6.根据权利要求5所述的方法,其特征在于,所述根据所述目标数据块对应的所述第二行偏移量及所述第二长度从所述目标数据块中获取所述目标数据,包括:
获取目标数据块中各个数据页的行数;
根据所述各个数据页的行数、所述第二行偏移量及所述第二长度确定所述目标数据块中存储所述目标数据的目标数据页;
根据所述各个数据页的行数、及所述第二行偏移量和第二长度,确定所述目标数据在所述目标数据页中,对应的第三行偏移量和第三长度;
根据所述第三行偏移量及第三长度确定所述目标数据对应的索引;
对所述目标数据页进行解压缩后,根据所述索引从解压缩后的所述数据页中获取目标数据。
7.根据权利要求6所述的方法,其特征在于,所述根据所述各个数据页的行数、所述第二行偏移量及所述第二长度确定所述目标数据块中存储所述目标数据的目标数据页,包括:
按照数据页在目标数据块中的顺序遍历数据页,对于遍历到的任一数据页:
判断该数据页之前的所有数据页与该数据页的行数之和是否大于第二行偏移量,以及判断该数据页之前的所有数据页的行数之和是否小于或者等于第二行偏移量与第二长度之和;
在该数据页之前的所有数据页与该数据页的行数之和大于第二行偏移量,以及该数据页之前的所有数据页的行数之和小于或者等于第二行偏移量与第二长度之和时,确定该数据页为目标数据块。
8.根据权利要求7所述的方法,其特征在于,所述根据所述各个数据页的行数、及所述第二行偏移量和第二长度,确定所述目标数据在所述目标数据页中对应的第三行偏移量,包括:
针对任一目标数据页,在该目标数据页之前的所有数据页的行数之和大于或者等于所述第二行偏移量时,确定该目标数据页对应的所述第三行偏移量为0;
在该目标数据页之前的所有数据页的行数之和小于所述第二行偏移量时,确定所述第二行偏移量与该目标数据页之前的所有数据页的行数之和的差值为该目标数据页对应的第三行偏移量。
9.根据权利要求8所述的方法,其特征在于,所述根据所述各个数据页的行数、及所述第二行偏移量和第二长度,确定所述目标数据在所述目标数据页中,对应的第三长度,包括:
针对任一目标数据页,在该目标数据页之前的所有数据页的行数之和小于或者等于所述第二行偏移量,且该目标数据页之前的所有数据页与该目标数据页的行数之和大于或者等于第二行偏移量与第二长度之和时,将所述第二长度作为该目标数据页对应的第三长度;
在所述该目标数据页之前的所有数据页的行数之和小于或者等于所述第二行偏移量,且该目标数据页之前的所有数据页与该目标数据页的行数之和小于第二行偏移量与第二长度之和时,确定该目标数据页之前的所有数据页与该目标数据页的行数之和与所述第二行偏移量的差值为该目标数据页对应的第三长度;
在该目标数据页之前的所有数据页与该目标数据页的行数之和小于第二行偏移量与第二长度之和,且该目标数据页之前的所有数据页的行数之和大于所述第二行偏移量时,确定该目标数据页的行数为该目标数据页对应的第三长度;
在该目标数据页之前的所有数据页与该目标数据页的行数之和大于或者等于第二行偏移量与第二长度之和,且该目标数据页之前的所有数据页的行数之和大于所述第二行偏移量时,确定第二行偏移量与第二长度之和与该目标数据页之前的所有数据页的行数之和的差值为该目标数据也对应的第三长度。
10.一种数据查询装置,其特征在于,应用于驱动器Driver,所述装置包括:
第一获取模块,用于获取目标数据对应的第一行偏移量和第一长度,其中,所述第一行偏移量指示目标数据在目标HDFS文件中的起始行,所述第一长度为所述目标数据的行数;
第二获取模块,用于获取所述目标HDFS文件中各个数据块的行数;
第一确定模块,用于根据所述第一行偏移量和第一长度及所述各个数据块的行数,确定所述目标数据对应的目标数据块;
第二确定模块,用于根据所述第一行偏移量和第一长度及所述各个数据块的行数,确定所述目标数据在所述目标数据块中对应的第二行偏移量和第二长度;
发送模块,用于向所述目标数据块所对应的执行器Executor发送目标数据获取指令,所述目标数据获取指令包括所述目标数据块的标识信息,及所述目标数据块对应的所述第二行偏移量及所述第二长度。
11.根据权利要求10所述的装置,其特征在于,所述第一确定模块还用于,
按照数据块在目标HDFS文件中的顺序遍历数据块,对于遍历到的任一数据块:
判断该数据块之前的所有数据块与该数据块的行数之和是否大于第一行偏移量,以及判断该数据块之前的所有数据块的行数之和是否小于或者等于第一行偏移量与第一长度之和;
在该数据块之前的所有数据块与该数据块的行数之和大于第一行偏移量,以及该数据块之前的所有数据块的行数之和小于或者等于第一行偏移量与第一长度之和时,确定该数据块为目标数据块。
12.根据权利要求11所述的装置,其特征在于,所述第二确定模块,还用于,
针对任一目标数据块,在该目标数据块之前的所有数据块的行数之和大于或者等于所述第一行偏移量时,确定该目标数据块对应的所述第二行偏移量为0;
在该目标数据块之前的所有数据块的行数之和小于所述第一行偏移量时,确定所述第一行偏移量与该目标数据块之前的所有数据块的行数之和的差值为该目标数据块对应的第二行偏移量。
13.根据权利要求12所述的装置,其特征在于,所述第二确定模块,还用于,
针对任一目标数据块,在该目标数据块之前的所有数据块的行数之和小于或者等于所述第一行偏移量,且该目标数据块之前的所有数据块与该目标数据块的行数之和大于或者等于第一行偏移量与第一长度之和时,将所述第一长度作为该目标数据块对应的第二长度;
在所述该目标数据块之前的所有数据块的行数之和小于或者等于所述第一行偏移量,且该目标数据块之前的所有数据块与该目标数据块的行数之和小于第一行偏移量与第一长度之和时,确定该目标数据块之前的所有数据块与该目标数据块的行数之和与所述第一行偏移量的差值为该目标数据块对应的第二长度;
在该目标数据块之前的所有数据块与该目标数据块的行数之和小于第一行偏移量与第一长度之和,且该目标数据块之前的所有数据块的行数之和大于所述第一行偏移量时,确定该目标数据块的行数为该目标数据块对应的第二长度;
在该目标数据块之前的所有数据块与该目标数据块的行数之和大于或者等于第一行偏移量与第一长度之和,且该目标数据块之前的所有数据块的行数之和大于所述第一行偏移量时,确定第一行偏移量与第一长度之和与该目标数据块之前的所有数据块的行数之和的差值为该目标数据块对应的第二长度。
14.一种数据查询装置,其特征在于,应用于执行器Executor,所述装置包括:
接收模块,用于接收来自驱动器Driver的目标数据获取指令,所述目标获取指令中包括目标数据块的标识信息,及所述目标数据块对应的第二行偏移量及第二长度;
第一获取模块,用于从目标HDFS文件中获取所述目标数据块;
第二获取模块,用于根据所述目标数据块对应的所述第二行偏移量及所述第二长度从所述目标数据块中获取所述目标数据。
15.根据权利要求14所述的装置,其特征在于,所述第二获取模块,包括:
第一获取子模块,用于获取目标数据块中各个数据页的行数;
第一确定子模块,用于根据所述各个数据页的行数、所述第二行偏移量及所述第二长度确定所述目标数据块中存储所述目标数据的目标数据页;
第二确定子模块,用于根据所述各个数据页的行数、及所述第二行偏移量和第二长度,确定所述目标数据在所述目标数据页中,对应的第三行偏移量和第三长度;
第三确定子模块,用于根据所述第三行偏移量及第三长度确定所述目标数据对应的索引;
第二获取子模块,用于对所述目标数据页进行解压缩后,根据所述索引从解压缩后的所述数据页中获取目标数据。
16.根据权利要求15所述的装置,其特征在于,所述第一确定子模块还用于,
按照数据页在目标数据块中的顺序遍历数据页,对于遍历到的任一数据页:
判断该数据页之前的所有数据页与该数据页的行数之和是否大于第二行偏移量,以及判断该数据页之前的所有数据页的行数之和是否小于或者等于第二行偏移量与第二长度之和;
在该数据页之前的所有数据页与该数据页的行数之和大于第二行偏移量,以及该数据页之前的所有数据页的行数之和小于或者等于第二行偏移量与第二长度之和时,确定该数据页为目标数据块。
17.根据权利要求16所述的装置,其特征在于,所述第二确定子模块还用于,
针对任一目标数据页,在该目标数据页之前的所有数据页的行数之和大于或者等于所述第二行偏移量时,确定该目标数据页对应的所述第三行偏移量为0;
在该目标数据页之前的所有数据页的行数之和小于所述第二行偏移量时,确定所述第二行偏移量与该目标数据页之前的所有数据页的行数之和的差值为该目标数据页对应的第三行偏移量。
18.根据权利要求17所述的装置,其特征在于,所述第二确定子模块还用于,
针对任一目标数据页,在该目标数据页之前的所有数据页的行数之和小于或者等于所述第二行偏移量,且该目标数据页之前的所有数据页与该目标数据页的行数之和大于或者等于第二行偏移量与第二长度之和时,将所述第二长度作为该目标数据页对应的第三长度;
在所述该目标数据页之前的所有数据页的行数之和小于或者等于所述第二行偏移量,且该目标数据页之前的所有数据页与该目标数据页的行数之和小于第二行偏移量与第二长度之和时,确定该目标数据页之前的所有数据页与该目标数据页的行数之和与所述第二行偏移量的差值为该目标数据页对应的第三长度;
在该目标数据页之前的所有数据页与该目标数据页的行数之和小于第二行偏移量与第二长度之和,且该目标数据页之前的所有数据页的行数之和大于所述第二行偏移量时,确定该目标数据页的行数为该目标数据页对应的第三长度;
在该目标数据页之前的所有数据页与该目标数据页的行数之和大于或者等于第二行偏移量与第二长度之和,且该目标数据页之前的所有数据页的行数之和大于所述第二行偏移量时,确定第二行偏移量与第二长度之和与该目标数据页之前的所有数据页的行数之和的差值为该目标数据也对应的第三长度。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810501501.6A CN108874897B (zh) | 2018-05-23 | 2018-05-23 | 数据查询方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810501501.6A CN108874897B (zh) | 2018-05-23 | 2018-05-23 | 数据查询方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108874897A true CN108874897A (zh) | 2018-11-23 |
CN108874897B CN108874897B (zh) | 2019-09-13 |
Family
ID=64333574
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810501501.6A Active CN108874897B (zh) | 2018-05-23 | 2018-05-23 | 数据查询方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108874897B (zh) |
Citations (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103473314A (zh) * | 2013-09-11 | 2013-12-25 | 北京思特奇信息技术股份有限公司 | 一种基于共享内存的键值对存储方法及装置 |
CN103617232A (zh) * | 2013-11-26 | 2014-03-05 | 北京京东尚科信息技术有限公司 | 一种针对HBase表的分页查询方法 |
CN103699627A (zh) * | 2013-12-20 | 2014-04-02 | 北京遥测技术研究所 | 一种基于Hadoop集群的超大文件并行数据块定位方法 |
CN102890675B (zh) * | 2011-07-18 | 2015-05-13 | 阿里巴巴集团控股有限公司 | 一种数据存储和查找的方法及装置 |
CN105550318A (zh) * | 2015-12-15 | 2016-05-04 | 深圳市华讯方舟软件技术有限公司 | 一种基于Spark大数据处理平台的查询方法 |
CN105574093A (zh) * | 2015-12-10 | 2016-05-11 | 深圳市华讯方舟软件技术有限公司 | 一种在基于HDFS的spark-sql大数据处理系统上建立索引的方法 |
CN105760457A (zh) * | 2016-02-05 | 2016-07-13 | 成都康赛信息技术有限公司 | 一种基于MongoDB的数据分页优化方法 |
CN106021357A (zh) * | 2016-05-09 | 2016-10-12 | 泰华智慧产业集团股份有限公司 | 基于分布式的大数据分页查询方法及系统 |
CN106156302A (zh) * | 2016-06-30 | 2016-11-23 | 上海达梦数据库有限公司 | 一种大字段数据的处理方法及装置 |
CN106777278A (zh) * | 2016-12-29 | 2017-05-31 | 海尔优家智能科技(北京)有限公司 | 一种基于Spark的数据处理方法及装置 |
CN107169033A (zh) * | 2017-04-17 | 2017-09-15 | 东北大学 | 基于数据模式转换和并行框架的关系数据查询优化方法 |
CN107704585A (zh) * | 2017-10-09 | 2018-02-16 | 郑州云海信息技术有限公司 | 一种查询hdfs数据方法及系统 |
CN108090086A (zh) * | 2016-11-21 | 2018-05-29 | 迈普通信技术股份有限公司 | 分页查询方法及装置 |
-
2018
- 2018-05-23 CN CN201810501501.6A patent/CN108874897B/zh active Active
Patent Citations (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102890675B (zh) * | 2011-07-18 | 2015-05-13 | 阿里巴巴集团控股有限公司 | 一种数据存储和查找的方法及装置 |
CN103473314A (zh) * | 2013-09-11 | 2013-12-25 | 北京思特奇信息技术股份有限公司 | 一种基于共享内存的键值对存储方法及装置 |
CN103617232B (zh) * | 2013-11-26 | 2018-03-30 | 北京京东尚科信息技术有限公司 | 一种针对HBase表的分页查询方法 |
CN103617232A (zh) * | 2013-11-26 | 2014-03-05 | 北京京东尚科信息技术有限公司 | 一种针对HBase表的分页查询方法 |
CN103699627A (zh) * | 2013-12-20 | 2014-04-02 | 北京遥测技术研究所 | 一种基于Hadoop集群的超大文件并行数据块定位方法 |
CN105574093A (zh) * | 2015-12-10 | 2016-05-11 | 深圳市华讯方舟软件技术有限公司 | 一种在基于HDFS的spark-sql大数据处理系统上建立索引的方法 |
CN105550318A (zh) * | 2015-12-15 | 2016-05-04 | 深圳市华讯方舟软件技术有限公司 | 一种基于Spark大数据处理平台的查询方法 |
CN105760457A (zh) * | 2016-02-05 | 2016-07-13 | 成都康赛信息技术有限公司 | 一种基于MongoDB的数据分页优化方法 |
CN106021357A (zh) * | 2016-05-09 | 2016-10-12 | 泰华智慧产业集团股份有限公司 | 基于分布式的大数据分页查询方法及系统 |
CN106156302A (zh) * | 2016-06-30 | 2016-11-23 | 上海达梦数据库有限公司 | 一种大字段数据的处理方法及装置 |
CN108090086A (zh) * | 2016-11-21 | 2018-05-29 | 迈普通信技术股份有限公司 | 分页查询方法及装置 |
CN106777278A (zh) * | 2016-12-29 | 2017-05-31 | 海尔优家智能科技(北京)有限公司 | 一种基于Spark的数据处理方法及装置 |
CN107169033A (zh) * | 2017-04-17 | 2017-09-15 | 东北大学 | 基于数据模式转换和并行框架的关系数据查询优化方法 |
CN107704585A (zh) * | 2017-10-09 | 2018-02-16 | 郑州云海信息技术有限公司 | 一种查询hdfs数据方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN108874897B (zh) | 2019-09-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102656580B (zh) | 结构化数据的方法、预编译的异常列表引擎和网络设备 | |
RU2004119842A (ru) | Разреженное кэширование для потоковой аудиовизуальной информации | |
CN107256233B (zh) | 一种数据存储方法和装置 | |
CN108205577B (zh) | 一种数组构建、数组查询的方法、装置及电子设备 | |
JP5499825B2 (ja) | データベース管理方法、データベースシステム、プログラム及びデータベースのデータ構造 | |
US11074179B2 (en) | Managing objects stored in memory | |
US20200342294A1 (en) | Neural network accelerating apparatus and operating method thereof | |
CN103488727B (zh) | 基于周期对数的二维时序数据存储和查询方法 | |
CN107959695A (zh) | 一种数据传输方法及装置 | |
JP2002082980A5 (zh) | ||
CN116095029B (zh) | 网络数据流测量方法、系统、终端及存储介质 | |
CN106155913B (zh) | 缓存命中率分析的方法及设备 | |
CN105447187A (zh) | 网页搜索方法及系统 | |
CN108874897B (zh) | 数据查询方法及装置 | |
CN116756253B (zh) | 关系型数据库的数据存储、查询方法、装置、设备和介质 | |
CN107688624B (zh) | 一种日志索引构建方法及装置 | |
CN110825747B (zh) | 一种信息存取方法、装置和介质 | |
CN117033002A (zh) | 一种内存管理方法、装置、设备及存储介质 | |
JP6705764B2 (ja) | 生成装置、生成方法、及び生成プログラム | |
CN109271097A (zh) | 数据处理方法、数据处理装置和服务器 | |
CN108664322A (zh) | 数据处理方法及系统 | |
CN111221814B (zh) | 二级索引的构建方法、装置及设备 | |
CN109857740A (zh) | 字符串的存储方法、匹配方法、电子设备及可读存储介质 | |
KR950033947A (ko) | 프린터 및 캐시 메모리 공간 할당 방법 | |
CN106446080B (zh) | 数据查询的方法、查询服务设备、客户端设备和数据系统 |
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 |