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

文档序号:31872780发布日期:2022-10-21 20:03阅读:29来源:国知局
1.本公开涉及计算机
技术领域
:,具体而言,涉及一种数据处理方法及装置、计算机可读存储介质和电子设备。
背景技术
::2.随着移动互联网、物联网等技术的发展,所积累的数据呈爆炸式增长,大数据时代已经来临。海量数据的收集只是大数据技术的第一步,如何让数据产生价值才是大数据领域的终极目标。hadoop(海杜普,一个分布式系统基础架构)的出现解决了数据存储问题,但如何对海量数据进行实时查询,却一直未有满意的解决方案。而多数情况下的查询需要对用户的操作做出实时反应,相关技术中查询引擎动辄数分钟甚至数十分钟的响应时间,显然是不能满足需求的。3.在一些数据平台产品、数据分析或者报表业务中,通常需要选择olap(onlineanalyticalprocess,联机分析处理)数据查询引擎,apachekylin作为一个基于hadoop大数据平台打造的开源olap引擎,采用了多维立方体(cube,也称之为数据立方体)预计算技术,利用空间换时间的方法,相较与传统的mpp(massiveparallelprocessing,大规模并行处理)架构的olap查询引擎,将查询速度提升至亚秒级别,以及很高的并发能力,极大地提高了数据分析的效率。apachekylin的出现不仅很好地解决了海量数据快速查询的问题,也避免了手动开发和维护提前计算程序带来的一系列麻烦。4.在采用以apachekylin作为olap查询引擎作为技术方案时,面临着复杂cube的计算问题:超大维度组合的cube其预计算一般采用apachespark作为构建引擎,但是大的cube其计算任务会给计算资源带来不小的压力,不仅会耗费大量的计算资源,并且还会有超高的构建时长,对于一些数据时效性比较高的业务不友好,而且超大的spark计算任务可能会因资源问题出现任务失败,进而导致更多的资源浪费。技术实现要素:5.本公开实施例提供一种数据处理方法及装置、计算机可读存储介质和电子设备,能够解决上述相关技术中存在cube构建时长较长且耗费较多计算资源的技术问题。6.本公开实施例提供一种数据处理方法,所述方法包括:获得目标表的历史查询语句中的维度字段及不同维度字段之间的查询共现频次;将维度字段作为节点,根据不同维度字段之间的查询共现频次确定不同节点之间的初阶边权重,形成维度共现图;根据维度共现图中各个节点的度,确定维度共现图中的第一核心节点;获得删除维度共现图中的第一核心节点后的第一连通子图;根据维度共现图及其第一核心节点和第一连通子图,获得维度共现图的分裂树;根据分裂树的目标叶子节点确定维度字段的聚合组;根据维度字段的聚合组构建面向目标表的数据立方体。7.在本公开的一些示例性实施例中,根据各个关联维度组之间的相关度和合并膨胀率,确定各个关联维度组中满足合并条件的关联维度组对,包括:若关联维度组之间的相关度大于第一相关度阈值;或者若关联维度组之间的相关度大于第二相关度阈值且合并膨胀率小于第一膨胀率阈值;或者若关联维度组之间的相关度大于第三相关度阈值且合并膨胀率小于第二膨胀率阈值,则判定对应的关联维度组为满足合并条件的关联维度组对;其中,第一相关性阈值大于第二相关性阈值,第二相关性阈值大于第三相关性阈值,第一膨胀率阈值大于第二膨胀率阈值。8.本公开实施例提供一种数据处理装置,所述装置包括:共现频次获得单元,用于获得目标表的历史查询语句中的维度字段及不同维度字段之间的查询共现频次;维度共现图构建单元,用于将维度字段作为节点,根据不同维度字段之间的查询共现频次确定不同节点之间的初阶边权重,形成维度共现图;核心节点确定单元,用于根据维度共现图中各个节点的度,确定维度共现图中的第一核心节点;连通子图获得单元,用于获得删除维度共现图中的第一核心节点后的第一连通子图;图分裂树获得单元,用于根据维度共现图及其第一核心节点和第一连通子图,获得维度共现图的分裂树;字段聚合组确定单元,用于根据分裂树的目标叶子节点确定维度字段的聚合组;数据立方体构建单元,用于根据维度字段的聚合组构建面向目标表的数据立方体。9.本公开实施例提供了一种计算机可读存储介质,其上存储有计算机程序,程序被处理器执行时实现如上述实施例中所述的数据处理方法。10.本公开实施例提供了一种电子设备,包括:至少一个处理器;存储装置,配置为存储至少一个程序,当至少一个程序被至少一个处理器执行时,使得至少一个处理器实现如上述实施例中的数据处理方法。11.在本公开的一些实施例所提供的技术方案中,一方面,通过目标表的历史查询语句进行分析,根据历史查询语句中的维度字段及不同维度字段之间的查询共现频次构建维度共现图,并根据该维度共现图中各个节点的度来确定维度共现图中的第一核心节点,然后获得删除该维度共现图中的第一核心节点后的第一连通子图,根据该维度共现图及其第一核心节点和该第一连通子图对该维度共现图进行分裂,获得该维度共现图的分裂树,由此可以根据该分裂树的目标叶子节点来确定上述历史查询语句中的维度字段的聚合组,当利用该维度字段的聚合组来构建面向该目标表的数据立方体(cube)时,实现了将大的cube拆分为聚合组,各个聚合组可以用于构建各个小的cube,即通过对维度共现图的拆分,压缩了数据规模,降低了cube构建过程中耗费的计算资源,且能够缩短cube的构建时长,实现了构建资源和构建时间之间的平衡。同时,由于本公开实施例中的维度共现图是根据目标表的历史查询语句中的维度字段及不同维度字段之间的查询共现频次构建的,因此,通过分裂该维度共现图来实现将一个大的cube的构建任务拆分为多个小的cube的构建任务,还能够保证构建的各个小的cube能够满足实际业务中的查询需求,还不会增加较多的重复计算量。另一方面,通过分析历史查询语句,实现了cube构建的自动化,简化了用户设计cube的难度,优化了cube设计。附图说明12.图1示意性示出了根据本公开的一实施例的数据处理方法的流程图。13.图2示意性示出了根据本公开的一实施例的维度共现图的示意图。14.图3示意性示出了删除图2中的维度共现图中度最大的节点后的连通子图的示意图。15.图4示意性示出了删除图3中的连通子图中度最大的节点后的连通子图的示意图。16.图5示意性示出了根据本公开的一实施例的维度共现图分裂的流程示意图。17.图6示意性示出了根据本公开的一实施例的维度共现图的分裂树的结构示意图。18.图7示意性示出了根据本公开的一实施例的对分裂树进行剪枝操作的示意图。19.图8示意性示出了根据本公开的另一实施例的数据处理方法的流程图。20.图9示意性示出了根据本公开的又一实施例的数据处理方法的流程示意图。21.图10示意性示出了应用本公开实施例提供的数据处理方法的系统架构示意图。22.图11示意性示出了根据本公开的一实施例的数据处理装置的框图。23.图12示出了适于用来实现本公开实施例的电子设备的结构示意图。具体实施方式24.现在将参考附图更全面地描述示例实施例。然而,示例实施例能够以多种形式实施,且不应被理解为限于在此阐述的实施例;相反,提供这些实施例使得本公开将全面和完整,并将示例实施例的构思全面地传达给本领域的技术人员。在图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。25.本公开所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施方式中。在下面的描述中,提供许多具体细节从而给出对本公开的实施方式的充分理解。然而,本领域技术人员将意识到,可以实践本公开的技术方案而省略特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知方法、装置、实现或者操作以避免模糊本公开的各方面。26.附图仅为本公开的示意性图解,图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。附图中所示的一些方框图不一定必须与物理或逻辑上独立的实体相对应。可以采用软件形式来实现这些功能实体,或在至少一个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。27.附图中所示的流程图仅是示例性说明,不是必须包括所有的内容和步骤,也不是必须按所描述的顺序执行。例如,有的步骤还可以分解,而有的步骤可以合并或部分合并,因此实际执行的顺序有可能根据实际情况改变。28.本说明书中,用语“一个”、“一”、“该”、“所述”和“至少一个”用以表示存在至少一个要素/组成部分/等;用语“包含”、“包括”和“具有”用以表示开放式的包括在内的意思并且是指除了列出的要素/组成部分/等之外还可存在另外的要素/组成部分/等;用语“第一”、“第二”和“第三”等仅作为标记使用,不是对其对象的数量限制。29.相关技术中,让用户自行去设计cube的聚合组,当面对非常复杂的业务时,用户需要花费大量的时间去理解业务,再去设计cube,通常面临比如确定哪些维度组合可以归入一个聚合组;在聚合组中,哪些维度组合可以形成联合维度;rowkey(行键)该怎么设计才能让查询速度更快这样的问题,用户自己设计出的cube的维度组合非常庞大,并且用户自行设计的cube并没有利用到历史查询数据,使得设计出的cube不能较好地满足实际查询需求。30.此外,要设计一个好的cube,对开发人员有较高的要求,既要懂数据,也要熟悉业务,同时精通kylin和spark原理,而且设计过程也不是一蹴而就,而是通过不停的调整得到最终的结果。因此,自动化cube设计是一个很有必要的工作。31.基于上述相关技术中存在的技术问题,本公开实施例提出了一种数据处理方法,以用于至少部分解决上述问题。本公开各实施例提供的方法可以由任意的电子设备来执行,例如服务器,或者终端,或者服务器与终端之间进行交互,本公开对此不做限定。32.本公开实施例中提及的服务器可以是独立的服务器,也可以是多个服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、cdn(contentdeliverynetwork,内容分发网络)、以及大数据和人工智能平台等基础云计算服务的云服务器。33.终端可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表等,但并不局限于此。终端以及服务器可以通过有线或无线通信方式进行直接或间接地连接,本公开在此不做限制。34.下面结合附图对本公开示例实施方式进行详细说明。35.图1示意性示出了根据本公开的一实施例的数据处理方法的流程图。如图1所示,本公开实施例提供的方法可以包括以下步骤。36.在步骤s110中,获得目标表的历史查询语句中的维度字段及不同维度字段之间的查询共现频次。37.本公开实施例中,目标表是指待构建cube的表。目标表可以来自同一数据源。本公开实施例中,数据源可以是hive(是基于hadoop的一个数据仓库工具)或者kafka(一种分布式发布订阅消息系统)等,本公开对此不作限定,在下面的实施例中,均以hive为例进行举例说明,则同一数据源是指hive上相同的表或者相同的事实表(facttable)和维表(dimensiontable)的组合。当目标表来自不同数据源时,则构建的是面对多个数据源的多个cube。38.其中,事实表是指存储有事实记录的表,如系统日志、销售记录、传感器数值等。维度表或维表,也称为查找表(lookuptable),是与事实表相对应的一种表;它保存了维度的属性值,可以跟事实表做关联;相当于将事实表上经常重复的属性抽取、规范出来用一张表进行管理。常见的维度表有:日期表(存储与日期对应的周、月、季度等属性)、地区表(包含国家、省/州、城市等属性)等。39.本公开实施例中,目标表的历史查询语句可以是指用户历史上,在hive上针对同一数据源进行查询的sql(structuredquerylanguage,结构化查询语言)语句,这些历史查询的sql语句可以存储在查询日志中。40.本公开实施例中,维度是观察数据的角度,一般是一组离散的值,例如,时间维度上的每一个独立的日期,商品维度上的每一件独立的商品,设备维度上的每一个独立的设备等。而度量是被聚合的统计值,也就是聚合计算(如做累加、均值、最大值、最小值等)的结果,一般是连续的值,例如,销售额、销售均价、销售商品的总件数等。41.通过对历史查询语句中涉及到的字段进行分析,可以对其进行分类,确定其是否为维度字段,并确定不同维度字段的查询共现频次。其中,查询共现频次是指不同维度字段在该目标表的所有历史查询语句中同时出现在同一历史查询语句中的出现次数。42.本公开实施例中,可以借助于sqlparser(解析器),将历史查询语句中的sql语句转换得到ast(abstractsyntaxtree,抽象语法树),然后通过遍历ast的边,可以抽取出所有历史查询语句中所涉及的各sql语句对应的物理表(是指某个数据源中的一张表)的字段,并对各个字段标注字段类型,例如标注的字段类型可以包括聚合字段(group),过滤字段(filter)和指标字段等。43.例如,对于如下的sql语句:selectuser_id,user_name,sum(value)asvaluefromuser_datawherepartition_time=20200101groupbyuser_id,user_name,可以得到如下的结果:44.[(user_data,user_id,(”group”)),[0045](user_data,user_name,(”group”)),[0046](user_data,partition_time,(”filter”)),[0047](user_data,value,(”sum”))][0048]即假设历史查询的目标表的表名为user_data(用户数据),则在上述sql语句中,抽取出字段user_id(用户标识)、user_name(用户名)、partition_time(分割时间)和value(值),其中,字段user_id和user_name的字段类型为聚合字段,字段partition_time的字段类型为过滤字段,字段value的字段类型为指标字段。其中,value字段为指标字段,不会进入查询网络,将user_id、user_name、partition_time等字段确定为维度字段。[0049]在步骤s120中,将维度字段作为节点,根据不同维度字段之间的查询共现频次确定不同节点之间的初阶边权重,形成维度共现图。[0050]本公开实施例中,利用上述步骤s110中获得的维度字段及不同维度字段的查询共现频次,可以构建维度共现图。初阶边权重表示连接边的两个节点对应的两个维度字段之间的查询共现频次。[0051]例如,还是以上述历史查询的目标表user_data为例,根据上述确定的user_id、user_name、partition_time三个维度字段,可以得到如下的节点、边及初阶边权重等信息,由此形成目标表user_data的维度共现图:[0052][(user_name,user_id,1),[0053](partition_time,user_id,1),[0054](partition_time,user_name,1)][0055]其中,(user_name,user_id,1)表示user_name和user_id作为两个节点,这两个节点之间存在一条边,且由于user_name和user_id这两个维度字段在上述sql语句中共同出现了一次,因此,此时这条边的初阶边权重为1。(partition_time,user_id,1)和(partition_time,user_name,1)表达类似的含义。[0056]当分析完所有的历史查询语句后,把相同边上的初阶边权重进行累加,即根据各条边连接的两个节点对应的两个维度字段之间的查询共现频次,确定各条边的初阶边权重,便可以得到一个包含所有历史查询语句中所有维度字段的无向带权的维度共现图g。[0057]在步骤s130中,根据维度共现图中各个节点的度,确定维度共现图中的第一核心节点。[0058]本公开实施例中,维度共现图中各个节点的度是指各个节点连接的边的数量,例如假设user_id分别与partition_time、以及user_name连接,则user_id这个维度字段对应的节点的度为2。[0059]本公开实施例中,可以将维度共现图g中度最大的节点确定为该维度共现图g的第一核心节点。[0060]在步骤s140中,获得删除维度共现图中的第一核心节点后的第一连通子图。[0061]本公开实施例中,当获得维度共现图g中度最大的第一核心节点后,可以从该维度共现图中删除该第一核心节点,对应删除该第一核心节点原本与其它各个节点之间连接形成的边,然后判断删除该第一核心节点后的维度共现图中是否还存在节点,若存在节点,则进一步判断这些剩余的任意两个节点之间是否还是连通的,若这些剩余的节点中存在至少两个节点之间不是连通的,则说明删除该第一核心节点后的维度共现图中存在两个或者以上的第一连通子图。在每个第一连通子图中的任意两个节点之间是连通的。[0062]其中,在一个无向图中,若从节点i到节点j有路径相连,则称节点i和节点j是连通的,i和j均为大于或等于1的正整数。如果图中任意两个节点都是连通的,那么该图被认为是连通的,反之,则认为是非连通的。[0063]在步骤s150中,根据维度共现图及其第一核心节点和第一连通子图,获得维度共现图的分裂树。[0064]在示例性实施例中,根据维度共现图及其第一核心节点和第一连通子图,获得维度共现图的分裂树,可以包括:组合维度共现图中的节点,形成分裂树的根节点;根据第一连通子图中各个节点的度,确定第一连通子图中的第二核心节点;若删除第一连通子图中的第二核心节点之后,第一连通子图中不存在节点,则组合第一核心节点和第二核心节点作为分裂树的初阶叶子节点。[0065]在示例性实施例中,根据维度共现图及其第一核心节点和第一连通子图,获得维度共现图的分裂树,还可以包括:若删除第一连通子图中的第二核心节点之后,第一连通子图中存在节点,且删除第二核心节点之后的节点之间是连通的,则获得删除第一连通子图中的第二核心节点后的第二连通子图;若分裂树的当前分裂层数小于或等于分裂层数阈值,则根据第二连通子图中各个节点的度,确定第二连通子图中的第三核心节点;若删除第二连通子图中的第三核心节点之后,第二连通子图中不存在节点,则组合第一核心节点、第二核心节点和第三核心节点作为分裂树的初阶叶子节点。对维度共现图进行分裂获得分裂树的具体方式可以参照下图2至图7。[0066]在步骤s160中,根据分裂树的目标叶子节点确定维度字段的聚合组。[0067]在示例性实施例中,根据分裂树的目标叶子节点确定维度字段的聚合组,可以包括:获得分裂树中各分支节点的分裂收益;根据分裂树中各分支节点的分裂收益的大小以及叶子节点阈值,对分裂树进行剪枝操作;将分裂树剪枝操作后保留的初阶叶子节点作为目标叶子节点,且目标叶子节点的数量小于或等于叶子节点阈值;将目标叶子节点作为维度字段的聚合组。[0068]本公开实施例中,叶子节点阈值可以根据实际需求进行设置,本公开对此不做限定。[0069]在示例性实施例中,分裂树中各分支节点可以包括第一分支节点,第一分支节点可以包括第一父节点的各个第一子节点。其中,获得分裂树中各分支节点的分裂收益,可以包括:获得第一父节点中各个维度字段的维度组合大小;获得第一父节点中各个维度字段之间的查询共现频次;获得根节点中各个维度字段之间的查询共现频次;根据第一父节点中各个维度字段的维度组合大小、第一父节点中各个维度字段之间的查询共现频次和根节点中各个维度字段之间的查询共现频次,获得第一父节点的查询构建代价;获得各个第一子节点中各个维度字段的维度组合大小;获得各个第一子节点中各个维度字段之间的查询共现频次;根据各个第一子节点中各个维度字段的维度组合大小、各个第一子节点中各个维度字段之间的查询共现频次和根节点中各个维度字段之间的查询共现频次,获得各个第一子节点的查询构建代价;根据第一父节点的查询构建代价和各个第一子节点的查询构建代价,获得第一分支节点的分裂收益。计算分裂收益以及根据分裂收益对分裂树进行剪枝操作的具体方式可以参照图7实施例。[0070]在步骤s170中,根据维度字段的聚合组构建面向目标表的数据立方体。[0071]本公开实施例中,cube即多维立方体,也叫数据立方体,是根据维度构建出来的多维空间,包含了要分析的基础数据,聚合数据操作在cube上进行。其中,对于每一种维度的组合,将度量做聚合运算,然后将运算的结果保存为一个物化视图,称为cuboid。所有维度组合的cuboid作为一个整体,被称为cube。[0072]本公开实施方式提供的数据处理方法,一方面,通过目标表的历史查询语句进行分析,根据历史查询语句中的维度字段及不同维度字段之间的查询共现频次构建维度共现图,并根据该维度共现图中各个节点的度来确定维度共现图中的第一核心节点,然后获得删除该维度共现图中的第一核心节点后的第一连通子图,根据该维度共现图及其第一核心节点和该第一连通子图对该维度共现图进行分裂,获得该维度共现图的分裂树,由此可以根据该分裂树的目标叶子节点来确定上述历史查询语句中的维度字段的聚合组,当利用该维度字段的聚合组来构建面向该目标表的数据立方体(cube)时,实现了将大的cube拆分为聚合组,各个聚合组可以用于构建各个小的cube,即通过对维度共现图的拆分,压缩了数据规模,降低了cube构建过程中耗费的计算资源,且能够缩短cube的构建时长,实现了构建资源和构建时间之间的平衡。同时,由于本公开实施例中的维度共现图是根据目标表的历史查询语句中的维度字段及不同维度字段之间的查询共现频次构建的,因此,通过分裂该维度共现图来实现将一个大的cube的构建任务拆分为多个小的cube的构建任务,还能够保证构建的各个小的cube能够满足实际业务中的查询需求,还不会增加较多的重复计算量。另一方面,通过分析历史查询语句,实现了cube构建的自动化,简化了用户设计cube的难度,优化了cube设计。[0073]图2示意性示出了根据本公开的一实施例的维度共现图的示意图。[0074]如图2所示,假设历史查询语句中包括维度字段city_name(城市名),city_id(城市标识),user_name,user_id,partition_time,y(year,年),m(month,月)和d(day,日),并假设partition_time分别与city_name、city_id、user_name、user_id、y、m和d连接有一条边,且各边的初阶边权重分别为56、106、70、100、300、60和80;user_name和user_id两个节点连接的边的初阶边权重为61,city_name和city_id两个节点连接的边的初阶边权重为200,city_id和y两个节点连接的边的初阶边权重为77,y和m两个节点连接的边的初阶边权重为53,d和m两个节点连接的边的初阶边权重为96,city_id和y两个节点连接的边的初阶边权重为89,y和d两个节点连接的边的初阶边权重为21。[0075]本公开实施例中,在得到了维度共现图g后,可以利用如下的图分解算法对该维度共现图进行图划分,以用于得到一个分裂树:[0076]第一步,设置核心节点列表cores和子节点列表children,且初始化核心节点列表为空,即表示为:cores=[],且初始化该子节点列表包括该维度共现图g中的所有维度字段。[0077]第二步,计算维度共现图g中所有节点的度,并按照度的大小进行倒序排列,将度最大的节点确定为第一核心节点。[0078]第三步,从维度共现图g中删除度最大的第一核心节点,并将第一核心节点放入核心节点列表cores中。[0079]第四步,判断删除度最大的第一核心节点后的维度共现图g中是否还存在节点,如果没有节点了,则完成该维度共现图的分裂;反之,如果还存在节点,则判断删除第一核心节点后剩余的任意两个节点之间是否连通;如果删除第一核心节点后剩余的任意两个节点之间是连通的,则返回上述第二步,对删除第一核心节点之后的维度共现图g中剩余的所有的节点进行类似上述第二步至第四步的处理,即继续计算删除第一核心节点之后的维度共现图g中剩余的所有的节点的度,并按照度的大小进行倒序排列,将度最大的节点确定为另一个第一核心节点;然后从删除第一核心节点之后的维度共现图g中删除度最大的该另一个第一核心节点,并将该另一个第一核心节点放入核心节点列表cores中,然后判断删除度最大的该另一个第一核心节点后的维度共现图g中是否还存在节点,如果没有节点了,则完成该维度共现图的分裂;反之,如果还存在节点,则判断删除该另一个第一核心节点后剩余的任意两个节点之间是否连通;如果删除该另一个第一核心节点后剩余的任意两个节点之间是连通的,则再次返回上述第二步,对删除该另一个第一核心节点之后的维度共现图g中剩余的所有的节点进行类似上述第二步至第四步的处理,...直至删除某个第一核心节点之后,维度共现图中不存在节点,或者删除某个第一核心节点后维度共现图中剩余的节点之间存在至少两个节点之间不是连通的。[0080]第五步,如果删除第一核心节点后剩余的节点中存在至少两个节点之间是非连通的,则将删除第一核心节点后的维度共现图中的所有第一连通子图g’加入到子节点列表children中。[0081]之后,再对子节点列表children中的每个第一连通子图g’进行分裂,分裂的方式可以参考上述维度共现图g,即是以树状的方式进行分裂的,最终可以获得分裂树。[0082]以其中任意一个第一连通子图g’的分裂为例:[0083]1),设置核心节点列表cores和子节点列表children,且初始化核心节点列表cores包括上述维度共现图中的第一核心节点,且初始化该子节点列表包括第一连通子图g’中的所有维度字段。[0084]2),计算第一连通子图g’中所有节点的度,并按照度的大小进行倒序排列,将度最大的节点确定为第二核心节点。[0085]3),从第一连通子图g’中删除度最大的第二核心节点,并将第二核心节点放入核心节点列表cores中。[0086]4),判断删除度最大的第二核心节点后的第一连通子图g’中是否还存在节点,如果没有节点了,则完成该第一连通子图g’的分裂;反之,如果还存在节点,则判断删除第二核心节点后剩余的任意两个节点之间是否连通;如果删除第二核心节点后剩余的任意两个节点之间是连通的,则返回上述步骤2),对删除第二核心节点之后的第一连通子图g’中剩余的所有的节点进行类似上述步骤2)至步骤4)的处理,即继续计算删除第二核心节点之后的第一连通子图g’中剩余的所有的节点的度,并按照度的大小进行倒序排列,将度最大的节点确定为另一个第二核心节点;然后从删除第二核心节点之后的第一连通子图g’中删除度最大的该另一个第二核心节点,并将该另一个第二核心节点放入核心节点列表cores中,然后判断删除度最大的该另一个第二核心节点后的第一连通子图g’中是否还存在节点,如果没有节点了,则完成该第一连通子图g’的分裂;反之,如果还存在节点,则判断删除该另一个第二核心节点后剩余的任意两个节点之间是否连通;如果删除该另一个第二核心节点后剩余的任意两个节点之间是连通的,则再次返回上述步骤2),对删除该另一个第二核心节点之后的第一连通子图g’中剩余的所有的节点进行类似上述步骤2)至步骤4)的处理,...直至删除某个第二核心节点之后,该第一连通子图g’中不存在节点,或者删除某个第二核心节点后该第一连通子图g’中剩余的节点之间存在至少两个节点之间不是连通的。[0087]5),如果删除第二核心节点后剩余的节点中存在至少两个节点之间是非连通的,则将删除第二核心节点后的该第一连通子图g’中的所有第二连通子图加入到子节点列表children中。[0088]之后,再对子节点列表children中的每个第二连通子图进行分裂,分裂的方式可以参考上述维度共现图g和第一连通子图的分裂。[0089]以其中任意一个第二连通子图的分裂为例:[0090](1),设置核心节点列表cores和子节点列表children,且初始化核心节点列表cores包括上述维度共现图中的第一核心节点及该第一连通子图对应的第二核心节点,且初始化该子节点列表包括第二连通子图中的所有维度字段。[0091](2),计算第二连通子图中所有节点的度,并按照度的大小进行倒序排列,将度最大的节点确定为第三核心节点。[0092](3),从第二连通子图中删除度最大的第三核心节点,并将第三核心节点放入核心节点列表cores中。[0093](4),判断删除度最大的第三核心节点后的第二连通子图中是否还存在节点,如果没有节点了,则完成该第二连通子图的分裂;反之,如果还存在节点,则判断删除第三核心节点后剩余的任意两个节点之间是否连通;如果删除第三核心节点后剩余的任意两个节点之间是连通的,则返回上述步骤(2),对删除第三核心节点之后的第二连通子图中剩余的所有的节点进行类似上述步骤(2)至步骤(4)的处理,即继续计算删除第三核心节点之后的第二连通子图中剩余的所有的节点的度,并按照度的大小进行倒序排列,将度最大的节点确定为另一个第三核心节点;然后从删除第三核心节点之后的第二连通子图中删除度最大的该另一个第三核心节点,并将该另一个第三核心节点放入核心节点列表cores中,然后判断删除度最大的该另一个第三核心节点后的第二连通子图中是否还存在节点,如果没有节点了,则完成该第二连通子图的分裂;反之,如果还存在节点,则判断删除该另一个第三核心节点后剩余的任意两个节点之间是否连通;如果删除该另一个第三核心节点后剩余的任意两个节点之间是连通的,则再次返回上述步骤(2),对删除该另一个第三核心节点之后的第二连通子图中剩余的所有的节点进行类似上述步骤(2)至步骤(4)的处理,...直至删除某个第三核心节点之后,该第二连通子图中不存在节点,或者删除某个第三核心节点后该第二连通子图中剩余的节点之间存在至少两个节点之间不是连通的。[0094](5),如果删除第三核心节点后剩余的节点中存在至少两个节点之间是非连通的,则将删除第三核心节点后的该第二连通子图中的所有第三连通子图加入到子节点列表children中。[0095]之后,再对子节点列表children中的每个第三连通子图进行分裂...。[0096]在上述分裂过程中,可以判断分裂树的当前分裂层数是否大于分裂层数阈值,如果当前分裂层数大于该分裂层数阈值,则停止分裂;反之,如果当前分裂层数小于或等于该分裂层数阈值,且当前被分裂的图(例如上述维度共现图或者第一连通子图、第二连通子图、第三连通子图)的children不为空,则继续对当前被分裂的图的children中的所有连通子图进行分裂,例如,对维度共现图的各个第一连通子图进行分裂,对第一连通子图的各个第二连通子图进行分裂...,得到各个连通子图的分裂结果。[0097]本公开实施例中,当前分裂层数是指分裂树的当前深度。其中,分裂层数阈值可以根据具体业务来定,例如可以综合考虑维度字段的数量、所需的cube的数量等,这里假设分类层数阈值设置为6。[0098]下面结合图3至图6对上述分裂过程进行举例说明。[0099]根据上图2可知,partition_time为图2所示的维度共现图中度最大的节点,其连接7条边,则删除图2中的第一核心节点partition_time之后,获得如图3所示的两个第一连通子图,即图2所示的维度共现图分裂为:user_name和user_id两个节点及其连接的一条边组成的第一连通子图301,city_name,city_id,y,m和d四个节点及这四个节点之间连接形成的6条边组成的第一连通子图302。[0100]对上图3中的连通子图302,可以进一步确定其中度最大的节点为y,则删除连通第一子图302中的第二核心节点y之后,获得如图4所示的两个第二连通子图:city_name和city_id两个节点及其连接的一条边组成的第二连通子图401,m和d两个节点及其连接的一条边组成的第二连通子图402。[0101]如图5所示,以上述图2至图4为例,分裂过程可以包括以下步骤。[0102]在步骤s11中,初始化核心节点列表为空,即cores=[],子节点列表children=[partition_time,city_id,tity_name,user_id,user_name,y,m,d]。[0103]在步骤s12中,将第一核心节点加入核心节点列表,则cores=[partition_time]。[0104]同时,将两个第一连通子图加入子节点列表,则children=[user_id,user_name],[city_id,tity_name,y,m,d]。[0105]在步骤s13中,确定第一连通子图301的第二核心节点为user_id,将第二核心节点user_id加入核心节点列表,则cores=[partition_time,user_id],且子节点列表children=[user_name]。[0106]在步骤s14中,确定第一连通子图301的另一个第二核心节点为user_name,将另一个第二核心节点user_name加入核心节点列表,则cores=[partition_time,user_id,user_name],且子节点列表children=[]。[0107]在步骤s15中,确定第一连通子图302的第二核心节点为y,将第二核心节点y加入核心节点列表,则cores=[partition_time,y],且获得第一连通子图302的两个第二连通子图401和402,将这两个第二连通子图402加入子节点列表,则children=([city_id,tity_name],[m,d])。[0108]在步骤s16中,确定第二连通子图401的第三核心节点为city_id,将第三核心节点city_id加入核心节点列表,则cores=[partition_time,y,city_id],且子节点列表children=[city_name]。[0109]在步骤s17中,确定第二连通子图401的另一个第三核心节点为city_name,将该另一个第三核心节点city_name加入核心节点列表,则cores=[partition_time,y,city_id,city_name],且子节点列表children=[]。[0110]在步骤s18中,确定第二连通子图402的第三核心节点为m,将第三核心节点m加入核心节点列表,则cores=[partition_time,y,m],且子节点列表children=[d]。[0111]在步骤s19中,确定第二连通子图402的另一个第三核心节点为d,将该另一个第三核心节点d加入核心节点列表,则cores=[partition_time,y,m,d],且子节点列表children=[]。[0112]通过图5所示的分裂过程,可以得到如图6所示的分裂树。[0113]该分裂树的根节点600的节点列表nodes中包括[partition_time,city_id,tity_name,user_id,user_name,y,m,d]。第一分裂层数601中包括的两个分支节点的节点列表nodes分别为[partition_time,user_id,user_name],[partition_time,y,city_id,tity_name,m,d],即[partition_time,user_id,user_name]和[partition_time,y,city_id,tity_name,m,d]均为根节点600的子节点。[0114]第一分裂层数601中的分支节点[partition_time,y,city_id,tity_name,m,d]作为第二分裂层数602的父节点,第二分裂层数602中包括的两个分支节点的节点列表分别为[partition_time,user_id,user_name],[partition_time,y,city_id,tity_name,m,d],即[partition_time,user_id,user_name]和[partition_time,y,city_id,tity_name,m,d]为父节点[partition_time,y,city_id,tity_name,m,d]的子节点。[0115]相关技术中,存在数据膨胀的问题:即相关技术中对维度组合进行预计算,而计算维度组合的公式是2^n(n为维度个数,n为大于或等于1的正整数),比如对于一个包含(a,b,c,d)的一个模型,其中d是指标字段,a、b、c三个是维度字段,那么其对应的所有维度组合如下:[(),(a),(b),(c),(a,b),(a,c),(b,c),(a,b,c)],如果当数据模型的维度特别多的时候,比如60或者以上个维度,在这种情况下,维度爆炸是不可接受的,尽管相关技术中提供了维度剪枝的方式,以用于减少维度组合的个数,但是对于比较复杂的业务例如广告,单数据模型的构建任务不可裁剪的组合个数仍高达1000多个以上,在维度组合特别多的情况下,必然会导致结果数据规模急速膨胀。因此,怎么更有效的剪枝,是cube设计的一个重要问题。[0116]相关技术中,为了降低cube的复杂度,减少cuboid数量,虽然提供了一些cube剪枝算法,但这些cube剪枝算法都存在一个问题,它们是基于所有的查询请求都是均匀分布在每一种维度组合上这个假设去计算收益率的,这在现实中是不可能的。在实际业务中,用户的查询通常会比较集中在一些维度组合上,其它的维度组合很少甚至没有查询落到上边,如果有些维度组合被预计算了,但是没有查询到;或者是有些维度组合经常被查询,但是没有被预计算出来,这些差距影响了cube的资源利用率和查询性能。[0117]另外相关技术中的一些剪枝方法并不适合用于维度太多的cube剪枝,或者另一些剪枝方法存在稳定性问题,即每次计算出来的维度组合完全不同。[0118]获得如图6所示的分裂树后,将其叶子节点作为初阶叶子节点,图6中有些分支节点可能本不需要细分,但是被拆分了,因此,本公开实施例中,通过计算每次分裂后的分裂收益,对其进行剪枝,以获得分裂树的目标叶子节点。[0119]图7示意性示出了根据本公开的一实施例的对分裂树进行剪枝操作的示意图。[0120]如图7所示,假设分裂树中的第一父节点701包括a,b,c三个维度字段,第一分支节点包括第一父节点701的两个第一子节点702,即一个第一子节点702包括a和b两个维度字段,另一个第一子节点702a和c两个维度字段。可以理解的是,可以选择分裂树中的任意一个父节点作为第一父节点,每个父节点相对上一分裂层数为子节点。[0121]假设第一子节点702中a和c两个维度字段作为第二父节点703,进一步包括两个第二子节点704,即包括a维度字段的第二子节点704和包括c维度字段的第二子节点704。[0122]本公开实施例中,可以采用如下公式(1)来计算第一分支节点的分裂收益split_income1:[0123][0124]或者,也可以根据如下公式(2)来计算第一分支节点的分裂收益split_income1:[0125][0126]上述公式(1)和(2)中,d(a,b,c)表示第一父节点中的(a,b,c)这三个维度字段组合而成的维度组合的维度组合大小,具体计算可以通过统计目标表的原始数据中该三个维度字段组合而成的记录条数获得,例如通过唯一值获得;q(a,b,c)表示第一父节点中(a,b,c)这三个维度字段之间的查询共现频次;q(all)表示根节点中所有维度字段之间的查询共现频次;d(a,b,c)*(0.5*q(a,b,c)/q(all)+0.5)考虑了第一父节点的查询代价和构建代价,称之为第一父节点的查询构建代价;d(a,b)表示第一子节点中的(a,b)这两个维度字段组合而成的维度组合的维度组合大小;q(a,b)表示第一子节点中(a,b)这两个维度字段之间的查询共现频次;(d(a,b)*(0.5*q(a,b)/q(all)+0.5),称之为第一子节点的查询构建代价;d(a,c)表示第一子节点中的(a,c)这两个维度字段组合而成的维度组合的维度组合大小;q(a,c)表示第一子节点中(a,c)这两个维度字段之间的查询共现频次;d(a,c)*(0.5*q(a,c)/q(all)+0.5),称之为第一子节点的查询构建代价。[0127]本公开实施例中,可以采用如下公式(3)来计算第二分支节点的分裂收益split_income2:[0128][0129]或者,也可以根据如下公式(4)来计算第二分支节点的分裂收益split_income2:[0130][0131]上述公式(3)和(4)中,d(a,c)表示第二父节点中的(a,c)这两个维度字段组合而成的维度组合的维度组合大小;q(a,c)表示第二父节点中(a,c)这两个维度字段之间的查询共现频次;d(a,c)*(0.5*q(a,c)/q(all)+0.5)称之为第二父节点的查询构建代价;d(a)表示第二子节点中的(a)这个维度字段的维度组合大小;q(a)表示第二子节点中(a)这个维度字段之间的查询共现频次;(d(a)*(0.5*q(a)/q(all)+0.5),称之为第二子节点的查询构建代价;d(c)表示第二子节点中的(c)这个维度字段的维度组合大小;q(c)表示第二子节点中(c)这个维度字段之间的查询共现频次;d(c)*(0.5*q(c)/q(all)+0.5),称之为第二子节点的查询构建代价。[0132]但本公开实施例中对各个分支节点的分裂收益的计算方式并不限于上述公式给出的实例。[0133]利用上述计算方式,可以计算该分裂树的所有分支节点的分裂收益,然后按照分裂收益的大小对低收益的分裂进行剪枝,例如,假设上述第一分支节点的分裂收益小于第二分支节点的分裂收益,则删除第一子节点(a,b)和(a,c),直到分裂树的初阶叶子节点数量满足叶子节点阈值,将保留的每一个初阶叶子节点作为目标叶子节点,每一个目标叶子节点表示为cube的一个聚合组,可以把每个目标叶子节点上的所有维度字段作为单个cube的维度,从而通过上述分裂过程可以构建出该目标表的多个cube,即实现了将一个较大的cube拆分为多个较小的cube的目的。[0134]本公开实施例中,叶子节点阈值可以根据实际需要进行设置,本公开对此不做限定。此外,并不限定低收益的具体取值,其可以根据设置的叶子节点阈值来确定。例如,假设当前需要设置4个聚合组,则设置叶子节点阈值为4,那么在上述剪枝过程中,保留分支节点的分裂收益最高的前4个初阶叶子节点作为目标叶子节点即可。[0135]需要说明的是,在上述剪枝过程中,并不要求最后获得的目标叶子节点数量等于叶子节点阈值,只要满足目标叶子节点数量小于或等于叶子节点阈值即可。[0136]本公开实施方式提供的数据处理方法,通过分析目标表的历史查询语句来构建维度共现图,并通过对该维度共现图进行分裂,获得分裂树的聚合组,根据多个聚合组来构建多个较小的cube,由此改善了cube构建过程中的计算资源和构建时长,减少了cuboid数量。此外,通过上述剪枝操作,进一步降低了聚合组的数量,由此进一步减少了耗费的计算资源,进一步降低了构建时长,同时使得构建出来的cube满足实际业务需求。同时,实现了自动确定聚合组,不需用户手动设计,由此降低了cube的设计复杂度,在维度特别多的情况下,减小了cube的设计难度。[0137]图8示意性示出了根据本公开的另一实施例的数据处理方法的流程图。如图8所示,与上述其他实施例相比,图8实施例提供的方法进一步还包括以下步骤。[0138]在步骤s810中,根据维度共现图各条边的初阶边权重,获得维度共现图各条边的目标边权重。[0139]在示例性实施例中,维度共现图中可以包括第一边及第一边的第一节点和第二节点。其中,根据维度共现图各条边的初阶边权重,获得维度共现图各条边的目标边权重,可以包括:获得第一节点对应的维度字段在历史查询语句中的第一查询频次;获得第二节点对应的维度字段在历史查询语句中的第二查询频次;根据第一查询频次和第二查询频次,确定目标查询频次;根据第一边的初阶边权重和目标查询频次,获得第一边的目标边权重。[0140]本公开实施例中,可以通过分析维度字段在历史查询语句中的查询共现频次,将一些关联度比较高的维度字段组合到一起,形成联合维度。具体地,可以采用如下步骤来进行维度字段之间的关联度分析:对维度共现图g重新计算边权重,获得目标边权重。[0141]例如,对于维度共现图中的第一边(a,b,w),其中a和b分别为该第一边的第一节点和第二节点,w为该第一边的初阶边权重,则可以利用如下公式计算该第一边的目标边权重w′:[0142]w′=w/max(count(a),count(b))ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ(5)[0143]上述公式中,count(a)表示第一节点a在历史查询语句中的第一查询频次,即出现的总次数;count(b)表示第二节点b在历史查询语句中的第二查询频次,即出现的总次数。[0144]在步骤s820中,将目标边权重低于权重阈值的边移除,获得维度共现图的各个子图。[0145]然后,将维度共现图中目标边权重小于权重阈值的边从维度共现图中移除,移除目标边权重低于权重阈值的边之后,可能将该维度共现图拆分为多个子图。[0146]本公开实施例中,权重阈值可以根据经验设置,取值范围为(0~1),例如这里假设设置为0.6。[0147]在步骤s830中,获得各个子图中的最大团,根据各个最大团中的维度字段形成各个关联维度组。[0148]之后,在移除目标边权重低于权重阈值的边后的各个子图上利用最大团算法找出图中的最大团,每一个最大团作为一个关联维度组。[0149]其中,给定各个子图,如果子图存在图,该图中任意两个节点之间存在边,则称该图为该子图的完全子图,该子图的完全子图是该子图的团,该子图的最大团是指该子图的最大完全子图。本公开对采用何种最大团算法不做限定。[0150]在步骤s840中,获得各个关联维度组之间的相关度和合并膨胀率。[0151]在示例性实施例中,各个关联维度组可以包括第一关联维度组和第二关联维度组。其中,获得各个关联维度组之间的相关度,可以包括:获得第一关联维度组的维度组合大小和第二关联维度组的维度组合大小;获得第一关联维度组的维度组合大小和第二关联维度组的维度组合大小的乘积结果;合并第一关联维度组和第二关联维度组,获得合并关联维度组;获得合并关联维度组的维度组合大小;根据合并关联维度组的维度组合大小以及第一关联维度组的维度组合大小和第二关联维度组的维度组合大小的乘积结果,获得第一关联维度组和第二关联维度组之间的相关度。[0152]在示例性实施例中,各个关联维度组可以包括第一关联维度组和第二关联维度组。其中,获得各个关联维度组之间的合并膨胀率,可以包括:获得第一关联维度组的维度组合大小和第二关联维度组的维度组合大小;获得第一关联维度组的维度组合大小和第二关联维度组的维度组合大小的求和结果;合并第一关联维度组和第二关联维度组,获得合并关联维度组;获得合并关联维度组的维度组合大小;根据合并关联维度组的维度组合大小以及第一关联维度组的维度组合大小和第二关联维度组的维度组合大小的求和结果,获得第一关联维度组和第二关联维度组之间的合并膨胀率。[0153]在步骤s850中,根据各个关联维度组之间的相关度和合并膨胀率,对各个关联维度组进行合并,获得维度共现图的联合维度(jointdimension),联合维度的数量小于或等于联合维度阈值。[0154]本公开实施例中,将部分维度字段组合在一起作为联合维度,对联合维度进行预计算,从而可以减少维度组合数量,降低cube复杂度,减少cuboid数量。[0155]例如将维度字段a、b和c定义为联合维度,就仅会构建cuboidabc,而cuboidab、bc、a等等cuboid都不会被生成。[0156]在示例性实施例中,根据各个关联维度组之间的相关度和合并膨胀率,对各个关联维度组进行合并,获得维度共现图的联合维度,可以包括:根据各个关联维度组之间的相关度和合并膨胀率,确定各个关联维度组中满足合并条件的关联维度组对;获得关联维度组对中相关度最高的目标关联维度组对;合并目标关联维度组对中的关联维度组,获得目标合并关联维度组,并删除目标关联维度组对中的关联维度组;若目标合并关联维度组和未合并的关联维度组的数量小于或等于联合维度阈值,则将目标合并关联维度组和未合并的关联维度组分别作为维度共现图的联合维度。[0157]在示例性实施例中,根据各个关联维度组之间的相关度和合并膨胀率,确定各个关联维度组中满足合并条件的关联维度组对,可以包括:若关联维度组之间的相关度大于第一相关度阈值;或者若关联维度组之间的相关度大于第二相关度阈值且合并膨胀率小于第一膨胀率阈值;或者若关联维度组之间的相关度大于第三相关度阈值且合并膨胀率小于第二膨胀率阈值,则判定对应的关联维度组为满足合并条件的关联维度组对;其中,第一相关性阈值大于第二相关性阈值,第二相关性阈值大于第三相关性阈值,第一膨胀率阈值大于第二膨胀率阈值。[0158]具体地,在得到各个关联维度组后,继续进一步对维度字段进行聚合,例如假设通过上述方法得到了如下的关联维度组的组合groups,并假设目标是将组合中的关联维度组的数量压缩到一个给定的联合维度阈值n(n为大于或等于1的正整数,可以根据实际需要设置,这里假设为4个):[0159]groups=[[0160][user_id,user_name],[0161][partition_time],[0162][city_id,city_name],[0163][year],[0164][month],[0165][day]][0166]即假设获得[user_id,user_name],[partition_time],[city_id,city_name],[year],[month],[day]六个关联维度组。然后通过如下的步骤进行计算:[0167]1.1:遍历groups中的所有关联维度组,通过统计目标表的源数据中各个关联维度组的维度组合的唯一值数量,得到各个关联维度组的维度组合大小。[0168]1.2:计算groups中所有关联维度组间的相关度。[0169]例如,假设第一关联维度组为[user_id,user_name]和第二关联维度组为[partition_time],[user_id,user_name,partition_time]表示合并第一关联维度组和第二关联维度组获得的合并关联维度组,则第一关联维度组和第二关联维度组之间的相关度可以采用如下公式计算rel:[0170][0171]上述公式中,d(user_id,user_name)表示第一关联维度组的维度组合大小;d(partition_time))表示第二关联维度组的维度组合大小;(d(user_id,user_name)*d(partition_time))表示第一关联维度组的维度组合大小和第二关联维度组的维度组合大小的乘积结果;d(user_id,user_name,partition_time)表示合并关联维度组的维度组合大小。[0172]计算合并关联维度组的维度组合大小相对未合并的第一关联维度组的维度组合大小和第二关联维度组的维度组合大小的合并膨胀率,例如,可以根据如下公式计算合并膨胀率exp:[0173][0174]上述公式中,(d(user_id,user_name)+d(partition_time))表示第一关联维度组的维度组合大小和第二关联维度组的维度组合大小的求和结果。[0175]1.3:通过上述各个关联维度组之间的相关度和合并膨胀率的计算,确定任意两个关联维度组是否满足合并条件,例如假设满足以下条件中的任意一项即判定为对应的两个关联维度组满足合并条件:[0176]1)相关度大于0.85,即假设第一相关度阈值为0.85,但本公开并不限定于此,第一相关度阈值为大于0且小于1的实数。[0177]2)相关度大于0.75并且合并膨胀率小于10,即假设第二相关度阈值为0.75,且第一膨胀率阈值为10,但本公开并不限定于此,第二相关度阈值为大于0且小于1的实数,第一膨胀率阈值为大于或等于1的实数。[0178]3)相关度大于0.5并且合并膨胀率小于5,即假设第三相关度阈值为0.5,且第二膨胀率阈值为5,但本公开并不限定于此,第三相关度阈值为大于0且小于1的实数,第二膨胀率阈值为大于或等于1的实数。[0179]1.4:若存在满足合并条件的两个关联维度组,则将满足合并条件的两个关联维度组作为一个关联维度组对。然后,按照各个关联维度组对的相关度的大小进行倒序排列,将相关度最高的关联维度组对确定为目标关联维度组对,合并目标关联维度组对中的两个关联维度组,将合并为新的关联维度组放入groups中,并删除groups中合并前的两个关联维度组。若不存在满足合并条件的两个关联维度组,则终止合并。[0180]1.5:若groups中的关联维度组的数量小于或等于给定的联合维度阈值,则终止合并,否则重复上述步骤1.1~1.5。[0181]在示例性实施例中,根据维度字段的聚合组构建面向目标表的数据立方体,可以包括:获得历史查询语句中各个字段的行键顺序,字段包括维度字段;根据各个字段的行键顺序、维度共现图的联合维度以及维度字段的聚合组,构建面向目标表的数据立方体。[0182]在示例性实施例中,获得历史查询语句中各个字段的行键顺序,可以包括:获得历史查询语句中不同字段类型的权重参数;获得历史查询语句中的各个字段及其字段类型;根据各个字段的字段类型对应的权重参数以及各个字段在历史查询语句中的查询频次,获得各个字段的字段权重值;根据各个字段的字段权重值,确定各个字段的行键顺序。[0183]具体地,利用上述历史查询语句分析获得的各个字段,计算各个字段的字段权重值。[0184]例如,假设对于维度字段中的聚合字段(group),设置一个权重参数,例如假设为4;对于维度字段中的过滤字段(filter),设置一个权重参数,例如假设为2。在其他实施例中,还可以对于指标字段,例如上述的sum设置一个权重参数,例如假设为1。但本公开并不限定于此,可以根据实际需要进行设置,考虑到不同字段类型的字段在实际查询中被使用的频率,可以设置越被经常使用的字段类型的权重参数越大,例如设置聚合字段的权重参数大于过滤字段的权重参数,过滤字段的权重参数大于指标字段的权重参数等等,同时各字段类型之间的权重参数差异不会较大。这样可以得到上述一个历史查询语句中各个字段的字段权重值如下:[0185](user_data,user_id,4),[0186](user_data,user_name,4),[0187](user_data,partition_time,2),[0188](user_data,value,1)[0189]对于所有历史查询语句中获得的各个字段,将该字段所属的字段类型的权重参数及该字段在所有历史查询语句中查询的查询频次相乘,获得该字段的字段权重值,例如对于字段类型为聚合字段的字段user_id,假设在所有历史查询语句中出现了50次,则字段user_id的字段权重值为200。[0190]获得所有历史查询语句中各个字段的字段权重值后,按照字段权重值的大小对各字段进行倒序排列,倒序排列得到的字段的顺序可以直接用于rowkey顺序(行键顺序)的设计。[0191]本公开实施方式提供的数据处理方法,通过分析目标表的历史查询语句,提取出其中涉及的字段,并标注各字段的字段类型,从中获得维度字段及不同维度字段之间的查询共现频次,将维度字段作为节点,具有查询共现频次的两个维度字段对应的两个节点连接形成边,并将每条边连接的两个节点对应的两个维度字段之间的查询共现频次作为对应边的初阶边权重,由此自动构建出该目标表的维度共现图,一方面,通过对该维度共现图进行分裂,并通过计算各分支节点的分裂收益来执行剪枝操作,可以获得该维度共现图中小于或等于所设置的叶子节点阈值的目标叶子节点,然后将每个目标叶子节点中包含的维度字段组合成一个聚合组,单个聚合组可以用于构建一个相对较小的cube,从而实现了将一个较大的cube构建任务拆分为了多个较小cube构建任务,节约了计算资源,减少了构建时长,同时使得构建出来的cube更符合实际查询需求,满足实际查询中各查询请求的分布;另一方面,还可以根据各条边连接的两个节点对应的两个维度字段的查询频次来重新计算各条边的目标边权重,将目标边权重低于权重阈值的边移除后,可以获得该维度共现图的多个子图,然后分别获得各个子图的最大团,将每个最大团中的所有维度字段组合形成一个关联维度组,再根据不同关联维度组之间的相关度和合并膨胀率来合并满足合并条件且相关度最高的两个关联维度组,以此形成小于或等于联合维度阈值的联合维度,即实现了将相关度最高的关联维度组进一步组合为联合维度,减小了构建的cube的大小,降低了占用的存储资源,使得最终构建的cube满足相关膨胀率的要求。此外,还可以获得不同字段类型的权重参数,根据各字段的查询频次和所属字段类型的权重参数确定各字段的字段权重值,根据字段权重值的大小来设计rowkey顺序,使得设计的rowkey顺序满足实际查询需求。经过上述过程,设计cube的几个核心参数都有了,包括聚合组的划分、联合维度的设计和rowkey顺序的设计等,由此可以自动构建出cube。[0192]图9示意性示出了根据本公开的又一实施例的数据处理方法的流程示意图。如图9所示,本公开实施例提供的方法可以包括以下步骤。[0193]在步骤s910中,获取目标表的历史查询语句,对历史查询语句进行分析,获得维度字段及不同维度字段之间的查询共现频次。[0194]如图9所示,假设系统输入的是用户在hive上同一数据源(相同的表或者相同的事实表和维表组合)上的历史查询sql语句的记录,经过对历史查询语句进行分析,获得维度字段及不同维度字段之间的查询共现频次,还可以获得字段及不同字段类型的权重参数,各字段在历史查询语句中的查询频次,维度字段被包括在这些字段中。[0195]在步骤s920中,根据维度字段及不同维度字段之间的查询共现频次,构建维度共现图。[0196]然后,将各维度字段作为各个节点,再根据查询共现频次构建边及确定边的初阶边权重,构建一个带权无向的维度共现图。[0197]在步骤s930中,对维度共现图进行分解,获得分裂树。[0198]采用上述实施例中描述的方式对维度共现图进行分解,获得包括初阶叶子节点的分裂树。[0199]在步骤s940中,对分裂树进行剪枝操作,确定聚合组。[0200]采用上述实施例中描述的方式对获得的分裂树进行剪枝操作,根据分裂收益减少一些初阶叶子节点,获得目标叶子节点,将每个目标叶子节点中的所有维度字段组合成单个聚合组。[0201]在步骤s950中,发现维度共现图中的联合维度。[0202]通过上述实施例中重新计算维度共现图的边的初阶边权重,确定目标边权重,根据目标边权重将维度共现图拆分为多个子图,并分别确定每个子图中的一个或者多个最大团,根据这些最大团发现关联度较高且符合膨胀率要求的联合维度。[0203]在步骤s960中,计算字段的字段权重值,以确定行键顺序。[0204]还可以根据各字段所属字段类型的权重参数及各字段的查询频次,计算获得各字段的字段权重值,根据字段权重值的大小来确定各字段的行键顺序。[0205]在步骤s970中,根据聚合组、联合维度和行键顺序进行数据立方体的设计生成。[0206]根据上述步骤中获得的聚合组、联合维度和行键顺序便可以得到一个完整的cube设计方案。[0207]本公开实施方式提供的数据处理方法,通过分析目标表的历史查询语句,抽取历史查询语句中涉及的所有字段,利用维度字段之间的查询共现频次来构建维度共现图,然后利用最大团算法来发现维度共现图中所有子图的所有最大团,并将每个最大团中的所有节点组成联合维度,进一步提升了维度字段之间的关联度;还可以基于带权无向的查询共现图的图划分算法(上述图分裂过程)对查询共现图进行划分,得到一颗分裂树,通过剪枝得到最终的划分结果即目标叶子节点,该叶子节点可以直接用于cube的设计,由此可以实现cube设计的自动化,降低了大规模维度上的cube构建的设计难度。此外,通过图划分的方法,可以实现将大的cube拆分为聚合组或者多个小的cube,且各个小的cube对应的子任务能满足需求,同时不会增加较多的重复计算量,通过拆分减少了cube构建过程中占有的计算资源,以及降低了构建时长,实现了构建资源和构建时长之间的平衡。在一些比较复杂的业务中,一般会有十分复杂的数据模型,数据维度通常会比较多,利用本公开实施例提供的方案,可以基于业务需求给出好的cube设计,使得设计出来的cube既能满足查询需求,又能保证查询效率和构建效率,同时保证数据的膨胀率在合适的范围内。[0208]在测试中,针对一个61个维度字段、日数据规模在3亿左右的数据,在未使用本公开实施例提供的方案时,通过手动设计cube、然后通过相关技术提供的优化工具,得到的cube平均构建时间为120min(分钟)左右,每日预计算后结果数据规模约为600g,而采用本公开实施例提供的方案优化拆分后,将原有cube拆分为3个cube,构建平均时间压缩到50min左右,另外整体结果数据占用的存储空间约为200g。在另外几个中等规模cube优化任务中,也展现了较好地效果。例如如下表1所示:[0209]表1[0210][0211]通过上述测试结果可以看出,本公开实施例通过历史查询语句来分析业务,自动生成cube设计,简化了用户设计难度,优化了cube设计。通过图分裂的方式,可以对大的cube进行拆分,可以减少cube构建时长,同时也可以压缩数据规模。[0212]本公开实施例提供的方法,能应用到olap数据查询、数据平台类产品等的优化工作中,可以减少用户的olapcube设计难度,通过分析优化,自动设计cube,能降低预计算任务时间和资源占用,也可以在一些缓存设计应用中使用,也可以用在通过查询去反向分析业务,对业务数据进行拆分的场景。图10中以基于mapreduce预计算生成cube并提供低延迟查询的apachekylin解决方案为例进行举例说明。[0213]图10示意性示出了应用本公开实施例提供的数据处理方法的系统架构示意图。首先来看离线构建部分。从图10中可以看出,左侧为数据源1010,默认的数据源可以是apachehive(也可以采用kafka,rdbms(relationaldatabasemanagementsystem,关系数据库管理系统)等),保存着待分析的用户数据。根据元数据(metadata)1024的定义,数据立方体构建引擎(cubebuildengine)1025从数据源1010抽取数据,并构建cube。构建技术可以为mapreduce。构建后的olap数据立方体(olapcube)1030保存在右侧存储引擎中,默认的存储为apachehbase。[0214]完成离线构建后,用户可以从上方的查询系统(例如,第三方app1040、sql-based工具1050)发送sql进行查询分析。提供了restfulapi(representationalstatetransferapplicationprogramminginterface,表示状态转移应用程序接口)、jdbc(javadatabaseconnectivity,java数据库连接)/odbc(opendatabaseconnectivity,开放数据库互连)等接口供用户调用。无论从哪个接口进入,sql最终都会来到rest服务器(restserver)1021,再转交给查询引擎(queryengine)1022进行处理。查询引擎(queryengine)1022解析sql,生成基于关系表的逻辑执行计划,然后将其转译为基于cube的物理执行计划,基于路由(routing)1023查询预计算生成的cube并产生结果。整个过程不会访问原始数据源。如果用户提交的查询语句未预先定义,则会返回一个错误。[0215]图10实施例中对数据源、数据立方体构建引擎和cube存储三个模块提取出了抽象层,这三个模块可以被任意地扩展和替换。例如可以使用spark替代mapreduce作为cube的数据立方体构建引擎,使用cassandra替代hbase作为cube计算后数据的存储等,使之良好的扩展性,也使用户可以针对自己的业务特点进行深度定制。[0216]apachekylin使用预计算技术解决了数据集大小受限的问题,能更好地支持海量数据集的查询。同样受益于预计算技术,kylin的查询速度非常快,因为复杂的连接、聚合等操作都在cube的构建过程中已经完成了。apachekylin同样可以使用集群部署方式进行水平扩展。[0217]本公开实施例提供的方法可以采用云技术中的数据库技术。[0218]其中,云技术(cloudtechnology)是指在广域网或局域网内将硬件、软件、网络等系列资源统一起来,实现数据的计算、储存、处理和共享的一种托管技术。[0219]云技术是基于云计算商业模式应用的网络技术、信息技术、整合技术、管理平台技术、应用技术等的总称,可以组成资源池,按需所用,灵活便利。云计算技术将变成重要支撑。技术网络系统的后台服务需要大量的计算、存储资源,如视频网站、图片类网站和更多的门户网站。伴随着互联网行业的高度发展和应用,将来每个物品都有可能存在自己的识别标志,都需要传输到后台系统进行逻辑处理,不同程度级别的数据将会分开处理,各类行业数据皆需要强大的系统后盾支撑,只能通过云计算来实现。[0220]数据库(database),简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行新增、查询、更新、删除等操作。所谓“数据库”是以一定方式储存在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。[0221]数据库管理系统(databasemanagementsystem,简称dbms)是为管理数据库而设计的电脑软件系统,一般具有存储、截取、安全保障、备份等基础功能。数据库管理系统可以依据它所支持的数据库模型来作分类,例如关系式、xml(extensiblemarkuplanguage,即可扩展标记语言);或依据所支持的计算机类型来作分类,例如服务器群集、移动电话;或依据所用查询语言来作分类,例如sql、xquery;或依据性能冲量重点来作分类,例如最大规模、最高运行速度;亦或其他的分类方式。不论使用哪种分类方式,一些dbms能够跨类别,例如,同时支持多种查询语言。[0222]图11示意性示出了根据本公开的一实施例的数据处理装置的框图。如图11所示,本公开实施例提供的数据处理装置1100可以包括共现频次获得单元1110、维度共现图构建单元1120、核心节点确定单元1130、连通子图获得单元1140、图分裂树获得单元1150、字段聚合组确定单元1160以及数据立方体构建单元1170。[0223]本公开实施例中,共现频次获得单元1110可以用于获得目标表的历史查询语句中的维度字段及不同维度字段之间的查询共现频次。维度共现图构建单元1120可以用于将维度字段作为节点,根据不同维度字段之间的查询共现频次确定不同节点之间的初阶边权重,形成维度共现图。核心节点确定单元1130可以用于根据维度共现图中各个节点的度,确定维度共现图中的第一核心节点。连通子图获得单元1140可以用于获得删除维度共现图中的第一核心节点后的第一连通子图。图分裂树获得单元1150可以用于根据维度共现图及其第一核心节点和第一连通子图,获得维度共现图的分裂树。字段聚合组确定单元1160可以用于根据分裂树的目标叶子节点确定维度字段的聚合组。数据立方体构建单元1170可以用于根据维度字段的聚合组构建面向目标表的数据立方体。[0224]本公开实施方式提供的数据处理装置,一方面,通过目标表的历史查询语句进行分析,根据历史查询语句中的维度字段及不同维度字段之间的查询共现频次构建维度共现图,并根据该维度共现图中各个节点的度来确定维度共现图中的第一核心节点,然后获得删除该维度共现图中的第一核心节点后的第一连通子图,根据该维度共现图及其第一核心节点和该第一连通子图对该维度共现图进行分裂,获得该维度共现图的分裂树,由此可以根据该分裂树的目标叶子节点来确定上述历史查询语句中的维度字段的聚合组,当利用该维度字段的聚合组来构建面向该目标表的数据立方体(cube)时,实现了将大的cube拆分为聚合组,各个聚合组可以用于构建各个小的cube,即通过对维度共现图的拆分,压缩了数据规模,降低了cube构建过程中耗费的计算资源,且能够缩短cube的构建时长,实现了构建资源和构建时间之间的平衡。同时,由于本公开实施例中的维度共现图是根据目标表的历史查询语句中的维度字段及不同维度字段之间的查询共现频次构建的,因此,通过分裂该维度共现图来实现将一个大的cube的构建任务拆分为多个小的cube的构建任务,还能够保证构建的各个小的cube能够满足实际业务中的查询需求,还不会增加较多的重复计算量。另一方面,通过分析历史查询语句,实现了cube构建的自动化,简化了用户设计cube的难度,优化了cube设计。[0225]在示例性实施例中,图分裂树获得单元1150可包括:根节点形成单元,可以用于组合维度共现图中的节点,形成分裂树的根节点;第二核心节点确定单元,可以用于根据第一连通子图中各个节点的度,确定第一连通子图中的第二核心节点;第一初阶叶子节点获得单元,可以用于若删除第一连通子图中的第二核心节点之后,第一连通子图中不存在节点,则组合第一核心节点和第二核心节点作为分裂树的初阶叶子节点。[0226]在示例性实施例中,图分裂树获得单元1150还可包括:第二连通子图获得单元,可以用于若删除第一连通子图中的第二核心节点之后,第一连通子图中存在节点,且删除第二核心节点之后的节点之间是连通的,则获得删除第一连通子图中的第二核心节点后的第二连通子图;第三核心节点确定单元,可以用于若分裂树的当前分裂层数小于或等于分裂层数阈值,则根据第二连通子图中各个节点的度,确定第二连通子图中的第三核心节点;第二初阶叶子节点获得单元,可以用于若删除第二连通子图中的第三核心节点之后,第二连通子图中不存在节点,则组合第一核心节点、第二核心节点和第三核心节点作为分裂树的初阶叶子节点。[0227]在示例性实施例中,字段聚合组确定单元1160可以包括:分裂收益获得单元,可以用于获得分裂树中各分支节点的分裂收益;剪枝操作单元,可以用于根据分裂树中各分支节点的分裂收益的大小以及叶子节点阈值,对分裂树进行剪枝操作;目标叶子节点确定单元,可以用于将分裂树剪枝操作后保留的初阶叶子节点作为目标叶子节点,且目标叶子节点的数量小于或等于叶子节点阈值;聚合组确定单元,可以用于将目标叶子节点作为维度字段的聚合组。[0228]在示例性实施例中,分裂树中各分支节点可以包括第一分支节点,第一分支节点可以包括第一父节点的各个第一子节点。其中,分裂收益获得单元可以包括:第一父节点维度组合大小获得单元,可以用于获得第一父节点中各个维度字段的维度组合大小;第一父节点查询共现频次获得单元,可以用于获得第一父节点中各个维度字段之间的查询共现频次;根节点查询共现频次获得单元,可以用于获得根节点中各个维度字段之间的查询共现频次;第一父节点查询构建代价获得单元,可以用于根据第一父节点中各个维度字段的维度组合大小、第一父节点中各个维度字段之间的查询共现频次和根节点中各个维度字段之间的查询共现频次,获得第一父节点的查询构建代价;第一子节点维度组合大小获得单元,可以用于获得各个第一子节点中各个维度字段的维度组合大小;第一子节点查询共现频次获得单元,可以用于获得各个第一子节点中各个维度字段之间的查询共现频次;第一子节点查询构建代价获得单元,可以用于根据各个第一子节点中各个维度字段的维度组合大小、各个第一子节点中各个维度字段之间的查询共现频次和根节点中各个维度字段之间的查询共现频次,获得各个第一子节点的查询构建代价;第一分支节点分裂收益获得单元,可以用于根据第一父节点的查询构建代价和各个第一子节点的查询构建代价,获得第一分支节点的分裂收益。[0229]在示例性实施例中,数据处理装置1100还可以包括:目标边权重获得单元,可以用于根据维度共现图各条边的初阶边权重,获得维度共现图各条边的目标边权重;共现图子图获得单元,可以用于将目标边权重低于权重阈值的边移除,获得维度共现图的各个子图;关联维度组获得单元,可以用于获得各个子图中的最大团,根据各个最大团中的维度字段形成各个关联维度组;相关度膨胀率获得单元,可以用于获得各个关联维度组之间的相关度和合并膨胀率;联合维度获得单元,可以用于根据各个关联维度组之间的相关度和合并膨胀率,对各个关联维度组进行合并,获得维度共现图的联合维度,联合维度的数量小于或等于联合维度阈值。[0230]在示例性实施例中,维度共现图中可以包括第一边及第一边的第一节点和第二节点。其中,目标边权重获得单元可以包括:第一查询频次获得单元,可以用于获得第一节点对应的维度字段在历史查询语句中的第一查询频次;第二查询频次获得单元,可以用于获得第二节点对应的维度字段在历史查询语句中的第二查询频次;目标查询频次确定单元,可以用于根据第一查询频次和第二查询频次,确定目标查询频次;第一目标边权重获得单元,可以用于根据第一边的初阶边权重和目标查询频次,获得第一边的目标边权重。[0231]在示例性实施例中,各个关联维度组可以包括第一关联维度组和第二关联维度组。其中,相关度膨胀率获得单元可以包括:关联维度组维度组合大小获得单元,可以用于获得第一关联维度组的维度组合大小和第二关联维度组的维度组合大小;维度组合大小乘积单元,可以用于获得第一关联维度组的维度组合大小和第二关联维度组的维度组合大小的乘积结果;合并关联维度组获得单元,可以用于合并第一关联维度组和第二关联维度组,获得合并关联维度组;合并关联维度组维度组合大小获得单元,可以用于获得合并关联维度组的维度组合大小;关联维度组相关度获得单元,可以用于根据合并关联维度组的维度组合大小以及第一关联维度组的维度组合大小和第二关联维度组的维度组合大小的乘积结果,获得第一关联维度组和第二关联维度组之间的相关度。[0232]在示例性实施例中,各个关联维度组可以包括第一关联维度组和第二关联维度组。其中,相关度膨胀率获得单元可以包括:关联维度组维度组合大小获得单元,可以用于获得第一关联维度组的维度组合大小和第二关联维度组的维度组合大小;维度组合大小求和单元,可以用于获得第一关联维度组的维度组合大小和第二关联维度组的维度组合大小的求和结果;合并关联维度组获得单元,可以用于合并第一关联维度组和第二关联维度组,获得合并关联维度组;合并关联维度组维度组合大小获得单元,可以用于获得合并关联维度组的维度组合大小;关联维度组合并膨胀率获得单元,可以用于根据合并关联维度组的维度组合大小以及第一关联维度组的维度组合大小和第二关联维度组的维度组合大小的求和结果,获得第一关联维度组和第二关联维度组之间的合并膨胀率。[0233]在示例性实施例中,联合维度获得单元可以包括:关联维度组对确定单元,可以用于根据各个关联维度组之间的相关度和合并膨胀率,确定各个关联维度组中满足合并条件的关联维度组对;目标关联维度组对获得单元,可以用于获得关联维度组对中相关度最高的目标关联维度组对;目标合并关联维度组获得单元,可以用于合并目标关联维度组对中的关联维度组,获得目标合并关联维度组,并删除目标关联维度组对中的关联维度组;联合维度确定单元,可以用于若目标合并关联维度组和未合并的关联维度组的数量小于或等于联合维度阈值,则将目标合并关联维度组和未合并的关联维度组分别作为维度共现图的联合维度。[0234]在示例性实施例中,关联维度组对确定单元可以包括:合并条件判定单元,可以用于若关联维度组之间的相关度大于第一相关度阈值;或者若关联维度组之间的相关度大于第二相关度阈值且合并膨胀率小于第一膨胀率阈值;或者若关联维度组之间的相关度大于第三相关度阈值且合并膨胀率小于第二膨胀率阈值,则判定对应的关联维度组为满足合并条件的关联维度组对;其中,第一相关性阈值大于第二相关性阈值,第二相关性阈值大于第三相关性阈值,第一膨胀率阈值大于第二膨胀率阈值。[0235]在示例性实施例中,数据立方体构建单元1170可以包括:行键顺序确定单元,可以用于获得历史查询语句中各个字段的行键顺序,字段包括维度字段;数据立方体生成单元,可以用于根据各个字段的行键顺序、维度共现图的联合维度以及维度字段的聚合组,构建面向目标表的数据立方体。[0236]在示例性实施例中,行键顺序确定单元可以包括:字段类型权重参数获得单元,可以用于获得历史查询语句中不同字段类型的权重参数;字段类型确定单元,可以用于获得历史查询语句中的各个字段及其字段类型;字段权重值获得单元,可以用于根据各个字段的字段类型对应的权重参数以及各个字段在历史查询语句中的查询频次,获得各个字段的字段权重值;行键顺序设计单元,可以用于根据各个字段的字段权重值,确定各个字段的行键顺序。[0237]本公开实施例的数据处理装置的其它内容可以参照上述实施例。[0238]应当注意,尽管在上文详细描述中提及了用于动作执行的设备的若干单元,但是这种划分并非强制性的。实际上,根据本公开的实施方式,上文描述的两个或更多单元的特征和功能可以在一个单元中具体化。反之,上文描述的一个单元的特征和功能可以进一步划分为由多个单元来具体化。[0239]下面参考图12,其示出了适于用来实现本技术实施例的电子设备的结构示意图。图12示出的电子设备仅仅是一个示例,不应对本技术实施例的功能和使用范围带来任何限制。[0240]参照图12,本公开实施例提供的电子设备可以包括:处理器1201、通信接口1202、存储器1203和通信总线1204。[0241]其中处理器1201、通信接口1202和存储器1203通过通信总线1204完成相互间的通信。[0242]可选的,通信接口1202可以为通信模块的接口,如gsm(globalsystemformobilecommunications,全球移动通信系统)模块的接口。处理器1201用于执行程序。存储器1203用于存放程序。程序可以包括计算机程序,该计算机程序包括计算机操作指令。其中,程序中可以包括:游戏客户端的程序。[0243]处理器1201可以是一个中央处理器cpu,或者是特定集成电路asic(applicationspecificintegratedcircuit),或者是被配置成实施本公开实施例的一个或多个集成电路。[0244]存储器1203可以包含高速ram(randomaccessmemory,随机存取存储器)存储器,也可以还包括非易失性存储器(non-volatilememory),例如至少一个磁盘存储器。[0245]其中,程序可具体用于:获得目标表的历史查询语句中的维度字段及不同维度字段之间的查询共现频次;将维度字段作为节点,根据不同维度字段之间的查询共现频次确定不同节点之间的初阶边权重,形成维度共现图;根据维度共现图中各个节点的度,确定维度共现图中的第一核心节点;获得删除维度共现图中的第一核心节点后的第一连通子图;根据维度共现图及其第一核心节点和第一连通子图,获得维度共现图的分裂树;根据分裂树的目标叶子节点确定维度字段的聚合组;根据维度字段的聚合组构建面向目标表的数据立方体。[0246]根据本技术的一个方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述实施例的各种可选实现方式中提供的方法。[0247]需要理解的是,在本公开附图中的任何元素数量均用于示例而非限制,以及任何命名都仅用于区分,而不具有任何限制含义。[0248]本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本技术旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本
技术领域
:中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。[0249]应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1