要求是将来自源的目标记录标记为I,U,D,I-insert,D-Delete,u-Update。源和目标是各种RDBMS系统。
来源 - 甲骨文 目标 - Greenplum
在scd type1上使用lookup我们能够实现I和U标志。由于查找基于主键的equi连接,因此标记已删除的记录是一项挑战。无法使用左外部或全外部连接
您的意见非常明显
答案 0 :(得分:1)
除了已经提到的解决方案之外,为了提高性能,您可以在加载之前将所有内容标记为已删除,然后相应地标记插入/更新。这样你可以避免比较。
答案 1 :(得分:0)
我不确定我是否正确理解了该要求,但假设您根据非来源的数据删除了记录。
可能有一些方法。您应该在源和目标中有一个键来标识相同的记录。
如果以上假设是正确的,请遵循以下流程:
如果我对上述问题的理解错误,请更正。
答案 2 :(得分:0)
正如Thilak所提到的,源和目标是两种不同的RDBMS,我们无法逆转减去。
你必须在两个步骤中处理,在oracle中的staging表中暂存从source接收的所有内容,然后在staging表中加载delta compare以根据完全外连接决定I / U / D.
假设您始终从源获得满负荷。如果来源未发送完整数据,您将无法跟踪删除。
希望它有所帮助!
答案 3 :(得分:0)
Powerexchange是另一种信息产品,它可以从oracle重做日志中读取,以实时确定源数据库记录的变化。这些记录可以在DTL__CAPXACTION字段中标记为I U或D.然后,Powerexchange通过应用程序多组源限定符连接到powercenter映射。
如果他们追求的解决方案更加内联其他人所做的假设我会选择Maciej - 很好,很简单