博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于informatica的Dynamic Lookup组件使用中遇到的一个问题的思考
阅读量:6634 次
发布时间:2019-06-25

本文共 1057 字,大约阅读时间需要 3 分钟。

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列设为虚拟主键,才会有这种效果。

转载于:https://www.cnblogs.com/JSD1207ZX/p/9414631.html

你可能感兴趣的文章
安卓开发之探秘蓝牙隐藏API(转)
查看>>
配置虚拟机网络的三种方式
查看>>
强大的模板引擎开源软件NVelocity
查看>>
ViewPager的简单用法+适配器+监听器的介绍
查看>>
Tomcat全攻略
查看>>
(转)SDL 1.2 to 2.0 Migration Guide--SDL1.2更新到SDL2.0指南
查看>>
RMAN-FORMAT-CONFIGURE及动态性能表
查看>>
微软最牛MS08-067漏洞各系统补丁下载地址
查看>>
JSP验证码
查看>>
C# 导出CSV功能记录下
查看>>
WebGL 入门-WebGL简介与3D图形学
查看>>
memset函数具体说明
查看>>
JavaScript可否多线程? 深入理解JavaScript定时机制
查看>>
Android系统Recovery工作原理之使用update.zip升级过程---updater-script脚本语法简介以及执行流程(转)...
查看>>
实用国际(XX)计量单位表
查看>>
OJ2.0userInfo页面Modify逻辑bug修复,search功能逻辑实现
查看>>
使用反射动态创建类型实例
查看>>
配置SQL Server 2008 R2 Reporting Services
查看>>
WebServices中Xml的序列化
查看>>
[转]测试的三重境界
查看>>