一、Informatica介绍
Informatica PowerCenter 是Informatica公司开发的世界级的企业数据集成平台,也是业界领先的ETL工具。
Informatica PowerCenter使用户能够方便地从异构的已有系统和数据源中抽取数据,
用来建立、部署、管理企业的数据仓库,从而帮助企业做出快速、正确的决策。
此产品为满足企业级要求而设计,可以提供企业部门的数据和电子商务数据源之间的集成,
如XML,网站日志,关系型数据,主机和遗留系统等数据源。
此平台性能可以满足企业分析最严格的要求。
Informatica PowerCenter已被全球多家著名企业用来建设BI/DW系统,
它可集成和分析企业的关键商务信息,优化整个商务价值链的表现和响应速度。
Informatica PowerCenter拥有一个功能强大的数据整合引擎,
所有的数据抽取、转换、装载的功能都是在内存中执行的,不需要开发者手工编写这些过程的代码。
Informatica PowerCenter 数据整合引擎是元数据驱动的,
通过知识库和引擎的配对管理,可以保证数据整合过程能够最优化执行,
并且使数据仓库管理员比较容易对系统进行分析管理,从而适应日益增加的数据装载和用户群。
二、informatica开发步骤:
定义源: Desinger
定义目标: Desinger
创建映射: 源--》转换组件--》目标
Mapping都是由源表、转换组件和目标表组成,用于描述数据抽取的过程。
源表和目标表可以从源和目标文件夹拖拽到工作区,转换组件需要手动创建。
Mapping设计的关键就是转换组件的使用,这关系到数据抽取的正确性和效率。
定义任务: Workflow Manager
创建工作流: Workflow Manager
工作流调度监控 : Workflow Monitor
三、转换组件
1. 组件列表
Source Qualifier 从数据源读取数据
Expression 行级转换
Filter 数据过滤
Sorter 数据排序
Router 条件分发
joiner 异构数据关联连接
Lookup 查询连接
Aggregator 聚合
Update Strategy 对目标编辑(insert\update\delete\reject)
Union 数据合并
Sequence Generator 序列号生成器
Normalizer 记录规范化
Rank 对记录进行TOPx
Transaction Control 对装载数据按条件进行事物控制
Stored Procedure 存储过程组件
Custom 用户自定义组件
HTTP WWW组件
Java Java自编程组件
其它应用组件
2. 组件类型
Passive类型:流入流出组件的行数不发生变化,如:Expression、Lookup、HTTP组件。
Active类型 :流入流出组件的行数会发生变化,如:Aggregator、Router、Filter组件。
Connected :表示该转换组件需要连接到数据流。
Unconnected :表示该转换组件可以不连接到数据流。
四、组件
1.Source Qualifier组件
作用:根据查询SQL从关系表读取数据或直接从文件中读取数据。
用法:创建好Source Qualifier后,将需要用的字段从源表拖拽到SQ,双击SQ,对SQ属性进行设置。
命名:SQ_Name
类型:Active/Connected
属性解释:
Sql Query: 用户定义的 SQL 语句。先生成SQL,再进行改写。
User Dfined Jion:联接不同源的 WHERE 子句。连接多张表的关联条件。
Source Filter:对源记录应用的筛选器。非连接条件外的其他查询条件。
Number Of Sorted Ports:用于排序的输入端口数量
Select Distinct:仅选择相异值。去重。
Pre SQL:在管道运行之前使用源数据库连接执行的 SQL 语句。
Post SQL:在管道运行之后使用源数据库连接执行的 SQL 语句。
Output is deterministic:在会话运行期间源数据不更改。
Output is repeatable:源数据已排序。
注意:
N个同构数据源只需要1个Source Qualify组件关联,
关联时建议将Source设计区将需要关联的源表手工用连线关联起来,
在Mapping设计区删除各个源所带的Source Qualify组件,
用一个新的Source Qualify组件包含所有源的字段内容。
例2:从emp表中只复制20号部门的数据到t_emp_2中
Source Qualifier组件--》“属性”页签--》Source Filter=“EMP.deptno=20”
例3:从emp和dept两张源表复制30号部门的数据到目标表t_emp_3
拖入两张源表,删除单一的Source Qualifier组件,点SQ重新生成Source Qualifier组件。
User Defined Join=“DEPT.DEPTNO=EMP.DEPTNO”
Source Filter=“EMP.deptno=30”
作业1:
源表:学生表、课程表、成绩表(建表语句和数据见《学生表及数据.txt》)
目标表:(学生名、出生日期、课程名、讲师、成绩)
create table t_students(
s_name varchar2(20),
birth date,
c_name varchar2(20),
t_name varchar2(20),
grade number(3)
);
从3个源表向目标表t_students抽取数据。
注意:如果有大数据量的表,则可能导致内存被沾满,其他表加载不上。
2.Expression 组件
作用:
基于行级的数据项赋值、修改、计算;
在同行记录中可新增、减少数据项。
用法:
创建好Expression 组件后,将需要用到的字段从其他组件拖拽到EXP中,双击EXP,新增输出端口,编辑该端口的表达式。
命名:EXP_Name
类型:Passive/Connected
应用范围:
数据类型转换,例如Expression:to_date(Port1,‘yyyymmdd‘)
数据项计算,例如Expression:(Port1,Port2)/Port3
新增变量,例如Expression:i=i+1
I项: 流入组件的数据项
O项:流出组件的数据项
V项:组件中定义的变量
Expression项: 对数据进行计算的表达式
Default value项:当数据项为空时的默认值
例4:从emp表中复制数据到t_emp_4中,
t_emp_4表记录年薪并对职位进行+部门号处理,
作业:
源表:EMP
目标表:emp_zuoye_2
功能:工资加500,职员姓名改小写
3.Filter 组件
作用:
对流入组件中的记录数据进行过滤;
类似于关系型数据库的where;
与Source Qualifier的过滤功能区别在执行位置上。
用法:创建好Filter 组件后,将需要的用的字段从其他组件中拖拽到FIL中,
双击FIL,对FIL的属性进行设置,Filter Condition写入类似where条件的表达式即可。
命名:FIL_Name
类型:Active/Connected
属性解释:
Filter Condition:对记录应用的筛选器。where条件。
Tracing Level:会话日志中的详细信息量
注意:
在Source Qualifier中User Defined Jion、Source Filter、Number of Sorted Ports中定义了sql条件,
那么,在Filter 组件中就不要再重写相关的sql条件,否则,将不会生效。
例5:从文件或emp表中复制10号部门的数据到t_emp_5中
构造源文件emp.txt, 源--》从文件导入
E:\Informatica\9.6.1\server\infa_shared\SrcFiles\emp.txt
作业2:
源表:成绩文件
目标表:(学生号、课程号、成绩)
要求:只输出大于等于60的成绩信息
4.Router组件
作用:
对流入组件中的记录数据按照条件进行分发。
用法:在组页签增加分组和分组条件。
命名:RT_Name
类型:Active/Connected
属性解释:
Tracing Level:会话日志中的详细信息量
应用范围:数据分发
例6:将emp表的数据按照部门分别导入到T_emp6_10、T_emp6_20、T_emp6_30三张表内。
源:emp表
目标:T_emp6_10、T_emp6_20、T_emp6_30三张表
用位置关联
ora-26002 将target load type改为normal
作业3:
源表:成绩表
目标表:T_grade_80、T_grade_60、T_grade_default (学生号、课程号、成绩)
要求:
T_grade_80保存成绩在80-100的成绩表信息;
T_grade_60保存成绩在60-79的成绩表信息;
T_grade_default保存成绩在0-59的成绩表信息。
5.Joiner组件
作用:
对异构数据进行关联(连接查询来自不同数据库的表或者文件),同构数据关联使用Source Qualify组件;
类似于SQL中的Join语句。
用法:创建好Joiner组件后,将需要用的字段从转换组件拖拽到Joiner中,双击Joiner,对属性进行设置。
用于连接的两张表分为为Master和Detail,选取小表为Master,大表为Detail即可。
命名:JNR_Name
类型:Active/Connected
属性解释:
Cache Directory:用于缓存主记录的目录
Join Condition:联接条件
Join Type:联接类型分为4种,Normal Join等值连接,Master Outer Join左外连接,Detail Outer Join右外连接,Full Outer Join全链接
Null ordering in master:确定空值在主关系中是最高值还是最低值
Null ordering in detail:确定空值在详细关系中是最高值还是最低值
Tracing Level:会话日志中的详细信息量
Joiner Data Cache Size:联接器缓存中用于存储数据的容量(以字节为单位)
Joiner Index Cache Size:联接器索引缓存中用于存储数据的容量(以字节为单位)
Sorted Input:定义是否对输入数据进行排序。
Master Sort Order:定义主项的排序顺序: 升序或降序。
Transformation Scope:定义对输入数据执行转换的范围
应用范围:2个异构数据类型的表关联。
注意:
将数据量少的设置为Master;
需要对SQ中连接字段进行改名处理;
尽量多使用Normal Join 和 Master Outer Join两种类型连接,因为其它两种连接效率低。
5.1 同构、异构Joins对比
同种结构数据 不同DB或Flat与Flat之间
Source Qualify组件 Joiner组件
从源直接Joins 在PowerCenter中Joins
n个源可用1个SQ组件 n个SQ组件加上n-1个joins组件
在源中先定义连接关系 在Joiner组件中定义连接条件
5.2 Master和Detail选取
选取记录量小的数据源作为Master(选中M),
则另一个数据源为Detail,
Join条件为Master.主键列=Detail.主/外键列
5.3 Join类型
Normal Join 等值连接
Master Outer Join Detail全外连接
Detail Outer Join Master全外连接
Full Outer Join 全连接
例7:
描述:从emp.txt文件和dept表中等值连接并复制数据到t_emp_7。
源表:emp.txt文件、dept表
目标:t_emp_7
要点:用joiner组件进行Mapping设计
作业4:
源表:学生表、课程表、成绩文件
目标表:(学生名、出生日期、课程名、讲师、成绩)
步骤:
将源表学生表、课程表通过SQ先连接,再通过Joiner组件连接成绩文件,最后到目标表。
5.4 Sorter组件
作用:排序。
按照某个或多个字段进行排序(升序或降序)。
用法:创建好Sorter组件后,将需要用的字段从转换组件拖拽到Sorter中,双击Sorter,对属性进行设置。
在Ports页签选定key,再选择asc/desc。
命名:Sort_Name
类型:Active/Connected
属性解释:
Case Sensitive:排序时大小写是否敏感。
Distinct:获取唯一值。实现了sql中的Distinct功能。
Null Treated Low:是否将null值认为是小数。
例7-2:
描述:对例7进行改造,加入排序组件,以优化执行速度。
源表:emp.txt文件、dept表
目标:t_emp_7
要点:使用sorter组件对emp.txt文件、dept表中的deptno列进行排序,勾选Joiner组件的Sorted Input属性。
6.Lookup组件
作用:
对Flat File或数据库根据关联的条件进行查询;
返回符合条件的值,否则为空;
类似于SQL中的select子查询。
用法:创建Lookup的时候选择要查询的表。
有连接数据流和不连接数据流两种用法。
连接数据流方式:将要关联查询的字段从其他转换组件拖拽过来,然后双击LKP进行属性配置。
命名:LKP_Name
类型:Passive/Connected or Unconnected
属性解释:
Lookup Sql Override:针对查找值的替换查询。设置查询SQL。
Lookup table name:查找源表
Lookup Source Filter:应用于查找记录的筛选器。
Lookup caching enabled:会话过程中的缓存查找值。启用缓存,提高效率。
Lookup policy on multiple match:查找转换发现多个匹配时如何处理。
Lookup condition:对查找值应用的筛选器。设置查询条件。
Connection Information:来自源或目标的查询记录
Source Type:数据库、平面文件或管道
Tracing Level:会话日志中的详细信息量
Lookup cache directory name:查找缓存文件所在的目录名称。
Lookup cache persistent:指示缓存是持久的还是非持久的。是否使用永久缓存。
Lookup Data Cache Size:查找缓存中用于存储数据的容量(以字节为单位)
Lookup Index Cache Size:查找索引缓存中用于存储数据的容量(以字节为单位)
Dynamic Lookup Cache:用未发现的或新的查找值更新查找缓存
Synchronize Dynamic Cache:使插入与关系源同步。
Output Old Value On Update:定义在更新动态缓存中的行时是否输出输出端口的旧值。
Update Dynamic Cache Condition:仅当此条件为 True 时才更新动态缓存。
Cache File Name Prefix:保留的缓存文件的文件名前缀。查找将从命名缓存文件读取(如果合适),并保留到命名缓存文件中
Re-cache from lookup source:首次调用查找实例时,从查找源重建查找缓存
Insert Else Update:如果在缓存中找不到该记录则插入,若找到则将其更新。标志用于动态查找缓存
Update Else Insert:如果在缓存中找到该记录则将其更新,找不到则插入。标志用于动态查找缓存
Datetime Format:日期时间格式字符串
Thousand Separator:数值数据的千位分隔符
Decimal Separator:数值数据的小数分隔符
Case Sensitive String Comparison:字符串比较(区分大小写)
Null ordering:确定空值是最高值还是最低值
Sorted Input:定义是否对输入数据进行排序。
Lookup source is static:在会话运行期间查找源将不会更改。
Pre-build lookup cache:指定是否允许在实际需要之前预先构建查找缓存。
应用范围:
查询文本文件的关联数据;
查询数据库的关联数据。
6.1 连接Lookup与非连接Lookup
连接Lookup:流入值--》Lookup源--》查询到的值
查询条件:列=输入列
非连接Lookup:是否查询--》Lookup组件--》返回查询到的值
查询条件:IIF(ISNULL(列),:lkp.MYLOOKUP(替换列),列)
6.2 Lookup组件项
L:查询的数据项
R:返回值
注意:
如果Lookup表的类型是源表,则尽量使用Joiner组件替换Lookup组件,因为表连接比select子查询效率高。
一个已连接的Lookup组件不能再被其他转换组件调用。
如果查询表在session运行过程中不会改变,使用Lookup cache persistent属性可以提高性能;
尽量不要在Lookup Sql Override属性中使用order by子句,因为cached Lookup组件默认有order by。
例8:从emp、dept表中复制数据到t_emp_8中,t_emp_8中包含部门名称,使用emp作为源表、dept作为lookup表
例8-2:给例8增加条件,只找到工资大于3000的职员的部门名
IIF(SAL>3000,:LKP.LKP_DNAME(DEPTNO),‘‘)
错误:TM_6190 无法标识用作查找转换或存储过程转换的$Source或$Target的具有唯一性的关系连接或应用程序连接。
解决方法:Connection Information属性由$Source改为O_source即可。
例9:从emp表中复制数据到t_emp_9中,t_emp_9中包含empno,ename,mgr,mgr_name。
作业5:
源表:成绩表
目标表:t_grade_lookup(学生名、课程名、成绩)
步骤:
源表(成绩表)通过两个Lookup组件将学号转为学生名、课程号转为课程名,最后保存到目标表。
7.Aggregator 组件
作用:
执行分组聚合运算,对数据集进行聚合;
聚合分为:sum、avg、count、max、min
用法:创建好Aggregator 组件后,将需要用的字段从其他转换组件中拖拽到AGG中,
双击AGG,
在端口页中每个端口都有group by选项,
勾上需要分组的列,新增端口,编写聚合表达式,实现分组聚合运算。
命名:AGG_Name
类型:Active/Connected
属性解释:
Cache Directory:缓存的汇总值的目录
Tracing Level:会话日志中的详细信息量
Sorted Input:如果选中,则认为到该转换的输入已经由 GroupBy 端口排序。参与Group By的字段是否已经过排序。
Aggregator Data Cache Size:汇总器缓存中用于存储数据的容量(以字节为单位)。参与聚集汇总的变量和输出数据项的表达式所占内存。
Aggregator Index Cache Size:汇总器索引缓存中用于存储数据的容量(以字节为单位)。参与Group By的字段所占用的内存。
Transformation Scope:定义对输入数据执行转换的范围
7.1 Aggregator 组件项
Group By:用于分组的列
O:输出列
Expression:用于书写汇总函数表达式
7.2 Aggregator 组件函数
sum(待汇总列,IIF(条件,待汇总列,)) 将不符合条件的值默认赋值为Null
IIF(条件,sum(待汇总列)) 将不符合条件的值默认赋值为0
注意:可使用本地变量
例10:从dept、emp表中复制数据到t_emp_10中,
t_emp_10包括下面列(部门编号、部门名、办公地点、员工人数、工资总和)
作业6:
源表:学生表、课程表、成绩表
目标表:t_course_Aggregator(课程号、课程名、老师名、平均分、最高分、最低分、学生数、及格人数、不及格人数)
步骤:
作业7:
描述:计算每个职员工资占部门总工资的百分比。
源表:emp表
目标:t_emp_10_2
要点:先获取部门总工资,再连接,最后计算百分比。
8.Rank组件 等级转换
作用:排序记录,只输出最顶层行或最底层的n个记录
用法:创建好Rank后,将需要用的记录从转换组件拖拽到Rank中,
双击Rank,对Rank的属性进行设置。
在端口页签选择分组列和R列(等级列或排序列),在属性页签设置Top/Bottom属性和Number of Ranks属性。
命名:RANK_Name
类型:Active/Connected
属性解释:
Cache Directory:缓存的等级值的目录
Top/Bottom:选择顶部或底部等级
Number of Ranks:每一等级中的记录数
Case Sensitive String Comparison:字符串比较(区分大小写)
Tracing Level:会话日志中的详细信息量
Rank Data Cache Size:等级缓存中用于存储数据的容量(以字节为单位)
Rank Index Cache Size:等级索引缓存中用于存储数据的容量(以字节为单位)
Transformation Scope:定义对输入数据执行转换的范围
注意:可以使用本地变量
例11:
源表:emp
目标表:T_emp_11
功能:从源表emp中取出每个部门工资前3名的信息到目标表中。
作业8:
源表:学生表、课程表、成绩表
目标表:t_course_rank(课程名、学生名、成绩)
功能:从源表(学生表、课程表、成绩表)中取出每门课程成绩前2名的信息到目标表中。
9.Union组件 数据合并
属性解释:
Language:用于开发此自定义转换的编程语言。
Module Identifier:包含过程的 DLL 或共享库的名称。
Function Identifier:该过程在模块中的名称。
Runtime Location:包含 DLL 或共享库的位置。
Tracing Level:会话日志中的详细信息量
Is Partitionable:如果此转换不能在多个分区运行,则选择“否”。
如果此转换可以在多个分区运行,但那些分区必须在同一个节点上运行,则选择“本地”。
如果每个分区都可以在一个网格的不同节点上运行,则选择“跨整个网格”。
Inputs Must Block:指定与转换关联的过程是否阻止传入数据。
在过程代码不阻止传入数据时,或在它可以选择使用阻止算法或非阻止算法时,可以清除此选项。
Is Active:指定此转换是主动转换还是被动转换。
当启用此选项时,转换可以为每个输入行生成 0、1 或更多个输出行。
否则,它只可以为每个输入行生成 0 或 1 个输出行。
Update Strategy Transformation:指定此转换是否为输出行定义更新策略。
Transformation Scope:指定 Informatica 集成服务如何将转换逻辑应用于传入数据:
应用到“行”、“事务”,还是“所有输入”。对于被动转换,此属性为“行”。
Generate Transaction:指定此转换是否可以生成事务。
Output Is Repeatable:指定输出数据是否排序:“从不”、“基于输入顺序”或“始终”。对于被动转换,该属性为“基于输入顺序”。
Requires Single Thread Per Partition:指定此自定义转换是否要求每个分区一个线程。
如果选中,此自定义转换的每个分区将由且仅由一个线程执行。
Output Is Deterministic:在会话运行期间生成同一组输出数据。
例12:将源表stu_java 和stu_oracle中的数据同步到目标表T_stu中。
源表:stu_java、stu_oracle
create table stu_oracle(
id number(16) primary key,
sname varchar2(20),
birth date
);
create table stu_java(
id number(16) primary key,
sname varchar2(20),
birth date
);
insert into stu_oracle (id,sname,birth) values (1,‘zhangsan‘,sysdate-8000);
insert into stu_java (id,sname,birth) values (2,‘lisi‘,sysdate-7800);
目标表:T_stu
create table t_stu(
id number(16) primary key,
sname varchar2(20),
birth date,
major varchar2(10)
);
作业9:
源1:从emp表找职位是CLERK的人员
源2:从emp表找部门编号是30的人员
目标表:T_emp_Union
功能:因为7900人员同时满足职位是CLERK和部门编号是30,所以会重复找到两次;
给目标表不设主键,验证Union组件不去重功能。
10.Sequence Generator 序列号生成器
作用:产生主键
用法:创建Sequence Generator后,双击SEQ,对SEQ的属性进行设置。
命名:SEQ_Name
类型:Passive/Connected
属性解释:
Start Value:起始值
Increment By:步长,向当前值添加了增量
End Value:最大值
Current Value:当前值
Cycle:循环使用。如已达到最大值,则重置为起始值
Number of Cached Values:每次会话运行生成的值的数量
Reset:每次会话运行都以当前值重新启动该序列
Tracing Level:会话日志中的详细信息量
注意:
Sequence Generator只有两个输出端口,没有输入端口;
如果该SEQ设置为可以重复使用时,不能选择Reset选项。
例13:
源表:emp表、emp文件
目标表:t_emp_13
注意:emp表和emp文件中原来的主键数据是重复的,目标表需要重新设置主键字段,并用Sequence Generator生成主键信息。
作业10:
源表:dept表、dept文件
目标表:T_dept_Union
功能:dept表和dept文件中原来的主键数据是重复的,目标表需要重新设置主键字段,并用Sequence Generator生成主键信息。
11.Stored Procedure
作用:调用一个存储过程
用法:创建Stored Procedure的时候连接数据库选择必要的存储过程。
SP有连接和不连接到数据流两种用法。
连接到数据流方式跟一般的转换组件类似,通过拖拽端口来实现数据流。
不连接到数据流分为表达式调用和Pre-/Post session两种方式。
表达式调用方式中SP被Mapping中另一个转换组件中的表达式调用。
Pre-/Post session方式就是在session的属性中配置SP的运行时间,具体如下:
Source Pre-load :session从源表查询数据之前调用。
Source Post-load :session从源表查询数据之后调用。
Target Pre-load :session将数据插入目标表之前调用。
Target Post-load :session将数据插入目标表之后调用。
命名:SP_Name
类型:Passive/Connected or Unconnected
属性解释:
Stored Procedure Name:存储过程名称
Connection Information:调用源或目标中的过程
Call Text:调用语法,包括参数
Stored Procedure Type:会话期间调用该过程的时间
Execution Order:集成服务调用该过程的顺序
Tracing Level:会话日志中的详细信息量
Subsecond Precision:日期时间输出端口的精度,例如,毫秒对应的值为 3
Output is Repeatable:指定输出数据是否基于输入顺序进行排序。对于被动转换,该属性为“基于输入顺序”。
Output is Deterministic:指定是否为相同的输入提供相同的输出
注意:
例14:从dept、emp表中复制数据到t_emp_14中,
t_emp_14包括下面列(部门编号、部门名、办公地点、员工人数、工资总和)
要求:先编写一个存储过程,再调用过程来实现数据同步
create table t_emp_14
(
deptno number(2) not null primary key,
dname varchar2(14),
loc varchar2(13),
sum_sal number(15,2) ,
e_cnt number(15,2)
);
create or replace procedure proc_dept_all
is
v_sal number(15,2);
v_cnt number(15);
begin
-- for rs in (select * from scott.dept where exists (select 1 from scott.emp where emp.deptno=dept.deptno)) loop
for rs in (select * from scott.dept where deptno in (select deptno from scott.emp)) loop
select count(1) into v_cnt from t_emp_14 where deptno=rs.deptno;
if v_cnt=0 then
insert into t_emp_14 (deptno,dname,loc) values (rs.deptno,rs.dname,rs.loc);
end if;
end loop;
for rs in (select * from t_emp_14) loop
select sum(sal),count(1) into v_sal,v_cnt from scott.emp where deptno=rs.deptno;
update t_emp_14 set sum_sal=v_sal,e_cnt=v_cnt where deptno=rs.deptno;
end loop;
end;
/
show err;
create or replace function func_emp14_sal(p_deptno number) return number
is
v_sal number(15,2);
begin
select sum(sal) into v_sal from scott.emp where deptno=p_deptno;
return v_sal;
end;
/
show err;
create or replace function func_emp14_cnt(p_deptno number) return number
is
v_cnt number(15,2);
begin
select count(1) into v_cnt from scott.emp where deptno=p_deptno;
return v_cnt;
end;
/
show err;
12.Update Strategy 组件
作用:
对流过组件的每一条记录赋一个操作标志(插入、删除、更新、忽略);
根据操作标志对目标关系型数据库表生成sql操作;
操作标志有DD_INSERT、DD_DELETE、DD_UPDATE、DD_REJECT
用法:
创建好Update Strategy后,将需要的字段从转换组件拖拽到US,双击US,对US的属性进行设置。
创建LOOKUP组件选择目标表,根据源表的主键去目标表查询,如果查不到数据,就给目标表新增;
如果查到数据就判断源表和目标表的数据是否相同(比较所有字段),如果相同就放弃,不相同则更新目标表。
操作:
创建LOOKUP组件后会自动加载目标表所有字段(删除不需要用到的字段),
再从SQ组件中拖拽源表主键字段到LOOKUP组件,并设置关联条件;
将SQ组件源表所有字段拖拽到Update Strategy 组件中,
再将LOOKUP组件中目标表所需要用到的字段拖拽到Update Strategy 组件中,并给字段名增加_T(用以表示目标的字段);
设置Update Strategy Expression属性为:
IIF(isnull(EMPNO_T),dd_insert,IIF(EMPNO=EMPNO_T and SAL=SAL_T,dd_reject,dd_update))
将Update Strategy 组件中源表的字段拖拽至目标表。
检查并修改任务属性Treat source rows as=Data Driven。
命名:UPD_Name
类型:Active/Connected
属性解释:
Update Strategy Expression:对记录标记,标记要插入、删除、更新或拒绝的记录的表达式。
Forward Rejected Rows:将被拒绝的行转发到下一转换。记录是在当前丢弃还是到下个组件丢弃。
Tracing Level:会话日志中的详细信息量
应用范围:
数据增量更新;
对目标编辑。
注意:
关键是Update Strategy Expression属性的设置,使用IIF或decode函数对记录的每一行进行判断,
为每一行赋予DD_INSERT、DD_DELETE、DD_UPDATE、DD_REJECT(对应值为0、1、2、3)中的一个值,
表明该行在数据库中将进行的(增、删、改、忽略)某种操作。
mapping中有US时,mapping对应的session在配置属性时必须把Treat rows属性设置为Data Driven,否则US无效。
例15:从emp表中复制数据到目标表t_emp_15中,
然后对emp表进行增、删、改操作,并将增、删、改操作影响的行更新到目标表t_emp_15中。
connect bi_target/bi_target;
create table t_emp_15 as select * from scott.emp;
select * from t_emp_15;
connect scott/123;
insert into emp (empno,ename) values (1112,‘abcd‘);
update scott.emp set sal=20000 where empno=7839;
--delete emp where empno=7900;
--update emp set sal=8000 where empno=7934;
Update Strategy属性设置:
IIF(条件,真,假)
IIF(isnull(EMPNO_T),dd_insert,IIF(EMPNO=EMPNO_T and SAL=SAL_T,dd_reject,dd_update))
IIF(ISNULL(EMPNO_T),DD_INSERT,IIF(EMPNO=EMPNO_T AND SAL=SAL_T,DD_REJECT,DD_UPDATE))
作业11:
源表:dept表
目标表:T_dept_Update
功能:实现对源表dept的新增、修改,同步复制到目标表T_dept_Update的功能。
IIF(isnull(DEPTNO),dd_insert,iif(DEPTNO=DEPTNO1 and DNAME=DNAME1 and LOC=LOC1,dd_reject,dd_update))
例16:从dept_temp表中复制数据到目标表t_dept_16中
create table dept_temp as select * from dept;
alter table dept_temp add action varchar2(10);
alter table dept_temp add action_date date;
alter table dept_temp add constraint pk_dept_temp primary key (deptno);
update dept_temp set action=‘insert‘,action_date=sysdate-20;
第一次抽取:
IIF(ACTION_DATE<TO_DATE(‘20180301‘,‘yyyymmdd‘),DECODE(ACTION,‘update‘,dd_update,‘delete‘,dd_delete,dd_insert),dd_reject)
--10删除
update dept_temp set action=‘delete‘,action_date=sysdate where deptno=10;
--20修改
update dept_temp set dname=‘123‘,action=‘update‘,action_date=sysdate where deptno=20;
--50新增
insert into dept_temp values(50,‘bumen‘,‘loc‘,‘insert‘,sysdate);
后续抽取:
IIF(ACTION_DATE>=TO_DATE(‘20180301‘,‘yyyymmdd‘),DECODE(ACTION,‘update‘,dd_update,‘delete‘,dd_delete,dd_insert),dd_reject)
13.Normalizer组件
作用:格式化记录,将列表转换为行表。
用法:Occurs=要合并的列个数,将GCID_*转换成对应的分类名
命名:NRM_Name
类型:Active/Connected
属性解释:
注意:
例20:
源表:工资表
create table emp_sal
(
empno number(10) not null primary key,
base_sal number(10,2) ,
jixiao_sal number(10,2) ,
gongling_sal number(10,2) ,
quanqin_sal number(10,2)
);
insert into emp_sal values (111,2000,1800,100,300);
insert into emp_sal values (112,5000,0,500,300);
目标表:收入表
create table t_emp_20
(
empno number(10) not null primary key,
income_type varchar2(20) ,
sal_amount number(10,2)
);
14.Transaction Control组件
作用:控制事务的提交或回退。
Transaction Control组件是一个事务产生器,它在Mapping中定义或者重新定义事务的边界。
Transaction Control组件同时清除了任何来自上游的事务。
用法:双击Transaction Control组件,在属性页签设置Transaction Control Condition的值,来控制事务的提交或回退。
TC_CONTINUE_TRANSACTION 不进行任何事物变更
TC_COMMIT_BEFORE 提交当前事务,开启新事物,当前行进入新事物
TC_COMMIT_AFTER 提交当前事务,开启新事物,当前行留在本事物
TC_ROLLBACK_BEFORE 回退当前事务,开启新事物,当前行进入新事物
TC_ROLLBACK_AFTER 回退当前事务,开启新事物,当前行留在本事物
命名:TC_Name
类型:Active/Connected
属性解释:
Transaction Control Condition:事务控制表达式
Tracing Level:会话日志中的详细信息量
注意:
例21:使用mapping动态分发文件
以Dept为例,按照LOC列将对应的数据写入不同的文件中。
源--》SQ--》Sorter--》f(x)--》TX--》目标
目标中增加FileName列;
Sorter中对LOC列进行排序;
f(x)中定义本地变量:
LAST_VALUE 上次取值 表达式赋值为CURRENT_VALUE
CURRENT_VALUE 本次取值 表达式赋值为LOC
f(x)中定义输出端口:
var_control 是否是同一个部门标识 表达式赋值为IIF(LAST_VALUE=CURRENT_VALUE,1,0)
FileName 文件名 表达式赋值为LOC.dat
TX中使用事务控制表达式:IIF(var_control=1,TC_CONTINUE_TRANSCATION,TC_COMMIT_BEFORE)
15.SQL Transformation组件
作用:使用mapping来执行SQL.
脚本模式:Script mode
查询模式:query mode,又分为静态查询和动态查询
用法:
原为文件,
拖入SQL Transformation组件,选择静态查询,
查询sql:select
注意:
?参数?
~动态变量~
1.6 JAVA Transformation
作用:使用Java代码来处理informatica不能完成的工作。
使用Java来自定义转换组件。
17.Custom Transformation
作用:除了info提供的转换组件外,用户可以使用Custom Transformation开发自己的特有的转换组件。
使用C/C++来自定义组件。
18.Http Transformation
作用:从HTTP server获取数据;更新HTTP server上的数据。
19.XML Source Qualifier组件
作用:根据查询SQL从XML文件中查出所要的记录
用法:
命名:XSQ_Name
类型:Passive/Connected
属性解释:
注意:
20.ERP Source Qualifier组件
作用:根据查询SQL从ERP文件中查出所要的记录
用法:
命名:ESQ_Name
类型:Active/Connected
属性解释:
注意:
原文:https://www.cnblogs.com/BradMiller/p/9279995.html