CN105022763B - 实现数据查询的方法和*** - Google Patents
实现数据查询的方法和*** Download PDFInfo
- Publication number
- CN105022763B CN105022763B CN201410183883.4A CN201410183883A CN105022763B CN 105022763 B CN105022763 B CN 105022763B CN 201410183883 A CN201410183883 A CN 201410183883A CN 105022763 B CN105022763 B CN 105022763B
- Authority
- CN
- China
- Prior art keywords
- data
- file
- bucket
- stored
- initial
- 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.)
- Active
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种实现数据查询的方法和***。所述方法包括:一种实现数据查询的方法,包括如下步骤:获取查询请求;定位基于Hive的数据文件分区中所述查询请求对应的桶以及所述桶中的列;读取所述定位得到的桶中的列所对应的数据。所述***包括:请求获取模块,用于获取查询请求;定位模块,用于定位基于Hive的数据文件分区中所述查询请求对应的桶以及所述桶中的列;读取模块,用于读取所述定位得到的桶中的列所对应的数据。采用本发明能提高数据的查询效率。
Description
技术领域
本发明涉及数据处理技术,特别是涉及一种实现数据查询的方法和***。
背景技术
随着数据量以及数据价值的不断增长,传统的数据仓库技术在各种方面都遇到了巨大的障碍,无法满足大数据处理的需求。
Hive是目前互联网企业中用于构建数据仓库、处理海量数据最常用的开源框架,但是由于在进行数据存储是未经过任何优化,导致其在很多场景下不能很好的体现其运行效率,特别是极大地影响了后期的查询效率。
发明内容
基于此,有必要提供一种能提高查询效率的实现数据查询的方法。
此外,还有必要提供一种能提高查询效率的实现数据查询的***。
一种实现数据查询的方法,包括如下步骤:
获取查询请求;
定位基于Hive的数据文件分区中所述查询请求对应的桶以及所述桶中的列;
读取所述定位得到的桶中的列所对应的数据。
在其中一个实施例中,所述定位基于Hive的数据文件分区中所述查询请求对应的桶以及所述桶中的列的步骤包括:
转换所述查询请求为MapReduce任务;
获取元数据,根据所述元数据得到与所述MapReduce任务相关的基于Hive的数据文件分区;
根据定义的数据存储结构对所述MapReduce任务中的查询字段进行计算以得到相应的信息摘要值,并通过所述信息摘要值和预设的桶数量之间的取模得到与所述查询字段对应的数据存储位置,所述数据存储位置用于指示所述查询字段对应的桶和所述桶中的列。
在其中一个实施例中,所述读取所述定位得到的桶中的列所对应的数据的步骤包括:
根据所述查询字段对应的桶中的列进行数据加载,并对所述加载的数据进行处理。
在其中一个实施例中,所述定位基于Hive的数据文件分区中所述查询请求对应的桶以及所述桶中的列的步骤之前,所述方法还包括:
接收输入的原始数据,并将所述原始数据存储为第一数据表结构;
对所述存储为第一数据表结构的原始数据进行优化处理,以将优化处理所得到的数据存入配置文件所配置的基于Hive的数据文件分区中。
在其中一个实施例中,所述接收输入的原始数据,并将所述原始数据存储为第一数据表结构的步骤包括:
通过配置文件配置将所述原始数据存入包含分区信息的数据文件中,其中,被存入所述数据文件的原始数据以JSON格式存储。
在其中一个实施例中,所述对所述加载存储为第一数据表结构的原始数据进行优化处理,以将优化处理所得到的数据存入配置文件所配置的基于Hive的数据文件分区中的步骤包括:
逐一提取存储为第一数据表结构的原始数据中的每一行JSON格式的数据;
通过包含分区信息的数据文件得到对所述第一数据表结构的原始数据进行存储的基于Hive的数据文件的分区位置;
对所述提取的原始数据进行计算以得到相应的信息摘要值,并通过所述信息摘要值和预设的桶数量的取模得到在数据文件的分区中所述原始数据的数据存储位置;
将所述提取的数据进行压缩处理,并在压缩处理后按照所述数据存储位置进行存储。
一种实现数据查询的***,包括:
请求获取模块,用于获取查询请求;
定位模块,用于定位基于Hive的数据文件分区中所述查询请求对应的桶以及所述桶中的列;
读取模块,用于读取所述定位得到的桶中的列所对应的数据。
在其中一个实施例中,所述定位模块包括:
转换单元,用于转换所述查询请求为MapReduce任务;
文件分区获取单元,用于获取元数据,根据所述元数据得到与所述MapReduce任务相关的基于Hive的数据文件分区;
位置获取单元,用于根据定义的数据存储结构对所述MapReduce任务中的查询字段进行计算以得到相应的信息摘要值,并通过所述信息摘要值和预设的桶数量之间的取模得到与所述查询字段对应的数据存储位置,所述数据存储位置用于指示所述查询字段对应的桶和所述桶中的列。
在其中一个实施例中,所述读取模块还用于根据查询字段对应的桶中的列进行数据加载,并对所述加载的数据输出于数据进行处理。
在其中一个实施例中,所述***还包括:
原始数据存储模块,用于接收输入的原始数据,并将所述原始数据存储为第一数据表结构;
优化处理模块,用于对所述存储为第一数据表结构的原始数据进行优化处理,以将优化处理所得到的数据存入配置文件所配置的基于Hive的数据文件分区中。
在其中一个实施例中,所述原始数据存储模块还用于通过配置文件配置将所述原始数据存入包含分区信息的数据文件中,其中,被存入所述数据文件的原始数据以JSON格式存储。
在其中一个实施例中,所述优化处理模块包括:
提取单元,用于逐一提取存储为第一数据表结构的原始数据中的每一行JSON格式的数据;
分区获取单元,用于通过包含分区信息的数据文件得到对所述第一数据表结构的原始数据进行存储的基于Hive的数据文件的分区位置;
位置运算单元,用于对所述提取的原始数据进行计算以得到相应的信息摘要值,并通过所述信息摘要值和预设的桶数量的取模得到在数据文件的分区中所述原始数据的数据存储位置;
存储单元,用于将所述提取的数据相关的原始数据进行压缩处理,并在压缩处理后按照所述数据存储位置进行存储。
上述实现数据查询的方法和***,在获取到数据的查询请求之后,将定位基于Hive的数据文件分区中查询请求所对应的桶以及所述桶中的列,进而输出该列所对应的数据,由于不需要在所有的数据中进行查找,而在查找到查询请求所对应的桶以及列之后所得到的数据即为当前所需要查询的数据,大大提高了查询效率和查询速度,即便对存储的海量数据进行查询也能够完成数据的快速查找。
附图说明
图1为一个实施例中实现数据查询的方法流程图;
图2为图1中定位基于Hive的数据文件分区中查询请求对应的桶以及该桶中的列的方法流程图;
图3为另一个实施例中实现数据查询的方法流程图;
图4为图3中对存储为第一数据表结构的原始数据进行优化处理,以将优化处理所得到的数据存入配置文件所配置的基于Hive的数据文件分区中的方法流程图;
图5为一个实施例中实现数据查询的***的结构示意图;
图6为图5中定位模块的结构示意图;
图7为另一个实施例中实现数据查询的***的结构示意图;
图8为图7中优化处理模块的结构示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
除非上下文另有特定清楚的描述,本发明中的元件和组件,数量既可以单个的形式存在,也可以多个的形式存在,本发明并不对此进行限定。本发明中的步骤虽然用标号进行了排列,但并不用于限定步骤的先后次序,除非明确说明了步骤的次序或者某步骤的执行需要其他步骤作为基础,否则步骤的相对次序是可以调整的。可以理解,本文中所使用的术语“和/或”涉及且涵盖相关联的所列项目中的一者或一者以上的任何和所有可能的组合。
如图1所示,在一个实施例中,一种实现数据查询的方法,包括如下步骤:
步骤S110,获取查询请求。
本实施例中,将提供可视化接口,以获取用户所触发的查询请求,例如,用户可通过以JDBC/ODBC标准的java数据库控件和网页界面等形式存在的数据的查询界面输入查询请求,其中,查询请求可包括用户指定进行查询的数据文件所对应的文件名称、优先等级、查询字段、导出文件路径等信息。
在优选的实施例中,所获取的查询请求将为一个或者多个,因此,将获取的查询请求保存至数据库表,例如mysql表中,以作为若干个可执行的任务有序执行。
具体的,将通过设置定时器实现任务的调度。通过设置的定时器触发计时,以自动循环监控数据库表中保存的未执行的任务,判断是否存在未执行的任务,若为是,则按照优先等级的高低顺序依次执行数据库表中尚未执行的任务,并在执行成功后将该任务的状态更新为已执行。
步骤S130,定位基于Hive的数据文件分区中查询请求对应的桶以及该桶中的列。
本实施例中,基于Hive的数据文件将存在于HDFS(Hadoop分布式文件***)的目录中,每一数据文件均为数据表的形式,并具备相同的数据表结构,以便于进行数据的快速查询。
具体的,数据文件中存储的数据即为表数据,这些数据在Hive中进行分区、分桶存储,也就是说,分区是在Hive中创建一个目录,其目录名为分区信息,然后将数据分桶存入该目录中,以实现数据存储的优化过程,进而使得在数据的查询过程中只需要查找到数据所在的桶,再对桶中的数据进行查找即可得到所需要的数据,而不需要对所有存储的数据进行逐一查找,有效地提高查询效率,也减少了内存的需求,减低了数据在网络间的传输。
步骤S150,读取定位得到的桶中的列所对应的数据。
本实施例中,根据查询请求中的查询字段在定位得到的桶中进行数据查找,以得到与该查询字段相关的列,进而读取该列所对应的数据,该数据即为当前进行数据查询的查询结果。
进一步的,所得到的与查询请求中的查询字段相关的数据大都较多,因此,将将读取的数据合并成一个文件,并提示用户当前所进行的数据查找执行成功,在数据的查询界面中提供查询结果导出链接,以方便用户导出包含了大量查询结果的文件。
进一步的,还将由读取的数据合并得到的文件保存至压缩文件中,以节省存储空间,在优选的实施例中,该压缩文件为cvs(Comma Separated Value)压缩文件。
如图2所示,在一个实施例中,上述步骤S130的具体过程为:
步骤S131,转换查询请求为MapReduce任务。
本实施例中,查询请求为HQL语句,获取得查询请求之后,在底层将其转换为相应的MapReduce任务,进而对分布于各个节点的数据进行并行处理,将有效提高处理效率。
步骤S133,获取元数据,根据元数据得到与MapReduce任务相关的基于Hive的数据文件分区。
本实施例中,元数据包括了数据所在数据文件的文件名称,该文件名称将指示了数据文件中数据所在的分区等信息,因此,根据元数据即可得到与MapReduce任务相关的基于Hive的数据文件所在的待查询的分区,进而实现数据的粗略查找。
步骤S135,根据定义的数据存储结构对MapReduce任务中的查询字段进行计算以得到相应的信息摘要值,并通过信息摘要值和预设的桶数量的取模得到与查询字段对应的数据存储位置,该数据存储位置用于指示查询字段对应的桶和桶中的列。
本实施例中,提取MapReduce任务中的查询字段,以对该查询字段进行信息摘要值的计算,例如,可通过Hash(哈希)算法实现,以得到相应的信息摘要值。所提取的查询字段将是根据进行数据存储时定义的数据存储结构指定的,因此,并不需要提取所有的查询字段进行信息摘要值的计算。具体的,在进行数据存储时将根据定义的字段进行指定,例如,将通过语句“create table ip_login(`uid`string,`ip`string,`time`int)PARTITIONEDBY(tm int)CLUSTERED BY(`uid`)SORTED BY(`uid`)INTO2BUCKETS STORED AS ORC”实现数据的存储,其中,需要进行信息摘要值计算的查询字段将由CLUSTERED BY指定。
计算得到相应的信息摘要值之后,将通过信息摘要值和预设的桶数量进行数据的分桶,进而得到与该查询字段相关的数据所在的桶。具体的,将用计算所得到的信息摘要值和预设的桶数量取模来进行数据存储位置的切分,以精确得到与查询字段相关的数据所对应的数据存储位置,即存储了与查询字段相关的数据的桶。
例如,如上所述列举的语句中,由CLUSTERED BY指定的需要进行信息摘要值计算的查询字段为uid字段,此时,将通过uid字段计算信息摘要值,然后通过该值和桶数量,即“2BUCKETS”中的“2”取模得到对应的数据存储位置。
此时,将在存储了与查询字段相关的数据的桶所限定的区域进行数据的查询,以查找得到存储了与查询字段相关的数据的列。
通过如上所述的数据查询,将不需要对所有数据文件进行数据的查询即可实现数据的精细查询,进而使得数据的查询可随意应用于海量数据,在提高了查询效率和查询速度的同时也提高了查询的精确度。
在一个实施例中,上述步骤S150的具体过程为:根据查询字段对应的桶中的列进行数据加载,并对加载的数据进行处理。
本实施例中,加载记录于查询字段对应的桶中的列的数据,并通过加载的数据进行适当处理,以便于向用户提供相应的查询结果。具体的,对加载的数据所进行的处理可以是将加载的数据可逐一显示于数据的查询界面中;也可合并为一个文件,并按照预设的路径进行存储,进而在数据的查询界面中提供查询结果导出链接,即该文件的导出路径,用户可通过导出文件的方式进行查询结果的查看;也可以是对该列进行相应的计算,例如,与其它数据文件相关联、列值去重等。
如图3所示,在一个实施例中,上述步骤S130之前,该方法还包括如下步骤:
步骤S210,接收输入的原始数据,并将原始数据存储为第一数据表结构。
本实施例中,第一数据表结构定义了原始数据的存储结构。将接收不同数据源的原始数据输入,此时,将原始数据按照第一数据表结构直接存储至HDFS的相应目录中。
具体的,原始数据的加载将不会对该原始数据进行任何的校验、压缩等优化操作,而只是按照第一数据表结构将原始数据直接上传到HDFS的相应目录中。
这一第一数据表结构所对应的数据文件也将是数据表的形式,并且也将只保存本次加载的原始数据,再次进行原始数据的加载时将直接覆盖原有的原始数据。
进一步的,该第一数据表结构所对应的数据文件中,其文件名称将通过配置文件进行配置,例如,可以是原始数据所对应的实际文件名称附加上相应的标识,例如,user_gambling_text,其中,user_gambling即为原始数据所对应的实际文件名称,text为附加的标识。
步骤S230,对存储为第一数据表结构的原始数据进行优化处理,以将优化处理所得到的数据存入配置文件所配置的基于Hive的数据文件分区中。
本实施例中,将对存储为第一数据表结构的原始数据进行分区、分桶、排序等优化处理,以优化数据的存储方式,进而将优化处理所得到的数据存入基于Hive的数据文件分区中,使当期数据与历史数据相分离,大为提升存储和处理效率。
进一步的,通过配置文件为优化处理所得到的数据配置相应的数据文件,以得到相应的元数据,进而便于进行数据的存入和查询。
在一个实施例中,上述步骤S210的具体过程为:
通过配置文件将原始数据存入包含分区信息的数据文件中,其中,被存入该数据文件的原始数据中每一列原始数据以JSON格式存储。
本实施例中,通过配置文件为当前所进行的原始数据存入配置相应的元数据,即加载为第一数据表结构的原始数据配置数据文件所对应的文件名,根据配置文件的定义,此时数据文件的文件名即为原始数据所对应的实际文件名称附加上相应的标识,包含了相应的分区信息,根据文件名即可获知原始数据所存储的数据文件的分区。
进一步的,存储数据文件的原始数据将以列为单位实现原始数据的存入,即每一列原始数据都将以JSON格式进行存储,。原始数据中每一行均包含了多个列,因此,在将原始数据按照第一数据表结构进行存储时,将提取每一列所对应的原始数据按照JSON格式进行存储,并将每一列原始数据之间以字符或者其它形式分隔开来,例如“-”或者tab键,以便于在后续的存储过程中得以按照列为单位进行存储。如图4所示,在一个实施例中,上述步骤S230的具体过程为:
步骤S231,逐一提取存储为第一数据表结构的原始数据中的每一行JSON格式的数据。
步骤S232,通过包含分区信息的数据文件得到对第一数据表结构的原始数据进行存储的基于Hive的数据文件的分区位置。
本实施例中,通过配置文件中定义的规则为第一数据表结构的原始数据配置相应的元数据,即用于指示存入被加载为第一数据表结构的原始数据的数据文件所对应的文件名,由于数据文件即为数据表,因此,该文件名将包括了原始数据即将存入的数据表名和原始数据在数据表中被存入的分区信息。例如,“user_gambling-plat=604,tm=20130930-20131001-0”这一文件名中,user_gambling为数据表名,plat=604,tm=20130930则表示原始数据将被存储于分区plat=604下的子分区tm=20130930中。
进一步的,通过文件名得到当前所进行的原始数据的存储的分区信息,即“plat”和“tm”这两个字段所对应的数值。例如,可根据该原始数据的实际文件名取第三个索引和第一个索引,根据第三个索引得到字段“plat”所对应的数值,根据第一个索引得到字段“tm”所对应的数值,进而形成相关的分区信息。
步骤S233,对提取的原始数据进行计算以得到相应的信息摘要值,并通过信息摘要值和预设的桶数量的取模得到在数据文件的分区中原始数据的数据存储位置。
本实施例中,如上所述,该数据存储位置将指示了即将存入的数据文件的分区和桶,进而实现精确存储。
步骤S234,将提取的数据进行压缩处理,并在压缩处理后按照数据存储位置进行存储。
本实施例中,获取这一提取的数据,对其进行压缩处理,以节省存储空间,进而在完成压缩处理后按照得到的数据存储位置进行存入数据文件中。
进一步的,用于实现数据优化存入的数据文件为列式存储文件,将按照每一列中原始数据的类型选取最优的压缩格式进行压缩处理,以最大化的减少所占用的存储空间。
例如,该列式存储文件可以为ORC文件,每个ORC文件由多个stripes组成,其中,stripes由一个轻量级的索引、列数据以及stripe脚本组成,索引默认存储了预设数量行数据中列的最大值和最小值,以用于在数据的查询过程中准确定位数据的查询范围,从而节省大量的输入和输出操作。
进一步的,还将对存入的原始数据根据提取的原始数据进行排序,以进一步加快数据的查询速度。
在实际运营过程中,将保留两份数据文件,并置于两台不同的机器中,以确保集群中任何一台机器损坏后可以自动恢复,同是也提高了处理的并发性。
如图5所示,在一个实施例中,一种实现数据查询的***,包括请求获取模块110、定位模块130和输出模块150。
请求获取模块110,用于获取查询请求。
本实施例中,请求获取模块110将提供可视化接口,以获取用户所触发的查询请求,例如,用户可通过以JDBC/ODBC标准的java数据库控件和网页界面等形式存在的数据的查询界面输入查询请求,其中,查询请求可包括用户指定进行查询的数据文件所对应的文件名称、优先等级、查询字段、导出文件路径等信息。
在优选的实施例中,请求获取模块110所获取的查询请求将为一个或者多个,因此,将获取的查询请求保存至数据库表,例如mysql表中,以作为若干个可执行的任务有序执行。
具体的,将通过设置定时器实现任务的调度。通过设置的定时器触发计时,以自动循环监控数据库表中保存的未执行的任务,判断是否存在未执行的任务,若为是,则按照优先等级的高低顺序依次执行数据库表中尚未执行的任务,并在执行成功后将该任务的状态更新为已执行。
定位模块130,用于定位基于Hive的数据文件分区中查询请求对应的桶以及该桶中的列。
本实施例中,基于Hive的数据文件将存在于HDFS的目录中,每一数据文件均为数据表的形式,并具备相同的数据表结构,以便于进行数据的快速查询。
具体的,数据文件中存储的数据即为表数据,这些数据在Hive中进行分区、分桶存储,也就是说,分区是在Hive中创建一个目录,其目录名为分区信息,然后将数据分桶存入该目录中,以实现数据存储的优化过程,进而使得在数据的查询过程中定位模块130只需要查找到数据所在的桶,再对桶中的数据进行查找即可得到所需要的数据,而不需要对所有存储的数据进行逐一查找,有效地提高查询效率,也减少了内存的需求,减低了数据在网络间的传输。
读取模块150,用于读取定位得到的桶中的列所对应的数据。
本实施例中,根据查询请求中的查询字段在定位得到的桶中进行数据查找,以得到与该查询字段相关的列,进而读取模块150读取该列所对应的数据,该数据即为当前进行数据查询的查询结果。
进一步的,所得到的与查询请求中的查询字段相关的数据大都较多,因此,读取模块150将将读取的数据合并成一个文件,并提示用户当前所进行的数据查找执行成功,在数据的查询界面中提供查询结果导出链接,以方便用户导出包含了大量查询结果的文件。
进一步的,读取模块150还将由读取的数据合并得到的文件保存至压缩文件中,以节省存储空间,在优选的实施例中,该压缩文件为cvs压缩文件。
如图6所示,在一个实施例中,上述定位模块130包括转换单元131、文件分区获取单元133和位置获取单元135。
转换单元131,用于转换查询请求为MapReduce任务。
本实施例中,查询请求为HQL语句,获取得查询请求之后,转换单元131在底层将其转换为相应的MapReduce任务,进而对分布于各个节点的数据进行并行处理,将有效提高处理效率。
文件分区获取单元133,用于获取元数据,根据元数据得到与MapReduce任务相关的基于Hive的数据文件。
本实施例中,元数据包括了数据所在数据文件的文件名称,该文件名称将指示了数据文件中数据所在的分区等信息,因此,文件分区获取单元133根据元数据即可得到与MapReduce任务相关的基于Hive的数据文件所在的待查询的分区,进而实现数据的粗略查找。
位置获取单元135,用于根据定义的数据存储结构对MapReduce任务中的查询字段进行计算以得到相应的信息摘要值,并通过信息摘要值和预设的桶数量的取模得到与查询字段对应的数据存储位置,数据存储位置用于指示查询字段对应的桶和桶中的列。
本实施例中,位置获取单元135提取MapReduce任务中的查询字段,以对该查询字段进行信息摘要值的计算,例如,可通过Hash(哈希)算法实现,以得到相应的信息摘要值。
位置获取单元135所提取的查询字段将是根据进行数据存储时定义的数据存储结构指定的,因此,并不需要提取所有的查询字段进行信息摘要值的计算。具体的,在进行数据存储时将根据定义的字段进行指定,例如,将通过语句“create table ip_login(`uid`string,`ip`string,`time`int)PARTITIONED BY(tm int)CLUSTERED BY(`uid`)SORTEDBY(`uid`)INTO2BUCKETS STORED AS ORC”实现数据的存储,其中,需要进行信息摘要值计算的查询字段将由CLUSTERED BY指定。
计算得到相应的信息摘要值之后,位置获取单元135将通过信息摘要值和预设的桶数量进行数据的分桶,进而得到与该查询字段相关的数据所在的桶。具体的,位置获取单元135将用计算所得到的信息摘要值和预设的桶数量取模来进行数据存储位置的切分,以精确得到与查询字段相关的数据所对应的数据存储位置,即存储了与查询字段相关的数据的桶。
例如,如上所述列举的语句中,由CLUSTERED BY指定的需要进行信息摘要值计算的查询字段为uid字段,此时,将通过uid字段计算信息摘要值,然后通过该值和桶数量,即“2BUCKETS”中的“2”取模得到对应的数据存储位置。
此时,位置获取单元135将在存储了与查询字段相关的数据的桶所限定的区域进行数据的查询,以查找得到存储了与查询字段相关的数据的列。
通过如上所述的数据查询,将不需要对所有数据文件进行数据的查询即可实现数据的精细查询,进而使得数据的查询可随意应用于海量数据,在提高了查询效率和查询速度的同时也提高了查询的精确度。
在一个实施例中,读取模块150还用于根据查询字段对应的桶中的列进行数据加载,并对加载的数据进行处理。
本实施例中,读取模块150加载记录于查询字段对应的桶中的列的数据,并通过加载的数据进行适当处理,以便于向用户提供相应的查询结果。具体的,读取模块150对加载的数据所进行的处理可以是将加载的数据可逐一显示于数据的查询界面中;也可合并为一个文件,并按照预设的路径进行存储,进而在数据的查询界面中提供查询结果导出链接,即该文件的导出路径,用户可通过导出文件的方式进行查询结果的查看;也可以是对该列进行相应的计算,例如,与其它数据文件相关联、列值去重等。
如图7所示,在另一个实施例中,上述***还包括原始数据存储模块210和优化处理模块230。
原始数据存储模块210,用于接收输入的原始数据,并将原始数据存储为第一数据表结构。
本实施例中,第一数据表结构定义了原始数据的存储结构。原始数据存储模块210将接收不同数据源的原始数据输入,此时,将原始数据按照第一数据表结构直接存储至HDFS的相应目录中。
具体的,原始数据的加载将不会对该原始数据进行任何的校验、压缩等优化操作,而只是按照第一数据表结构将原始数据直接上传到HDFS的相应目录中。
这一第一数据表结构所对应的数据文件也将是数据表的形式,并且也将只保存本次加载的原始数据,再次进行原始数据的加载时将直接覆盖原有的原始数据。
进一步的,该第一数据表结构所对应的数据文件中,其文件名称将通过配置文件进行配置,例如,可以是原始数据所对应的实际文件名称附加上相应的标识,例如,user_gambling_text,其中,user_gambling即为原始数据所对应的实际文件名称,text为附加的标识。
优化处理模块230,用于对存储为第一数据表结构的原始数据进行优化处理,以将优化处理所得到的数据存入配置文件所配置的基于Hive的数据文件分区中。
本实施例中,优化处理模块230将对存储为第一数据表结构的原始数据进行分区、分桶、排序等优化处理,以优化数据的存储方式,进而将优化处理所得到的数据存入基于Hive的数据文件分区中,使当期数据与历史数据相分离,大为提升存储和处理效率。
进一步的,优化处理模块230通过配置文件为优化处理所得到的数据配置相应的数据文件,以得到相应的元数据,进而便于进行数据的存入和查询。
在一个实施例中,上述原始数据加载模块210还用于通过配置文件将原始数据存入包含分区信息数据文件中,其中,被存入数据文件的原始文件以JSON格式存储来。
本实施例中,原始数据存储模块210通过配置文件为当前所进行的原始数据存入配置相应的元数据,即加载为第一数据表结构的原始数据配置数据文件所对应的文件名,根据配置文件的定义,此时数据文件的文件名即为原始数据所对应的实际文件名称附加上相应的标识,包含了相应的分区信息,根据文件名即可获知原始数据所存储的数据文件的分区。
进一步的,原始数据存储模块210存储数据文件的原始数据将以列为单位实现原始数据的存入,即每一列原始数据都将以JSON格式进行存储,。原始数据中每一行均包含了多个列,因此,在将原始数据按照第一数据表结构进行存储时,原始数据存储模块210将提取每一列所对应的原始数据按照JSON格式进行存储,并将每一列原始数据之间以字符或者其它形式分隔开来,例如“-”或者tab键,以便于在后续的存储过程中得以按照列为单位进行存储。
如图8所示,在一个实施例中,上述优化处理模块230包括提取单元231、分区获取单元233、位置运算单元235和存储单元237。
提取单元231,用于逐一提取存储为第一数据表结构的原始数据中的每一行JSON格式的数据。
分区获取单元233,用于通过包含分区信息的数据文件得到对第一数据表结构的原始数据进行存储的基于Hive的数据文件的分区位置。
本实施例中,分区获取单元233通过配置文件中定义的规则为第一数据表结构的原始数据配置相应的元数据,即用于指示存入被加载为第一数据表结构的原始数据的数据文件所对应的文件名,由于数据文件即为数据表,因此,该文件名将包括了原始数据即将存入的数据表名和原始数据在数据表中被存入的分区信息。例如,“user_gambling-plat=604,tm=20130930-20131001-0”这一文件名中,user_gambling为数据表名,plat=604,tm=20130930则表示原始数据将被存储于分区plat=604下的子分区tm=20130930中。
进一步的,分区获取单元233通过文件名得到当前所进行的原始数据的存储的分区信息,即“plat”和“tm”这两个字段所对应的数值。例如,可根据该原始数据的实际文件名取第三个索引和第一个索引,根据第三个索引得到字段“plat”所对应的数值,根据第一个索引得到字段“tm”所对应的数值,进而形成相关的分区信息。
位置运算单元25,用于对提取的原始数据进行计算以得到相应的信息摘要值,并通过信息摘要值和预设的桶数量的取模得到在数据文件的分区中原始数据的数据存储位置。
本实施例中,如上所述,该数据存储位置将指示了即将存入的数据文件的分区和桶,进而实现精确存储。
存储单元237,用于将提取的数据相关的原始数据进行压缩处理,并在压缩处理后按照数据存储位置进行存储。
本实施例中,存储单元237获取这一提取的数据,对其进行压缩处理,以节省存储空间,进而在完成压缩处理后按照得到的数据存储位置进行存入数据文件中。
进一步的,用于实现数据优化存入的数据文件为列式存储文件,存储单元237将按照每一列中原始数据的类型选取最优的压缩格式进行压缩处理,以最大化的减少所占用的存储空间。
例如,该列式存储文件可以为ORC文件,每个ORC文件由多个stripes组成,其中,stripes由一个轻量级的索引、列数据以及stripe脚本组成,索引默认存储了预设数量行数据中列的最大值和最小值,以用于在数据的查询过程中准确定位数据的查询范围,从而节省大量的输入和输出操作。
进一步的,存储单元237还将对存入的原始数据根据提取的原始数据进行排序,以进一步加快数据的查询速度。
在实际运营过程中,将保留两份数据文件,并置于两台不同的机器中,以确保集群中任何一台机器损坏后可以自动恢复,同是也提高了处理的并发性。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
Claims (10)
1.一种实现数据查询的方法,包括如下步骤:
获取查询请求;
转换所述查询请求为MapReduce任务;
获取元数据,根据所述元数据得到与所述MapReduce任务相关的基于Hive的数据文件分区;
根据定义的数据存储结构对所述MapReduce任务中的查询字段进行计算以得到相应的信息摘要值,并通过所述信息摘要值和预设的桶数量之间的取模得到与所述查询字段对应的数据存储位置,所述数据存储位置用于指示所述查询字段对应的桶和所述桶中的列;
读取所述定位得到的桶中的列所对应的数据。
2.根据权利要求1所述的方法,其特征在于,所述读取所述定位得到的桶中的列所对应的数据的步骤包括:
根据所述查询字段对应的桶中的列进行数据加载,并对所述加载的数据进行处理。
3.根据权利要求1所述的方法,其特征在于,所述转换所述查询请求为MapReduce任务的步骤之前,所述方法还包括:
接收输入的原始数据,并将所述原始数据存储为第一数据表结构;
对所述存储为第一数据表结构的原始数据进行优化处理,以将优化处理所得到的数据存入配置文件所配置的基于Hive的数据文件分区中。
4.根据权利要求3所述的方法,其特征在于,所述接收输入的原始数据,并将所述原始数据存储为第一数据表结构的步骤包括:
通过配置文件配置将所述原始数据存入包含分区信息的数据文件中,其中,被存入所述数据文件的原始数据以JSON格式存储。
5.根据权利要求3所述的方法,其特征在于,所述对所述存储为第一数据表结构的原始数据进行优化处理,以将优化处理所得到的数据存入配置文件所配置的基于Hive的数据文件分区中的步骤包括:
逐一提取存储为第一数据表结构的原始数据中的每一行JSON格式的数据;
通过包含分区信息的数据文件得到对所述第一数据表结构的原始数据进行存储的基于Hive的数据文件的分区位置;
对所述提取的数据进行计算以得到相应的信息摘要值,并通过所述信息摘要值和预设的桶数量的取模得到在数据文件的分区中所述原始数据的数据存储位置;
将所述提取的数据进行压缩处理,并在压缩处理后按照所述数据存储位置进行存储。
6.一种实现数据查询的***,其特征在于,包括:
请求获取模块,用于获取查询请求;
定位模块,用于转换所述查询请求为MapReduce任务,获取元数据,根据所述元数据得到与所述MapReduce任务相关的基于Hive的数据文件分区,根据定义的数据存储结构对所述MapReduce任务中的查询字段进行计算以得到相应的信息摘要值,并通过所述信息摘要值和预设的桶数量之间的取模得到与所述查询字段对应的数据存储位置,所述数据存储位置用于指示所述查询字段对应的桶和所述桶中的列;
读取模块,用于读取所述定位得到的桶中的列所对应的数据。
7.根据权利要求6所述的***,其特征在于,所述读取模块还用于根据查询字段对应的桶中的列进行数据加载,并对所述加载的数据输出于数据进行处理。
8.根据权利要求6所述的***,其特征在于,所述***还包括:
原始数据存储模块,用于接收输入的原始数据,并将所述原始数据存储为第一数据表结构;
优化处理模块,用于对所述存储为第一数据表结构的原始数据进行优化处理,以将优化处理所得到的数据存入配置文件所配置的基于Hive的数据文件分区中。
9.根据权利要求8所述的***,其特征在于,所述原始数据存储模块还用于通过配置文件配置将所述原始数据存入包含分区信息的数据文件中,其中,被存入所述数据文件的原始数据以JSON格式存储。
10.根据权利要求8所述的***,其特征在于,所述优化处理模块包括:
提取单元,用于逐一提取存储为第一数据表结构的原始数据中的每一行JSON格式的数据;
分区获取单元,用于通过包含分区信息的数据文件得到对所述第一数据表结构的原始数据进行存储的基于Hive的数据文件的分区位置;
位置运算单元,用于对所述提取的数据进行计算以得到相应的信息摘要值,并通过所述信息摘要值和预设的桶数量的取模得到在数据文件的分区中所述原始数据的数据存储位置;
存储单元,用于将所述提取的数据相关的原始数据进行压缩处理,并在压缩处理后按照所述数据存储位置进行存储。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410183883.4A CN105022763B (zh) | 2014-04-30 | 2014-04-30 | 实现数据查询的方法和*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410183883.4A CN105022763B (zh) | 2014-04-30 | 2014-04-30 | 实现数据查询的方法和*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105022763A CN105022763A (zh) | 2015-11-04 |
CN105022763B true CN105022763B (zh) | 2019-03-26 |
Family
ID=54412742
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410183883.4A Active CN105022763B (zh) | 2014-04-30 | 2014-04-30 | 实现数据查询的方法和*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105022763B (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105808661B (zh) * | 2016-02-29 | 2019-03-08 | 浪潮天元通信信息***有限公司 | 一种数据查询的方法及装置 |
CN106682838A (zh) * | 2016-12-30 | 2017-05-17 | 北京水兵壹号科技有限公司 | 基于大数据的桶装水配送方法和装置 |
CN108322331B (zh) * | 2017-12-28 | 2020-11-06 | 国网智能科技股份有限公司 | 一种可动态调整交互测点的通信方法及*** |
CN109902126B (zh) * | 2019-02-18 | 2021-12-07 | 国家计算机网络与信息安全管理中心 | 支持hive自动分区的加载***及其实现方法 |
CN110362577B (zh) * | 2019-07-10 | 2020-06-09 | 星环信息科技(上海)有限公司 | 一种数据***方法、装置、设备和储存介质 |
CN112286587A (zh) * | 2020-06-29 | 2021-01-29 | 上海柯林布瑞信息技术有限公司 | 数据可视化页面加载方法及装置、服务器、客户端、介质 |
CN112231351A (zh) * | 2020-10-14 | 2021-01-15 | 广东亿迅科技有限公司 | 一种pb级海量数据的实时查询方法和装置 |
CN113284573A (zh) * | 2021-06-02 | 2021-08-20 | 山东健康医疗大数据有限公司 | 一种文档数据库检索方法与装置 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8224825B2 (en) * | 2010-05-31 | 2012-07-17 | Microsoft Corporation | Graph-processing techniques for a MapReduce engine |
CN102609487B (zh) * | 2012-01-20 | 2014-04-02 | 东华大学 | 一种面向列存储的桶内索引哈希连接方法 |
CN102685221B (zh) * | 2012-04-29 | 2014-12-03 | 华北电力大学(保定) | 一种状态监测数据的分布式存储与并行挖掘方法 |
CN103425762A (zh) * | 2013-08-05 | 2013-12-04 | 南京邮电大学 | 基于Hadoop平台的电信运营商海量数据处理方法 |
CN103440288A (zh) * | 2013-08-16 | 2013-12-11 | 曙光信息产业股份有限公司 | 一种大数据存储方法及装置 |
-
2014
- 2014-04-30 CN CN201410183883.4A patent/CN105022763B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN105022763A (zh) | 2015-11-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105022763B (zh) | 实现数据查询的方法和*** | |
US11423082B2 (en) | Methods and apparatus for subgraph matching in big data analysis | |
CN103020204B (zh) | 一种对分布式顺序表进行多维区间查询的方法及其*** | |
CN106528787B (zh) | 一种基于海量数据多维分析的查询方法及装置 | |
US20170124151A1 (en) | Optimization of continuous queries in hybrid database and stream processing systems | |
US20140108414A1 (en) | Scalable distributed processing of rdf data | |
CN108694195B (zh) | 一种分布式数据仓库的管理方法及*** | |
US9652498B2 (en) | Processing queries using hybrid access paths | |
US10353863B1 (en) | Utilizing machine learning to determine data storage pruning parameters | |
US8880511B2 (en) | Database query optimization and cost estimation | |
CN105117442B (zh) | 一种基于概率的大数据查询方法 | |
US20180129708A1 (en) | Query processing management in a database management system | |
WO2015087237A1 (en) | Incremental and collocated redistribution for expansion of online shared nothing database | |
CN107943952A (zh) | 一种基于Spark框架进行全文检索的实现方法 | |
CN105740264A (zh) | 一种分布式xml数据库的排序方法及装置 | |
CN109669925A (zh) | 非结构化数据的管理方法及装置 | |
Aljubayrin et al. | Finding non-dominated paths in uncertain road networks | |
JP5774513B2 (ja) | ファイルリスト生成方法及びシステム並びにプログラム、ファイルリスト生成装置 | |
CN108090186A (zh) | 一种大数据平台上的电力数据去重方法 | |
JP6084700B2 (ja) | 検索システム及び検索方法 | |
CN111522918A (zh) | 数据汇聚方法、装置、电子设备及计算机可读存储介质 | |
KR101515304B1 (ko) | 하둡 기반의 리듀스-사이드 조인 처리 시스템의 리듀스-사이드 조인 질의 처리 방법 | |
CN108121807A (zh) | Hadoop环境下多维索引结构OBF-Index的实现方法 | |
JP2015176407A (ja) | 検索装置、検索方法、検索用プログラムおよび検索用データ構造 | |
GB2520936A (en) | Method and system for performing search queries using and building a block-level index |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C41 | Transfer of patent application or patent right or utility model | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20161114 Address after: 518000 Guangdong city of Shenzhen province Nanshan District Xili liuxiandong Zhongshan Road No. 1001 TCL Science Park R & D building D3 8 storey building A room 801 unit Applicant after: Shenzhen City, Oriental Boya Technology Co. Ltd. Address before: 518057 Guangdong city of Shenzhen province Nanshan District Zhongshan Road No. 1001 TCL Industrial Park International City building D3 9B-C E Applicant before: Burson Marsteller network game development (Shenzhen) Co., Ltd. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |