一种针对复杂查询的分组入数据集市方法与流程

文档序号:20918026发布日期:2020-05-29 13:47阅读:207来源:国知局
一种针对复杂查询的分组入数据集市方法与流程

本发明涉及数据集市存储技术领域,更具体的说是涉及一种针对复杂查询的分组入数据集市方法。



背景技术:

目前,现代信息技术已进入大数据时代。如何快捷的构建满足特定用户和部门的需求的数据存储,已成为数据中心急需解决的问题。数据集市是从企业范围内的数据仓库,数据库或者各种各样的数据源抽取出来,按照列式数据进行存储的一种面向决策分析需求的数据立方体。其中包括维度,维度的层次,需要计算的度量等。在各种各样的海量源数据导入到数据集市过程中,对于复杂的抽取需求,其查询性能可能呈数量级单位的下降。解决复杂数据抽取所衍生出来的复杂查询导入数据集市的性能问题成为迫切需要。

源数据导入数据集市大体可以分为三步。首先,连接数据源进行源数据查询、抽取、加工,并把查询结果加载至内存中;其次,对内存中的数据进行列式压缩,数据重新组织为列式存储;最后,生成具体的数据块文件,分发到数据集市节点中存储。

由于需求的多样性和复杂性,对源数据的查询,抽取加工处理可能会转化为源数据的复杂查询。但是,传统对复杂查询分组入数据集市和普通查询分组入数据集市的处理方式并无区别:根据分组列查询出分组不同值,然后将不同值作为过滤条件分别加入对源数据的查询中。这样就会产生更多次的复杂查询,导入数据集市速度受会到严重影响,甚至会影响到整个系统的稳定。

源数据导入数据集市的另外一个关键点为系统内存使用问题。对于海量数据的处理,导入到数据集市中,中间要经过系统对数据转列式存储与压缩处理。如何降低内存峰值,减少对象生命周期时间也是急需解决的问题之一。

因此,如何加快数据入数据集市的速度,降低复杂查询影响,同时如何在数据集市存储过程中降低内存峰值是本领域技术人员亟需解决的问题。



技术实现要素:

有鉴于此,本发明提供了一种针对复杂查询的分组入数据集市方法,在数据从数据源抽取到数据集市的过程中,对有复杂需求的数据抽取,针对可能会产生复杂的数据源查询的情况,提出了一种分组的加速入集市方法。首先通过对源数据分组列的特征分析判断出否能分组,然后根据分组列的不同值进行拆分,最后将拆分后的数据导入数据集市。为了加速入集市的过程,同时减少内存压力,数据将以“块”的单位进行处理,并且把分组信息加入到最后生成数据块的元信息,数据拆分过程和数据导入过程将同步进行,提高了数据入数据集市的速度。其中还包括评估入数据集市的可行性,根据分组列不同值在内存中对数据块进行分割以降低复杂查询的次数为1。

为了实现上述目的,本发明采用如下技术方案:

一种针对复杂查询的分组入数据集市方法,包括如下具体步骤:

步骤1:加载源数据,对所述源数据进行复杂查询,并在所述复杂查询中加入分组列的排序信息,对所述源数据进行特征分析,满足分割特征的所述源数据存储至内存中;否则,所述源数据按照所述排序信息的顺序生成数据块导入至数据集市节点;

步骤2:在所述内存中对所述源数据根据所述分组列的不同值进行分割,获得所述数据块;

步骤3:在所述数据块中增加元数据信息,获得增强数据块;

步骤4:将所述增强数据块进行压缩,获得压缩数据块,并将所述压缩数据块分发到所述数据集市节点。

优选的,源数据加载复杂查询过程、源数据分割过程和添加信息压缩数据块入所述数据集市的过程,分别设置为三个线程模型,并采用数据流式处理进行并行处理。

优选的,在所述步骤1中进行所述复杂查询时,在数据查询层根据所述分组列的所述排序信息对所述源数据进行排序。

优选的,分组后的所述数据块具有相同的数据特征,将所述数据特征记录成所述元数据信息。

优选的,所述源数据的所述加载为流式加载。

优选的,如果所述复杂查询的查询api接口中支持设置排序列,则将所述排序信息追加到所述api接口中,将排序运算压力下推到所述数据集市中;否则使用timsort排序算法完成所述源数据的排序操作。

优选的,所述步骤1中对所述源数据进行特征分析是以所述分组列对所述源数据进行额外查询,判断所述源数据是否满足分组条件,具体过程如下:

步骤11:获取所述分组列类型、所述不同值的个数和每组所述分组类的平均数据量;

步骤12:如果所述分组类类型不是数据,且所述不同值个数小于设定最大值,当所述平均数据量大于加载的所述源数据时,所述源数据满足所述分组条件。

经由上述的技术方案可知,与现有技术相比,本发明公开提供了一种针对复杂查询的分组入数据集市方法,对源数据进行复杂查询,并根据排序信息进行排序,通过分组类的查询操作,根据分组条件对源数据进行分块处理,从而将复杂查询次数降低为1次;而对对源数据的复杂查询、分组和分块处理为并行处理,且对数据块采用流式处理进行存储,将分组信息加入到数据块中则加快了数据入数据集市的速度,以及对数据块进行压缩,减少了存储空间的使用。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1附图为本发明提供的针对复杂查询分组如数据集市方法流程图;

图2附图为本发明提供的对源数据进行分组判断流程图;

图3附图为本发明提供的分组类界面显示示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明实施例公开了一种针对复杂查询的分组入数据集市方法,包括如下具体步骤:

