Posted by JC.Z on 2006-06-23 07:45 下午
|
CASE: 1) Dataflow: DataSource X -> ODS A -> ODS B1 ; ODS B2; ODS B3 (这三个ODS之后又有相关cube若干个) 2) 2004年1月init load 从 DataSource X 到 ODS A 随后 Delta 从 DataSource X 到 ODS A。每个月累计的Delta的数据量级别都在百万条纪录。 3) 2005年1月init load 从ODS A 到 ODS B1,ODS B2和ODS B3。之后,delta同时更新到三个数据目标 ODS B1,ODS B2和ODS B3。 4) 从ODS A 到 ODS B1的update rule中有较复杂start routine,full load 一百万条纪录需耗时2个小时。
问题1: 2006年5月,发现在ODS A中,2006年2月的某一个delta request有问题(但其状态已经被人工设置为成功)。现在相关报表中的数据不准确了。请讨论较为合理的解决方案。
|
|
|
Posted by pig on 2006-09-26 07:20 下午
|
1. delete request 2006.05 onwords in ODS A , ODS B1, B2, B3
2. delete delta init stauts in infopackage of ODS A
3. init ODS A without data tranfer
4. Delta loaind which started 2006.05 onwords
5. update Delta from ODS A to ODS B1, B2, B3
|
|
|
Posted by JC.Z on 2006-09-30 07:16 下午
|
谢谢楼上的热烈响应。。。。同时也谢谢楼上的提供比较详细的方案,但是我有几个疑问,希望大家能够继续深入讨论。
1) 是2006年2月份期间的某个delta request出现了问题,仅仅删除和reload 2006.05之后的requests好像并不能解决问题?所以我估计你的意思是删除和重载2006.02之后的requests,是这样吗?
2) R3端Delta Queue里仅存当前最近的一个Delta的内容,我们可以repeat最近的一个delta request,但是在不改动Delta指针(或timestamp的设置)的前提下,无法控制delta选择重载从什么时候开始的数据,对吗?因此,我估计你的意思是用full repair load 2006.02 到目前的数据,然后做一个re-init without data transfer,再恢复正常的delta,是吗?
3) 可是full repair需要考虑选用合适的seletions,否则会造成duplicated data或者data missing的后果。这时又不得不考虑从data source到ODS的update方式是怎样的。如果是overwrite的话,可以不必担心有重复数据,但是还是不能避免数据缺失。如果没有合适的selections又该怎么办呢?
4) 另外,在本案例中,由于数据量很大,而且数据流复杂,影响的ODS和Cubes很多,重载数据必然会影响到大量的报表的正常使用,所以delete and reload data是在不得已的情况下再作考虑的最后方案。有没有别的解决方案呢?
补充:从datasource到ODS A的load使用了PSA tables.
JC.Z
--------------------------------
MSN: jc.z.info@gmail.com
|
|
|
Posted by 沧海小鱼 on 2007-06-26 04:37 下午
|
看了,才发现其实自己对这些东西还有太多的疑问!
抓紧学习
|
|