关于informatica的Dynamic Lookup组件使用中遇到的一个问题的思考

Dynamic Lookup组件是Lookup组件的一个分支,主打动态缓存查询;平常的Lookup组件的缓存都是静态的,即从查询表中将数据全部读入缓存中后,如果查询表中的数据该表,那么缓存中的数据也不会随之而变,为了解决这个问题就有了Dynamic Lookup组件,查询表中的数据变化会同步到缓存中,我这篇文章不说这个组件怎么用,仅仅是记录下在学习杜绍森老师的《informatica powercenter 权威指南》的时候在Dynamic Lookup组件遇到的问题。

在《权威指南》中介绍Dynamic Lookup的例子,最开始是用Lookup组件直连目标表,这种直连最后会在运行第三次工作流时报错,报错信息为:CMN_1650 试图将重复行插入动态查找缓存中,动态查找缓存只支持唯一条件键;经过分析,像书中举例的源表除非是表中都是全新的数据(就算是修改原数据而产生的也会有问题),因为Lookup组件本质上是通过设置“条件”选项中的查找列来进行匹配的,例如例子中的ID=ID_IN,一开始目标表中没有ID=1的数据,那么运行工作流的时候ID=1的数据就会被插入到目标表中,它的newLookupRow=1,此时目标表中就有了一条ID=1的数据;运行第二次工作流的时候会把缓存中的数据更新,那么缓存中也有了一条ID=1的数据,这时根据Dynamic Lookup的运行特点,在缓存中找到了这条记录,那么就应该是更新或者不动,根据例子中的意思,应该是更新这条记录的某个字段,那么将其newLookupRow=2,然后插入到目标表,此时目标表中有两条ID=1的数据,第三次运行工作流时,会将这两条ID=1的记录都读入缓存中,这就造成了CMN_1650错误。

在后面的时候在这个工作流的mapping中加入了update strategy组件,这样可以对每一条数据进行处理,其属性页中的update strategy expression中的条件为:decode(NewLookupRow,1,DD_INSERT,2,DD_UPDATE,DD_REJECT),即对每条数据,如果传到update strategy组件中,其newlookuprow为1则插入,为2,则对相关数据进行update操作,其他的抛弃,这样就可以保证目标表中始终只有一条ID=1的数据,当然,将ID列设为虚拟主键,才会有这种效果。

posted @ 2018-08-03 15:59  明月镇魂  阅读(665)  评论(0编辑  收藏  举报