0

我实现了与下面相同的映射。有人可以建议这是不是好方法。

从生产中复制的旧记录,因此他们没有为这些记录提供标志。只有新记录我们才会得到标志。

源数据:

col1   col2 col3  DML_FLAG
1      a    123   NULL(old record)
2      b    456   I
3      c    678   U

映射:

Source...>SQ...>exp...>lkp(on target to identify new or update)
       ..>exp..>...>RTR(for insert and update)-->upd(for update)...>target

第一次加载我必须加载所有记录,即完全加载(旧记录(DML_flag 为空)和新记录

从第 2 次运行开始,我必须仅从源捕获更改的记录。为此,我使用映射变量

在这里我有一个问题,我们已经在源代码中再次提供了 I 和 U 标志我正在使用 LKP,无需查找,我可以在 RTR 中将 DML_FLAG 与两组 I 和 U 一起使用。

但是我需要每 30 分钟刷新一次数据,在 30 分钟内插入一条记录(I)并更新同一记录,然后源中的标志更改为“U”,同一记录在目标中不可用,在这种情况下如何我可以在没有 lkp 的情况下捕获带有标志“U”的新记录吗?

有人可以建议我如何在不查找的情况下做到这一点?

4

1 回答 1

0

根据我对您的问题的理解,您要确保在将更新应用于同一条记录之前将插入应用到目标中 - 这是正确的吗?如果是这样,只需使用一个目标加载计划,该计划将插入路由到同一目标的单独别名,并且在加载顺序中高于更新

作为设计选择这是否正确的答案取决于目标数据库是什么......对于数据仓库事实表,您通常会插入所有记录,无论它们是插入还是更新,因为您将报告事件而不是记录状态. 对于维度表,这取决于您缓慢变化的维度策略

于 2018-06-15T06:44:32.960 回答