数据仓库中大对象集合表的访问方法及装置
技术领域
本申请涉及数据存储领域,尤其涉及一种数据仓库中大对象集合表的访问方法及装置。
背景技术
数据仓库(DataWarehouse,DW)是面向主题(SubjectOriented)的、集成的(Integrated)、相对稳定的(Non-volatile)、反映历史变化(TimeVariant)的数据集合,用于支持企业、组织或网站的决策分析处理。数据仓库通常用于存储历史数据,并通过ETL(Extraction-Transformation-Loading,数据抽取、转换和加载)任务执行过程,产生业务报表等。ETL程序负责将分布式、异构数据源中的数据例如关系数据、平面数据文件等抽取到临时中间层后进行清洗、转换、集成,最后装载到数据仓库中,成为业务报表、联机分析处理、数据挖掘的基础。ETL程序一般在夜间运行,处理企业的大批量数据,形成KPI(关键运营指标)装载到业务报表中。
通常情况下,如一些电子商务网站,数据仓库中存储有用户表和商品表,用户表是网站在数据仓库中保存所有用户的属性信息的表,每一条记录对应一个用户,每一个字段对应用户的某种属性,用户表一般是数据仓库中最大的表之一;商品表是网站在数据仓库中保存所有商品(各网站的商品形态并不相同)的属性信息的表,每一条记录对应一种商品,每一个字段对应商品的某种属性,商品表一般是数据仓库中最大的表之一。网站的用户表和商品表中包括大量记录,存储空间一般达到TB级。数据仓库超过一半的后续任务都会访问用户表和商品表,获取表中相关对象的某些属性信息。由于这两个表过于巨大(各网站的用户表和商品表的实际大小可能不同),对于所配备的硬件资源会是一个沉重的负担。同时用户表和商品表的特点使得表中包括所有对象的全集,且永久存在,在ETL任务执行过程中,ETL程序一般会整表扫描用户表和商品表,当多个任务同时整表扫描用户表和商品表时,数据仓库的输入输出负担较重,导致数据仓库的性能降低、响应迟缓。
申请内容
本申请提供一种数据仓库中大对象集合表的访问方法及装置,用以减轻由大对象集合表所导致的数据仓库的输入输出负担,提升数据仓库的性能和响应速度。
本申请提供的第一种数据仓库中大对象集合表的访问方法,包括:
新建大对象集合表的建立过程,具体包括:
针对每一个业务周期,根据各业务流水表中当前业务周期内的业务流水记录,确定当前业务周期内发生业务活动的对象的标识信息;
将确定出的对象的标识信息与原大对象集合表相关联,提取出该对象的标识信息对应的原大对象集合表中的记录生成分表,并将生成的分表合并到按照业务周期分区的新建大对象集合表中;
新建大对象集合表的访问过程,具体包括:
确定指定的时间段所对应的业务周期信息;以及
访问新建大对象集合表中确定的业务周期信息所对应的分区。
较佳的,所述根据各业务流水表中当前业务周期内的业务流水记录,确定当前业务周期内发生业务活动的对象的标识信息,具体包括:
从各业务流水表当前业务周期内的业务流水记录中提取对象的标识信息;并
对提取出的所述对象的标识信息进行去重操作,确定出当前业务周期内发生业务活动的对象的标识信息。
其中,所述原大对象集合表的分表中,包括确定出的标识信息对应对象的记录,且每一条记录包括业务周期信息、以及在原大对象集合表中该对象的各属性值。
其中,所述对象的标识信息包括对象标识符ID或者对象名称。
具体实施中,所述原大对象集合表可以为商品表,相应的,所述对象为商品;所述原大对象集合表还可以为用户表,相应的,所述对象为用户。
较佳的,所述新建大对象集合表中的每一个分区对应一块硬盘。
较佳的,所述新建大对象集合表的访问过程为数据抽取、转换和加载ETL任务执行过程,具体包括:确定ETL任务指定的时间段所对应的业务周期信息;以及
访问新建大对象集合表中确定的业务周期信息所对应的分区。
本申请提供的第一种数据仓库中大对象集合表的访问装置,包括:
确定模块,用于针对每一个业务周期,根据各业务流水表中当前业务周期内的业务流水记录,确定当前业务周期内发生业务活动的对象的标识信息;
建立模块,用于将确定出的对象的标识信息与原大对象集合表相关联,提取出该对象的标识信息对应的原大对象集合表中的记录生成分表,并将生成的分表合并到按照业务周期分区的新建大对象集合表中;
新建大对象集合表访问模块,用于确定指定的时间段所对应的业务周期信息,以及访问新建大对象集合表中确定的业务周期信息所对应的分区。
较佳的,所述确定模块,具体包括:
提取子模块,用于针对每一个业务周期,从各业务流水表当前业务周期内的业务流水记录中提取对象的标识信息;
去重子模块,用于对提取出的所述对象的标识信息进行去重操作,确定出当前业务周期内发生业务活动的对象的标识信息。
其中,所述建立模块生成的原大对象集合表的分表中,包括确定出的标识信息对应对象的记录,且每一条记录包括业务周期信息、以及在原大对象集合表中该对象的各属性值。
其中,所述新建大对象集合表访问模块具体为数据抽取、转换和加载ETL程序模块,用于在ETL任务执行过程中,确定ETL任务指定的时间段所对应的业务周期信息,以及访问新建大对象集合表中确定的业务周期信息所对应的分区。
本申请提供的第二种数据仓库中大对象集合表的访问方法,包括:
原大对象集合表的分表的生成过程,具体包括:
针对每一个业务周期,根据各业务流水表中当前业务周期内的业务流水记录,确定当前业务周期内发生业务活动的对象的标识信息;
将确定出的对象的标识信息与原大对象集合表相关联,提取出该对象的标识信息对应的原大对象集合表中的记录生成分表,并将生成的分表与当前的业务周期信息相对应;
原大对象集合表的访问过程,具体包括:
确定指定的时间段所对应的业务周期信息;以及
访问确定的业务周期信息所对应的分表。
本申请提供的第二种数据仓库中大对象集合表的访问装置,包括:
确定模块,用于针对每一个业务周期,根据各业务流水表中当前业务周期内的业务流水记录,确定当前业务周期内发生业务活动的对象的标识信息;
生成模块,用于将确定出的对象的标识信息与原大对象集合表相关联,提取出该对象的标识信息对应的原大对象集合表中的记录生成分表,并将生成的分表与当前的业务周期信息相对应;
原大对象集合表访问模块,用于确定指定的时间段所对应的业务周期信息,以及访问确定的业务周期信息所对应的分表。
本申请提供的第一种数据仓库中大对象集合表的访问方法及装置,根据当前业务周期内的业务流水记录,确定当前业务周期内发生业务活动的对象,并生成与当前业务周期内发生业务活动的对象相关联的原大对象集合表的分表,再将生成的分表合并到按照业务周期分区的新建大对象集合表中,从而使得不存在分区的原大对象集合表可以按照业务周期分区存储。基于按照业务周期分区的新建大对象集合表,在ETL任务执行过程中,ETL程序仅需访问指定的时间段所对应业务周期的分区,减轻了由大对象集合表所导致的数据仓库的输入输出负担,从而提升了数据仓库的性能和响应速度。
本申请提供的第二种数据仓库中大对象集合表的访问方法及装置,根据当前业务周期内的业务流水记录,确定当前业务周期内发生业务活动的对象,并生成与当前业务周期内发生业务活动的对象相关联的原大对象集合表的分表,从而使得不存在分区的原大对象集合表可以按照业务周期划分为多个分表。基于按照业务周期划分得到的多个分表,在ETL任务执行过程中,ETL程序仅需访问指定的时间段所对应业务周期的分表,减轻了由大对象集合表所导致的数据仓库的输入输出负担,从而提升了数据仓库的性能和响应速度。
本申请的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本申请而了解。本申请的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
附图说明
图1为本申请实施例一提供的新建大对象集合表的建立过程流程图;
图2为本申请实施例一提供的ETL任务执行过程流程图;
图3为本申请实施例一提供的商品表的访问方法流程图;
图4为本申请实施例一提供的数据仓库中大对象集合表的访问装置框图;
图5为本申请实施例二提供的原大对象集合表的分表的生成过程流程图;
图6为本申请实施例二提供的ETL任务执行过程流程图;
图7为本申请实施例二提供的数据仓库中大对象集合表的访问装置框图。
具体实施方式
本申请实施例旨在提供一种数据仓库中大对象集合表的访问方法及装置,用以减轻由大对象集合表所导致的数据仓库的输入输出负担,提升数据仓库的性能和响应速度。
首先介绍一基本概念:大对象集合表。本申请实施例中所述的大对象集合表类似于用户表、商品表等包括很大的对象集合整体的表。大对象集合表中,每一条记录(每一行)对应一个对象,每一个字段(每一列)对应对象的某种属性。也就是说,大对象集合表中,每一个对象对应一条记录,每一条记录包括该对象的各属性值。例如对于商品表来说,如表1所示,所述的对象为商品,每一种商品对应一条记录,每一条记录包括该商品的各属性值,例如商品ID(Identifier,标识符)、商品名称、商品价格、商品数量等。
表1
商品标识符 |
商品名称 |
商品数量 |
商品价格 |
1 |
AAA |
S1 |
xxx元 |
2 |
BBB |
S2 |
xxx元 |
... |
... |
... |
... |
N |
ZZZ |
SN |
xxx元 |
同理,对于用户表来说,如表2所示,所述的对象为用户,每一个用户对应一条记录,每一条记录包括该用户的各属性值,例如用户ID(Identifier,标识符)、用户名称、用户年龄、用户性别等。
表2
用户标识符 |
用户名称 |
用户年龄 |
用户性别 |
1 |
张某 |
xx |
男 |
2 |
李某 |
xx |
女 |
... |
... |
... |
... |
N |
王某 |
xx |
男 |
以下结合说明书附图对本申请的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本申请,并不用于限定本申请,并且在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
实施例一
基于对大对象集合表的介绍,本实施例提供了一种数据仓库中大对象集合表的访问方法,包括两个过程:新建大对象集合表的生成过程和新建大对象集合表的访问过程,该新建大对象集合表的访问过程具体包括ETL任务执行过程。
如图1所示,新建大对象集合表的建立过程,具体包括:
S101、针对每一个业务周期,根据各业务流水表中当前业务周期内的业务流水记录,确定当前业务周期内发生业务活动的对象的标识信息。
业务流水表是数据仓库中最大的表之一,但是业务流水表与大对象集合表不同,业务流水表中含有时间属性信息,可以按天分区存储。业务流水表中,每一次业务活动对应一条业务流水记录,每一条业务流水记录中包括业务日期信息、业务活动所涉及对象的标识信息、业务活动的类型等属性值。
在S101的具体实施中,为了确定当前业务周期内发生业务活动的对象的标识信息,具体可以执行如下步骤:从各业务流水表当前业务周期内的业务流水记录中提取所有对象的标识信息;并对提取出的所有对象的标识信息进行去重操作,确定出当前业务周期内发生业务活动的对象的标识信息。所述的业务周期可以选取为一天、一周、一月、一年等,可以根据实际情况和需求灵活设定。
S102、根据确定出的对象的标识信息,生成与当前业务周期内发生业务活动的对象相关联的原大对象集合表的分表,并将生成的原大对象集合表的分表合并到按照业务周期分区的新建大对象集合表中。
在S102的具体实施中,所述的根据确定出的对象的标识信息,生成与当前业务周期内发生业务活动的对象相关联的原大对象集合表的分表,是指将确定出的对象的标识信息与大对象集合表相关联,提取出该对象的标识信息对应的大对象集合表中的记录生成一分表。原大对象集合表的分表中,包括确定出的标识信息对应对象的记录,且每一条记录中除了包括在大对象集合表中该对象的各属性值之外,还增加业务周期信息,指示当前的业务周期,具体的在业务周期为一天的情况下,可以使用“年月日”的形式指示当前的业务周期,在业务周期为一月的情况下,可以使用“年月”的形式指示当前的业务周期,等等。
较佳的,按照业务周期分区可以将不同业务周期内的数据(记录)存储到不同硬盘上,当ETL程序访问指定的时间段内的数据时,只需扫描该分区对应的硬盘,无需对所有的数据进行扫描。具体实施中,可以指定新建大对象集合表中的业务周期字段作为分区键,从而实现按照业务周期分区存储。分区键具体包括键名和键值,指定业务周期字段作为分区键,则键名为“业务周期”;键值为“业务周期信息”,用于表示具体的业务周期。
如图2所示,新建大对象集合表的访问过程以ETL任务执行过程为例,具体包括:
S201、确定ETL任务指定的时间段所对应的业务周期信息;
由于新建大对象集合表按照业务周期分区,每一个具体的业务周期对应一个业务周期信息,根据所述的时间段所包括的具体的业务周期可以确定相应的业务周期信息,具体实施中,一个时间段对应一个或多个业务周期信息。
S202、访问新建大对象集合表中确定的业务周期信息所对应的分区。
基于ETL程序对ETL任务指定的时间段所对应业务周期的分区的访问,可以根据访问结果生成业务报表,根据访问结果生成业务报表的执行过程与现有ETL任务执行过程中根据访问结果生成业务报表的执行过程相一致,具体不再赘述。
可以理解,新建大对象集合表是基于业务周期不断更新的,ETL程序访问的新建大对象集合表是最新建立(更新)的新建大对象集合表。
下面以商品表为例详细说明实施例一提供的大对象集合表的访问方法,并假设业务周期为“一天”,对象的标识信息为“商品ID”。
针对具体的某一天,新建商品表的建立(更新)过程,如图3所示,具体包括:
S301、从各业务流水表当天的业务流水记录中提取所有商品的商品ID;
S302、对提取出的所有商品的商品ID进行去重操作,确定出当天发生业务活动的商品的商品ID;
当天发生业务活动的商品的商品ID具体以列表形式给出,可以称为商品ID清单列表。
S303、根据确定出的商品ID,生成与当天发生业务活动的商品相关联的原商品表的分表,原商品表的分表中包括确定出的商品ID对应商品的记录,且每一条记录包括业务日期信息、以及在原商品表中该商品的各属性值;
举例进行说明,假设根据具体的某一天即2009年12月24日的业务流水记录确定出的商品ID为1、2和N,则生成的原商品表(具体请参见表1)的分表如表3所示,包括商品ID(1、2和N)对应商品的记录,每一条记录包括业务日期信息(20091224)、以及原商品表中该商品的各属性值,例如商品ID为2,对应商品的记录包括20091224(业务日期信息),商品表中该商品的各属性值即2(商品标识符)、BBB(商品名称)、S2(商品数量)、xxx元(商品价格);也就是说,原商品表的分表中包括业务日期字段和原商品表中的各属性字段。
表3
业务日期 |
商品标识符 |
商品名称 |
商品数量 |
商品价格 |
20091224 |
1 |
AAA |
S1 |
xxx元 |
20091224 |
2 |
BBB |
S2 |
xxx元 |
20091224 |
N |
ZZZ |
SN |
xxx元 |
S304、将生成的分表合并到按照日期分区的新建商品表中;
新建商品表中,指定业务日期字段作为分区键,使得每天发生业务活动的商品存储在新建商品表的同一分区(硬盘)中。
基于建立的新建商品表,后续的ETL任务执行过程,包括如下步骤:
S305、ETL程序确定ETL任务指定的时间段所对应的业务日期信息;
S306、ETL程序访问新建商品表中确定的业务日期信息所对应的分区。
假设ETL任务指定的时间段为某一天(2009年12月24日),则ETL程序确定出的业务日期信息为20091224,进而访问20091224所对应的分区;假设ETL任务指定的时间段为2009年12月22日~2009年12月24日,则ETL程序确定出的业务日期信息为20091222、20091223和20091224,进而访问20091222、20091223和20091224所对应的分区。由于本实施例只需访问特定业务日期信息所对应的分区中的数据,无需访问所有的数据,因此,提高了访问速度。
基于同一技术构思,本实施例提供了一种数据仓库中大对象集合表的访问装置,如图4所示,包括:
确定模块401,用于针对每一个业务周期,根据各业务流水表中当前业务周期内的业务流水记录,确定当前业务周期内发生业务活动的对象的标识信息;
建立模块402,用于根据确定出的标识信息,生成与当前业务周期内发生业务活动的对象相关联的原大对象集合表的分表,并将生成的分表合并到按照业务周期分区的新建大对象集合表中;
新建大对象集合表访问模块,用于确定指定的时间段所对应的业务周期信息,以及访问新建大对象集合表中确定的业务周期信息所对应的分区。该新建大对象集合表访问模块具体可以为ETL程序模块403,其用于在ETL任务执行过程中,确定ETL任务指定的时间段所对应的业务周期信息,以及访问新建大对象集合表中确定的业务周期信息所对应的分区。
具体实施中,确定模块401的一种可能结构,具体包括:
提取子模块411,用于针对每一个业务周期,从各业务流水表当前业务周期内的业务流水记录中提取对象的标识信息;
去重子模块412,用于对提取出的对象的标识信息进行去重操作,确定出当前业务周期内发生业务活动的对象的标识信息。
其中,建立模块402生成的原大对象集合表的分表中,包括确定出的标识信息对应对象的记录,且每一条记录包括业务周期信息、以及在大对象集合表中该对象的各属性值。
实施例一提供的数据仓库中大对象集合表的访问方法及装置,根据当前业务周期内的业务流水记录,确定当前业务周期内发生业务活动的对象,并生成与当前业务周期内发生业务活动的对象相关联的原大对象集合表的分表,再将生成的分表合并到按照业务周期分区的新建大对象集合表中,从而使得不存在分区的原大对象集合表可以按照业务周期分区存储。基于按照业务周期分区的新建大对象集合表,在ETL任务执行过程中,ETL程序仅需访问指定的时间段所对应业务周期的分区,减轻了由大对象集合表所导致的数据仓库的输入输出负担,从而提升了数据仓库的性能和响应速度。
实施例二
基于对大对象集合表的定义,本实施例提供了另一种数据仓库中大对象集合表的访问方法,包括两个过程:原大对象集合表的分表的生成过程和ETL任务执行过程。
如图5所示,原大对象集合表的分表的生成过程,具体包括:
S501、针对每一个业务周期,根据各业务流水表中当前业务周期内的业务流水记录,确定当前业务周期内发生业务活动的对象的标识信息;S501的具体实施可以参照S101的具体实施过程。
S502、根据确定出的标识信息,生成与当前业务周期内发生业务活动的对象相关联的原大对象集合表的分表,并将生成的分表与当前的业务周期信息相对应;
在S502的具体实施中,所述的“根据确定出的标识信息,生成与当前业务周期内发生业务活动的对象相关联的原大对象集合表的分表”,可以参照S102中提供的具体实施过程;所述的“将生成的分表与当前的业务周期信息相对应”,可以通过在分表的名称中包括当前的业务周期信息实现,也可以通过建立分表的名称与业务周期信息的对应关系实现。
如图6所示,以ETL任务执行过程为例,介绍原大对象集合表的分表访问过程,具体包括:
S601、确定ETL任务指定的时间段所对应的业务周期信息;S601的具体实施可以参照S201的具体实施过程。
S602、访问确定的业务周期信息所对应的分表。
基于ETL程序对ETL任务指定的时间段所对应业务周期的分表的访问,可以根据访问结果生成业务报表,根据访问结果生成业务报表的执行过程与现有ETL任务执行过程中根据访问结果生成业务报表的执行过程相一致,具体不再赘述。
可以理解,原大对象集合表的分表是基于业务周期不断增加的,ETL程序可以访问所有的分表。
基于同一技术构思,本实施例提供了一种数据仓库中大对象集合表的访问装置,如图7所示,包括:
确定模块701,用于针对每一个业务周期,根据各业务流水表中当前业务周期内的业务流水记录,确定当前业务周期内发生业务活动的对象的标识信息;
生成模块702,用于根据确定出的标识信息,生成与当前业务周期内发生业务活动的对象相关联的原大对象集合表的分表,并将生成的分表与当前的业务周期信息相对应;
原大对象集合表访问模块,用于确定指定的时间段所对应的业务周期信息,以及访问原大对象集合表中确定的业务周期信息所对应的分区。该原大对象集合表访问模块具体可以为ETL程序模块703,用于在ETL任务执行过程中,确定ETL任务指定的时间段所对应的业务周期信息,以及访问确定的业务周期信息所对应的分表。
实施例二提供的数据仓库中大对象集合表的访问方法及装置,根据当前业务周期内的业务流水记录,确定当前业务周期内发生业务活动的对象,并生成与当前业务周期内发生业务活动的对象相关联的原大对象集合表的分表,从而使得不存在分区的原大对象集合表可以按照业务周期划分为多个分表。基于按照业务周期划分得到的多个分表,在ETL任务执行过程中,ETL程序仅需访问指定的时间段所对应业务周期的分表,减轻了由大对象集合表所导致的数据仓库的输入输出负担,从而提升了数据仓库的性能和响应速度。
本领域的技术人员应明白,本申请的实施例可提供为方法、装置、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、装置和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。