
Daiziliang
鑫磊
-
个人空间
- 组别:管理员
- 性别:
- 来自:北京市
- 积分:329
- 帖子:136
- 注册:
2007-04-19
|
回复: 数据仓库中使用ODS
这个要看用户需求,对于你的多个问题,分别回答如下:1\ 应主要依据哪些内容或指标来分别建立DW和ODS? 依据用户的需求和数据源的复杂程度,ODS的功能是存储当前各数据源的数据快照,不保留历史信息,ODS是各数据源的大集成,在这里数据还没有做一致性处理,用户可以基于此ODS数据对当前数据进行查询,可以做简单的报表,这里的指标(例如量度)与DW一致,不过缺少计算成员(例如财务上的同比,环比等,但这些可以在DW中处理得到,也可以在CUBE中建立KPI); 基于ODS数据建立DW,在DW中非常重要的一点,也是DW与ODS的主要区别是DW保留历史数据.在DW中,数据得到集成,异构数据在这里得到转换和一致性处理,各维度表和事实表里面的数据也得到集成且保留历史数据,各量度指标与ODS相同,且建立了其他更多需要的量度等数据信息.2\ ODS是否也有提供给终端用户的应用? 提供,基于ODS可以进行简要的报表查询,可以浏览当前细节数据,可以查看数据库快照.3\ 是否允许用户直接修改DW和ODS中的数据?如果可以,又如何保持数据的一致性? 这个问题很有代表性.ODS中的数据是可以修改的,在ODS中保留当前最新值,DW中保留当前值以及历史值.那么从源到ODS以及从ODS到DW都使用缓慢维度变化.具体是从源到ODS使用第一种缓慢变化---完全更新,这样做的原则是ODS只存储最新数据;从ODS到DW使用第二重缓慢变化---保留历史更新,这样做的原则是DW中保留历史数据,数据在DW中进行存储,后面的CUBE基于历史数据进行搭建.对于数据的一致性处理也使用缓慢变化.关于缓慢变化,这是我以前的一个总结: 对于缓慢变化维度,有三种情况:1、缓慢变化维度第一种类型:历史数据需要修改。这种情况下,我们使用UPDATE方法来修改维度表中的数据。例如:产品的ID号码为123,后来发现ID号码错了,需要改写成456,那么,我们就在ETL处理时,直接修改维度表中原来的ID号码为456。2、缓慢变化维度第二种类型:历史数据保留,新增数据也要保留。这时,要将原数据更新,将新数据插入,我们使用UPDATE / INSERT。比如:某一员工2005年在A部门,2006年时他调到了B部门。那么在统计2005年的数据时就应该将该员工定位到A部门;而在统计2006年数据时就应该定位到B部门,然后再有新的数据插入时,将按照新部门(B部门)进行处理,这样我们的做法是将该维度成员列表加入标识列,将历史的数据标识为“过期”,将目前的数据标识为“当前的”。另一种方法是将该维度打上时间戳,即将历史数据生效的时间段作为它的一个属性,在与原始表匹配生成事实表时将按照时间段进行关联,这种方法的好处是该维度成员生效时间明确。3、缓慢变化维度第三种类型:新增数据维度成员改变了属性。例如:某一维度成员新加入了一列,该列在历史数据中不能基于它浏览,而在目前数据和将来数据中可以按照它浏览,那么此时我们需要改变维度表属性,即加入新的字段列。那么,我们将使用存储过程或程序生成新的维度属性,在后续的数据中将基于新的属性进行查看。 对于缓慢变化,SSIS中有个专门的组件,在后面我会详细介绍它.在该项目中,我们建立了90多个相关的事实表和维度表,每步数据处理我们都使用了缓慢变化,缓慢变化处理是解决维度表属性变化的好办法.
|