关于数据仓库设计中遇到的问题

来源:百度知道 编辑:UC知道 时间:2024/09/21 05:37:09
请教个问题
业务系统增量抽取数据,建立stage层,只存放增量抽取业务系统更新过的1天的数据(只存放1天的数据)(包括新增和修改的记录)
那对于主从关系的2个表,比如a表中的bid和b表中的bid,其中的bid字段为关联字段.需要将关联后的结果插入进dw
如果a表的这条记录修改过了,而对应b表中的bid会因为未更新此记录而没有抽取到此记录,就像select * from a left join b on a.bid=b.bid结果就是b表所有字段都为空了.有什么解决方法吗?
我的解决方案是
从业务系统中 增量抽取数据进ods层(保存所有记录不删除),因为所有记录都在然后再关联a和b表的结果进到dw,select * from a left join b on a.bid=b.bid where a.update='昨天日期'请问这种设计有问题吗
还有种就是主表只抽取最近1天的数据(只保存1天的数据),辅表增量抽取所有数据不删除,再此情况下做关联,因为主表只有需要的记录,做关联的效率很高,此处就不需要用update来做限制.
但是万一以后此主表做为了其他表的辅表,就需要改程序将此表增量抽取的也需要全部保存了,可能程序复杂度就比较高了.
我是完全的手动编写代码etljava 请教高手,回答的好追加,请举实例,不要长篇大论,谢谢
可能我说的太过罗嗦 其实就是如果每次只抽a 和 b表1天的更新数据而已,然后要组合成c表,处理完成后清除抽取的数据,但可能b表并没有更新,所以在组合时c表就会有很多空字段,那些字段的数据在源系统中存在.

一般做项目客户都需要保存历史记录的。解决方法叫缓慢变化维,百度上有很多,我介绍一种常用方法:
在增量抽取时,我们将数据发生变更的历史保存在表中,表设计时添加三个字段,做适当冗余(其实两个字段也能实现,只不过实现比较麻烦)。添加字段为etl开始时间,etl结束时间,数据是否最新。这三个字段用来保存表变更发生的历史记录(变更发生在非主键键位上,主键发生变更视同为新纪录)。
这样就可以解决你的问题了