您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > CognosCube增量加载设计方案
一、基本概念1、全量加载:即在一定过滤条件下一次性加载所有数据,该方式加载速度较慢,但最终形成的cube的访问效率较高。2、增量加载:即在一定过滤条件下读取新数据,并将新数据堆积在原有立方体上。该方式加载速度较快,但最终形成的cube的访问效率会逐渐变低。3、图形化说明:假设有如下初始环境:经过一段时间后,有新数据加入,需要重新刷新立方体:全量刷新将所有数据读取过来,重新构造整个模型,如图:而增量刷新仅读取新数据,将新数据堆积在原有立方体上,如图:二、增量加载的重要原则Cognoscube增量加载是一个反复累积的过程,切记:上一次增量加载之后的mdl模型文件必须要保存,而且在下一次数据加载之前不要对上次保存之后的mdl文件做任何改动(包括重新刷新生成各维度的Categories),否则会报TR1901之类的错误,该类错误目前尚没有解决方法。三、增量加载的两种基本方式1、CubeGroup(虚拟子cube)方式:在模型中添加一个新的Cube时设置CubeGroup选项,使得最终的Cube按照日期(也可以是其他维度,选择日期较为常见)进行分区。该方式将会按CubeGroup设置时所选择的维度生成一批子cube,Cognos将这些子cube用.vcd文件映射到最终的大cube上面,我们的报表的数据源虽然是这个大cube,但是实际上数据Cube数据新数据数据新数据Cube数据(不读取)新数据Cube最终访问的是那些独立存在的以所选维度为名称的子cube。该方式优点:便于进行cube增量加载异常的后续处理。比如说,我们采用该方式增量加载了从年初到5月1日的数据,但5月2日我们发现从4月20日到25日之间的数据质量有问题,那么这时就要进行异常处理。一般方式是:将20100420.mdc~20100425.mdc这6个子cube删除,然后手工修改iqd文件(添加where条件将时间限制在4月20日至25日),执行增量mdl模型或者脚本,重新加载这段时间的数据。该方式下生成的每个子cube都是独立的,而且都是可以实际访问的,从另一方面来讲,它们都是可以独立生成和处理的。该方式缺点:占用空间会越来越大,而且会比普通方式大很多倍。该方式下,由一个mdl模型生成的最终文件包括:一个大cube文件、一个vcd文件(含有大cube和所有子cube的映射信息)、一个含有所有子cube的文件夹。这些文件会越来越庞大,对它们的维护也将变得越来越繁琐,尤其要注意的是空间问题。2、EnableTime-basedPartitioning(基于时间的分区)方式:此时可以使用普通的Cube,然后在Cube的属性对话框中的Processing选项里面选中“Thiscubeisincrementallyupdated”,即可按照增量更新。但需要注意的是,Transformer本身不能分辨哪些是增量数据,因此每次加载前必须提供增量部分数据给Transformer(有两种方式:iqd访问的表中只含有增量数据;或者iqd中的sql里面人为的通过where条件限制数据来源)。该方式优点:方法简捷,最终生成的结果性文件占用空间小,而且中间处理的步骤相对简单。该方式缺点:异常处理只能通过全量加载的方式进行,效率较低。还是上面所讲的cube增量加载出现异常的例子,在现在这种方式下,我们只能将原来的cube删除,来一次全量加载。在一个风险比较多的系统中,比如说数据质量经常出现问题、或者cube加载经常出现各种异常导致数据加载失败时,最好不要单纯的使用此方式。四、MIS系统Cube增量加载方案基于对处理方便性、效率、空间等各方面的考虑,MIS系统Cube增量加载采用EnableTime-basedPartitioning(基于时间的分区)的方式,其主要思想如下:1、IQD文件:对于同一个查询主题来讲,其事实表对应的IQD文件应分为两个,一个是支持增量加载的,另一个是支持全量加载的。支持增量加载的IQD文件中包含了用于提取增量数据的where条件语句,而支持全量加载的IQD文件则不包含上述语句。2、Mdl文件:对于同一个查询主题来讲,多维分析MDL文件也应分为两个,一个是支持增量加载的,另一个是支持全量加载的。支持增量加载的MDL包含支持增量加载的事实表IQD,而且其中的Cube属性里面的Processing选项卡中要选上“Thiscubeisincrementallyupdated”;支持全量加载的MDL包含支持全量加载的事实表IQD,并且保证Cube属性里面的Processing选项卡中的“Thiscubeisincrementallyupdated”未被选上。3、全量加载方式到增量加载方式的过渡:首先用支持全量加载的MDL生成mdc文件;保存该MDL;将支持全量加载的MDL另存一份;将上述新另存的MDL中支持全量加载的事实表IQD换为支持增量加载的事实表IQD;将上述新另存的MDL中Cube属性里面的Processing选项卡中的“Thiscubeisincrementallyupdated”选上;保存该MDL;以后用新另存的MDL在原有mdc基础上加载增量数据生成新的mdc文件即可。4、异常处理:当有一天发现cube加载出现异常(数据质量问题、或者由于其他原因导致的cube加载失败等),我们需要进行异常处理,基本步骤为:将原来的cube删除;然后直接进行全量加载;之后的步骤同3。5、注意事项:增量加载过程中切不可改变上次增量加载已经形成的MDL,包括手工或者命令方式生成新的维度或者Categories,不然会出现不明异常,最终导致增量加载的失败。五、总结和建议1、现有的cube加载大部分为全量方式,个人觉得如果全量加载所用时间很短的情况下没必要采用增量加载,因为增量加载的设计较为复杂(里面涉及到多套iqd及mdl文件,以及不同的批处理程序),中间还要考虑异常的处理,这样会有一定的风险。2、如果cube加载时间过长,此时可用增量加载的方式进行,增量加载出现异常只能通过查看最终的数据才能得知。因此,对于经常出现异常的全量加载(比如类似于个险的三个多维分析、13个月继续率分析等),不太适合用增量加载的方式,因为它们所用机构的经常性的变动导致了cube加载的异常几乎天天出现。3、由于增量加载形成的cube的访问效率会逐渐降低,因此,在增量加载到一定长的时间(比如说一年)之后,要进行一次调整,即进行一次全量加载,然后再在此基础上进行增量加载,这样会提高cube的访问效率。这就是所谓的增量加载一段时间之后进行一次全量加载的混合型加载方式。
本文标题:CognosCube增量加载设计方案
链接地址:https://www.777doc.com/doc-2906709 .html