关于olap的etl更新周期问题以及差分更新问题

hyena041 2010-05-15 04:32:48
我们都知道OLAP与OLTP不同的一个特点是OLTP是实时在线业务处理而OLAP是历史数据
但当我们的系统处理的业务数据是可变的时候,而时间维度在我的OLAP中不是决定历史数据递增的必要因素时,OLAP的增量更新就无法实现了.详细说明下,业务的模式是,我们处理的分析数据是实时收集数据,而数据的准确性是根据时间随时进行编辑修改和调整,比如说某一个销售数据,初次录入的时候是100元,但在经历一个小时后,发现此销售数据并不准确,ODS重新获得数据值经过业务调整为了98元,那么这个时候需要进行OLAP的重新加载.而我们建立的cube进行一次全量加载需要的时间根据当前数据量为30分钟,这又与业务需求每半个小时进行OLAP数据刷新相矛盾.即,我们需要每半个小时进行一次OLAP的处理,而处理时间又是半个小时的周期,这样,我们就无法提供正常的OLAP查询服务了.
不知道有没有大侠碰到过相关的问题,有什么好的建议没有!
...全文
169 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Simba_Ji 2010-05-17
  • 打赏
  • 举报
回复
说的对,现在这实时报表,最好是用SQL 语句出的;可以使用ReportingSerice去做
在CUBE中半小时更新一次,确实不合理的!

http://shop37090346.taobao.com
hyena041 2010-05-17
  • 打赏
  • 举报
回复
非常感谢大家的建议
me_online希望可以线下和你再交流一下

最后再说明一下,我们准备针对me_online的几个建议做一些测试,另外再增加同步机制的方法进行测试,比较后决定最终的实现方式
whb147 2010-05-16
  • 打赏
  • 举报
回复
仓库的数据是历史的数据,不提供实时的状态的,主要用来作分析的
你要查找实时的状态,就去事务库去
你不要把所有的报表都从数据仓库去出,那样复杂度就大多了
Me_online 2010-05-16
  • 打赏
  • 举报
回复
楼主的说的应用很常见呀,对OLAP 中历史数据的修改也很普通,假如你使用 SSAS 建立你的 OLAP,可以尝试使用下面几个途径:
1)ETL 增量加载 + Cube Process Data. ETL 增量并不是只指新增加的数据,而是指任何数据的变化。从你描述的需求来看,你的 Cube 的结构基本上是稳定的,而只是 Fact 表的数据修改和更新而已。Cube 的处理有很多选项,其中 Process Data 只用来处理数据变化,它要比你 Process Full 快得多。
2)Realtime Cube (中文叫实时数据仓库),SSAS 中的实时Cube并不是通过触发器来建立的,而是通过一种叫做 Cache 的技术实现的(设置 Cube 中的 ProactiveCaching 属性),性能最好最常用的就是 Auto MOLAP, 有点像 SQL 里的 Job, 可以定时处理更新的数据。但是为了真正的实现这种方案,你需要大量的测试和调整来满足你的‘实时’要求。
3)还有一种不太经常使用的对Cube 历史数据修改的技术叫做 Writeback (回写),是一种对Cube 数据直接修改的技术,这种方式有很多限制比如聚集函数只能是求和,只能修改Cell的值等...
Simba_Ji 2010-05-16
  • 打赏
  • 举报
回复
可以考虑我的那个方案的;其实人这种需求报表,完成可以用SQL去做的

http://shop37090346.taobao.com
hyena041 2010-05-15
  • 打赏
  • 举报
回复
多谢Simba_Ji
我也同意你的观点,但是我这里的情况有所不同,首先,我处理的不是你想象的业务数据,一般来说,我们的数据仓库都是针对某一企业的业务,或者是生产,或者是服务的实际发生情况的分析整理.
但是我这里的情况正好相反,我这里处理的是咨询类行业的市场业务调查.据有不实时性的特点,所以,在这里时间的维度不可变性被打破.举个例子来说,市场调查某一产品在某一天的价格,由于收集的时间点不同,在上午的时候填入价格为一个价格,在中午和下午,业务人员会对此价格进行修正
而对于市场的分析,又要求分析系统能最快的提供分析数据
这里就存在了某一历史数据被修改的特质
呵呵,所以增量在这里是不适用的,如果可以的话我们也想使用差分的方式进行OLAP数据的重构,可惜的是,我们没找到合适的方法
Simba_Ji 2010-05-15
  • 打赏
  • 举报
回复
有一个不是很合理的方案,供你参考:
1)将你的业务数据库,做为数据仓库;这样数据仓库就是实时 (可以通过触发器,同步业务表和事实表)
2)将你的CUBE 存储方式,设为ROLAP ;(即每次分析时,自动分析的是 关系数据库的数据仓库)
这样的CUBE容量很少,处理很快,但是查询会相对较慢的
Simba_Ji 2010-05-15
  • 打赏
  • 举报
回复
这位兄弟,你的这种设计方法是用问题的,我提出的我的几点看法
1)OLAP 一般是分析历史数据,当然有提到过实时机制,但那指的是CUBE 与 数据仓库的实时;并非与业务数据仓库的实时;

2)数据准确性是指 历史数据的准确性;比如你今天的数据,不可能有包含上个月的业务数据,那边针对上个月来说,数据是准确的,不会再变的

3)CUBE处理数据量太多时,你可以在ETL的时候,使用 增量导入 ,而不是全量导入 ;这样时间可以省很多的;处理CUBE的时候,可以针对性的处理;

4)像你这样需要半个小时出报表的模块,肯定不是使用CUBE来计算的你可以使用SQL 语句在业务数据库上来出当日报表
黄_瓜 2010-05-15
  • 打赏
  • 举报
回复
帮顶。

590

社区成员

发帖
与我相关
我的任务
社区描述
提出问题
其他 技术论坛(原bbs)
社区管理员
  • community_281
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