s1:加载源数据,对源数据进行复杂查询,并在复杂查询中加入分组列的排序信息,对源数据进行特征分析,满足分割特征的源数据存储至内存中;否则,源数据按照排序信息的顺序生成数据块导入至数据集市节点,其中生成数据块的过程为,对源数据按照顺序进行遍历,当遍历的数据满足一个数据块大小时,则生成一个数据块,并开始生成下一个数据块,直至遍历结束;

对源数据进行特征分析是以分组列对源数据进行额外查询,判断源数据是否满足分组条件,

s11:获取分组列类型、不同值的个数和每组分组类的平均数据量;

s12:如果分组类类型不是数据,且不同值个数小于设定最大值,当平均数据量大于加载的源数据时,源数据满足分组条件;

s2:在内存中对源数据根据分组列的不同值进行分割,获得数据块;

s3:在数据块中增加元数据信息,获得增强数据块;

s4:将增强数据块进行压缩,获得压缩数据块,并将压缩数据块分发到数据集市节点。

为了进一步优化上述技术方案,源数据加载复杂查询过程、源数据分割过程和添加信息压缩数据块入数据集市的过程,分别设置为三个线程模型,并采用数据流式处理进行并行处理。

为了进一步优化上述技术方案,在s1进行复杂查询时,在数据查询层根据分组列的排序信息对源数据进行排序,可以将相同值聚集在一起,方便后续s2中在内存中分割成为数据块时,降低内存使用,提高效率。

为了进一步优化上述技术方案,分组后的数据块具有相同的数据特征,将数据特征记录成元数据信息。元数据信息可以在采用数据集市查询数据的时候用作过滤条件,这样过滤查询的效率会非常高,同时还可以根据数据块的元数据信息删除特定的数据块。

为了进一步优化上述技术方案,源数据的加载为流式加载。

为了进一步优化上述技术方案,如果复杂查询的查询api接口中支持设置排序列,比如数据仓库hive,全部支持sql语法的关系型数据库如mysql,oracle等,则将排序信息追加到api接口中,将排序运算压力下推到数据集市中;否则使用timsort排序算法完成源数据的排序操作。

实施例

第一步,首先在复杂查询中加入分组列的排序信息。根据复杂查询数据源的特点,其对复杂查询的结果集进行排序的方式不同:若复杂查询数据源的查询api接口中支持设置排序列(例如hive等,全部支持sql语法的关系型数据库:mysql,oracle等),则将排序信息追加到复杂查询的api接口中,这样可以将排序运算压力下推到数据库中;若复杂查询数据源查询api接口中不支持设置排序列,则使用timsort排序算法负责完成源数据的排序操作;

第二步,为了保证形成每个数据集市数据块的数据量大小一致,需要查询出分组列不同值的个数,和每个不同值的个数计数总值,用来判断是否适合分组。通过分组列为维度,分组列的个数为度量对源数据进行一次简单的聚合查询。若查询结果总行数大于分组列不同值个数的限定值3000,则此次查询不适合分组;若查询结果分组列所有不同值的平均值小于一个数据块大小262144,则同样判断此次查询不适合分组分割入集市;

分组列在用户选择导入的数据源后,以界面的方式展示出数据可分组列让用户选择,如图3所示。用户选择的分组列应该满足以下条件:不同值个数小于3000,每个不同值分组平均数据量大于一个数据块的数据量262144(其为2的18次方),分组列的类型一般为字符串类型、布尔类型或者日期类型,不能使用数值类型;

对分组列的分组可行性检查,是对源数据的一次额外查询。此查询以分组列作为分组,以不同值个数作为聚合。根据查询得到的结果(查询的结果集行数,每个不同值数据量)进行可行性判断,判断的具体步骤如图2所示;

第三步,在内存中根据分组列分割源数据为数据块,并在数据块中增加元数据信息;

根据分组列对源数据进行分割,是对流式加载的源数据进行遍历,对源数据中属于相同的分组列的值,放入到相同的数据块中。由于对源数据已进行排序,所以当遇到下一个不同值时,标识着上一个不同值的数据块已处理完毕,并在数据块中元信息加入分片列不同值信息,进行分发存储;

第四步,将生成的数据块进行压缩,分发到数据集市节点。其中,通过高级编程语言对多线程技术的支持,分别把源数据查询出的结果并放入到结果集的过程和把结果集分割(即将源数据分割成数据块)的过程使用不同的线程执行,同时获取查询结果为非阻塞实现,线程之间共享此查询结果。这样就可以保证数据的流式处理方式。同时,第二、三、四步是在不同线程中执行,多线程执行可以保证其并行运行。

所述的并行处理,是指源数据的异步流式加载,内存中把源数据进行分组分割,已经分割完成的数据块的分发是并行进行的。

本发明的有益效果:

1)可使复杂查询次数降低为1;

2)同时数据以block为单位进行处理,大大降低内存压力;

3)源数据导入数据集市的步骤可以并行执行,提高导入数据集市速度,大大减少导入集市花费时间。

在数据生成数据集市系统中采用本发明的快速入数据集市方法的具体实施方式如下:

1、用户在分析源数据的分析、抽取需求后,确认这是一个复杂查询入数据集市的场景。然后在系统中新建数据集a,然后将复杂查询语句写入到数据集a中;

2、在系统中新建增量入集市任务,任务中选择的数据集为步骤1所新建的数据集a,此时系统会提示用户选择分组列,用户根据需求选择分组列;

3、保存新建的导入集市任务,然后运行;

4、在系统的任务控制面板页观察任务运行情况,任务运行成功即表示导入集市任务成功。

从上述步骤看出,此方案实施步骤简便,大部分工作由系统负责完成,具有操作门槛低的优点。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

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