如何手动更新动态缓存?

时间:2015-02-27 18:46:44

标签: informatica

方案

Source -> Lkp(dim) -> Expr -> 2Targets (Dim Table and Fact table)
  • 此处目标dim表被缓存并用作动态查找。
  • 每当一行来自源时,就会在缓存中查找它。
  • 如果lkp成功,则检索ID并将其与其他列一起插入Fact。
  • 如果lkp失败,则通过Sub Procedure调用数据库在Expr中生成新ID,并将其与其他列一起插入Dim和Fact表中。

问题

  • 由于ID不是查阅列,因此需要在动态缓存中分配值。
  • 我可以使用关联的表达式来设置静态值或序列。
  • 但我需要这个ID由DB生成,除非你通过lkp并进入Expr
  • ,否则不会发生这种情况
  • 如果我使用来自informatica的自动序列,则昏暗的表和缓存将不同步 - 一个从informatica获取序列,另一个从DB获取。
  • 我无法使用informatica seq,因为此映射将同时运行多个实例。

插图

昏暗表

ID    col1    col2
401   a       1
402   b       3
403   h       8

查找

ID    col1    col2
401   a       1
402   b       3
403   h       8

事实表

fcol1    fcol2    fcol3    ID(foreign key to DIM)
aa       11       1        401
bb       33       4        401
dk       44       2        403

来源

col1    col2
h       8
v       6
v       6
  • 来自源头的第一张唱片将顺利进行。它将从lkp
  • 中插入ID为403的事实

第一次记录后的事实表

fcol1    fcol2    fcol3    ID(foreign key to DIM)
aa       11       1        401
bb       33       4        401
dk       44       2        403
eo       23       5        403
  • 来自源的第二条记录在lkp中找不到匹配项,因此会立即更新缓存。
  • 然后Expr将执行此逻辑。如果(lkp失败)则调用sp(seq_gen),否则使用从lkp获取的id
  • 新ID将插入DIM和FACT
  • 问题是这个新生成的ID不可用于查找缓存。相反,它使用来自关联端口的值。

第二次记录后的事实表

fcol1    fcol2    fcol3    ID(foreign key to DIM)
aa       11       1        401
bb       33       4        401
dk       44       2        403
eo       23       5        403
fa       32       3        404

第二条记录后的昏暗表

ID    col1    col2
401   a       1
402   b       3
403   h       8
404   v       6

查找

ID    col1    col2
401   a       1
402   b       3
403   h       8
<ap>   v       6
  • 其中是关联的端口表达式。我们可以在这里写任何表达。我如何在这里带404。我无法在此处编写Expr表达式,因为我无法检查查找是否失败或成功。

第三条记录后的事实表

fcol1    fcol2    fcol3    ID(foreign key to DIM)
aa       11       1        401
bb       33       4        401
dk       44       2        403
eo       23       5        403
fa       32       3        404
ep       53       6        <ap> (I expect 404)

0 个答案:

没有答案