informatica中lookup组件学习

LOOKUP控件的主要目的是:
从关系型的表、视图或者同义词中根据lookup 条件查询lookupport,返回查询结果,供mapping 中的其他控件使用或者插入到目标表
LOOKUP控件能够完成的任务包括:
得到一个关联的值,例如根据USER_ID 得到USER_NAME

执行一个计算,例如得到计算公式中的一个乘数
更新缓慢变化的维表,可以用LOOKUP 来判断当前记录是否在目标表中已经存在
LOOKUP控件的类型:
Connected:直接从其他控件获得输入信息;可以使用静态或者动态的Cache;只缓冲mapping中用到的port;每条记录可以返回多个column,并且能够插入到动态Cache 中;查询条件无匹配时,返回所有输出port的默认值,如果使用动态Cache,Informatica Server把记录毫无改变的保留在Cache中;支持用户定义的默认值;返回多个输出值到另一个控件中
Unconnected:间接的从其他控件的:LKP表达式的结果来获得输入信息;只能使用静态Cache;缓冲所有的port;每条记录只能返回一列;查询条件无匹配时,返回NULL;不支持用户定义的默认值;将返回值输出到定义:LKP表达式的控件中
Connected LOOKUP控件的处理过程
1.直接从mapping 中的另一个控件获得输出数据
2.对于每一条数据,Informatica Server 根据LOOKUP控件中的条件去查询LOOKUP表或者是Cache
3.如果LOOKUP 控件是Uncached 或者使用的是静态的Cache,InformaticaServer返回查询的结果;如果使用的是动态的Cache,Informatica Server 在Cache中查询从LOOKUP表中查询得到的结果,如果在Cache 中不存在,则将结果插入到Cache中,如果在Cache中存在,则更新这些记录或者不做改变,同时标记这些记录是“插入”、“更新”、“无变化”等类型
4.然后将结果返回到下一个控件
可以将上面的经过经过filter 或者router 控件来得到对于目标表中不存在的记录
Unconnected LOOKUP控件的处理过程
1.相关控件想间接的从其他LOOKUP 控件的:LKP表达式的结果来获得输入信息,例如UPDATE STRATEGY 控件
2.对于每一条数据,Informatica Server 根据LOOKUP控件中的条件去查询LOOKUP表或者是Cache
3.Informatica Server 返回一个值到LOOKUP 控件的return port
4.Informatica Server 返回值到调用:LKP 的控件的表达式中
Unconnected LOOKUP 控件的主要用处是更新缓慢变化的维
LOOKUP控件的组件
LOOKUP 表
需要有源或者是目标中的一个可以访问这个LOOKUP 表;可以是一个单独的表,也可以使用SQL语句覆盖来得到一个包括多个表的查询通过连接到数据来引入LOOKUP 表的定义,可以通过数据库的本地驱动或者是ODBC来进行连接,但是使用数据库本身的本地驱动性能更好一些对于非常大的LOOKUP表,考虑添加索引来提高查询的性能,索引需要包括LOOKUP 条件中的所有的字段对于Cache LOOKUP,将LOOKUP的ORDER BY 子句中的包含在索引中即
可;对于Uncached LOOKUP,要把LOOKUP 条件里面的自动都加入到索引中
LOOKUP端口
I:输入端口
O:输出端口
L:查询端口,在默认的SQL 中出现,LOOKUP 表中的每列都被自动的定义
为L 和O 端口,可删除
R:无连接LOOKUP 中的返回端口
LOOKUP属性
Lookup SQL Override 只能在cache enable的情况下才能用,另外不要输入ORDER BY 子句,即使输入INFORMATICA 也会产生ORDER BY 子句
Lookup CachingEnabled:如果选中,查询一次表,以后的记录都从缓冲中去查询;如果不选,每条记录都从数据库中查询一次
Lookup Policy on Multiple Match:确定在uncached 和static cache的情况下如何处理查询得到的多条记录,可以取得第一条、最后一条或者是报错;在dynamic cached的情况下,如果查询得到多条记录,会报错
Dynamic Lookup Cache:当把经过的记录插入到目标表的同时,插入或者更新cache里面的记录
Insert Else Update:如果选中整个选项并且进入LOOKUP控件的记录类型是INSERT,那么对于不存在的记录进行插入,对于存在的记录进行更新;如果不选中这个选项,只是对那些是INSERT类型的记录在cache 进行寻找,找不到则插入,否则不做其他操作

Update Else Insert:如果选中整个选项并且进入LOOKUP控件的记录类型是UPDATE,那么对于存在的记录进行更新,对于不存在的记录进行插入;如果不选中这个选项,只是对那些是UPDATE类型的记录在cache 进行寻找,找到则更新,否则不做其他操作。
LOOKUP查询
默认产生ORDER BY 子句,并且顺序与SELECT 中的字段的顺序是一致的SYBASE中的ORDER BY 子句最多可以有16 个字段,因此如果LOOKUP 中有超过16 个字段的查询,必须使用多个LOOKUP控件进行查询当在OVERRIDE SQL 中要写WHERE子句时,如果是dynamic,必须在LOOKUP控件前面添加一个FILTER 控件,来确保只有满足条件的记录被插入到cache和目标表中如果没有cache,sql override 无效;在override 中SELECT 的字段必须与L 端口和O端口一致
LOOKUP条件
类似于WHERE 子句;条件中的数据类型必须一致;多个条件之间的关系是“与(AND)”;NULL值是可以匹配的;
如果有多个条件,把带等号的条件放在前面,可以提高性能;对于有多个匹配的情况,可以选择返回的类型:第一个匹配、最后一个匹配、返回错误;INFORMATICA的ORDER BY 是升序排列的dynamica cache 的情况下,因为不能返回多个记录,所以只能使用等号的条件
LOOKUPtips
给LOOKUP 条件中的字段添加索引把带有等号的条件放置在前面把较小的LOOKUP表进行cache在数据库中进行表的关联:如果LOOKUP表和源表在同一个数据里面,而且cache是不可能的,就在数据库里面进行表关联对于静态的LOOKUP表,尽量使用永久性的cache:这样可以在多个session 见复用如果想在EXPRESSION 中使用:LKP来调用查询的结果,引入一个unconnected 的LOOKUP
对于cache 的LOOKUP,重定义ORDER BY 子句:1)generate SQL;2)按照LOOKUP
条件中的字段的顺序添加ORDER BY 语句;3)在ORDER BY 语句后面添加--,作为重定

义的记号,否则出错

文章源地址:http://blog.sina.com.cn/s/blog_62d12053010170ub.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章