Informatica会话拒绝先更新,然后以“先更新后再插入”模式插入

时间:2019-06-08 16:39:32

标签: informatica informatica-powercenter

非常基本的设置:从源到目标-想要复制MERGE行为。 删除了更新策略,在会话中的目标上激活了“先更新后插入”规则。不能按所述方式工作,即使有相同的键到达,也总是尝试插入到主键列中,这应该已经触发了“更新”语句。尝试了其他目标方法-始终尝试插入。随附的是映射图片。

basic merge attempt

2 个答案:

答案 0 :(得分:0)

最后弄清楚了。您必须在3个地方进行编辑:a)映射-删除更新策略b)session :: target属性-设置“先更新然后插入”方法c)会话自己的属性-“将源行视为”

在第三种情况下,您必须将“将源行处理为”从插入切换为更新。 然后,这将允许-更新和插入。

为什么这样设置超出了我。但这有效。

答案 1 :(得分:0)

我将尝试澄清一下。

首先,在映射中使用Update Strategy要求将会话Treat source rows as属性设置为Data driven。这是最慢的选项,因为这意味着它将在映射中逐行设置-但这正是使用Update Strategy转换所需要的。因此,为了镜像MERGE,您需要将其删除。

并告诉会话不要再在映射中看到此内容-因此需要将该属性设置为其余属性之一。有两种选择:

  • Treat source rows as设置为Insert-这意味着每次将插入所有行。如果没有错误(例如,由唯一索引引起的错误),则数据将相乘。为了模仿MERGE行为,您需要添加唯一索引以防止插入,并将目标连接器告知insert else update。这样,如果插入失败,将尝试进行更新。
  • Treat source rows as设置为Update-现在这将告诉PowerCenter尝试对每个输入行进行更新。现在,使用update else insert将导致在发生故障(即没有行要更新)的情况下不会出现错误-而是尝试进行插入。这里不需要唯一索引。那是一个区别。

其他差异-尽管两种解决方案都将反映MERGE操作-可能会观察到性能上的差异。在很少有新数据的环境中,第一种方法会很慢:每次插入尝试都会失败并随后执行更新操作。仅几次,它将在第一次尝试中成功。第二种方法将更快:更新将在大多数时间成功,并且在极少数情况下,更新将失败并导致插入操作。

当然,如果不经常需要进行更新,则情况恰恰相反。

这可以看作是简单合并的复杂解决方案。但这也使开发人员可以影响性能。

希望这会有所启发!