表1中列出的是informatica中的所有组件。不会在本文档中出现的会在组件名后标出。
表1
Aggregator |
Active/ Connected |
Performs aggregate calculations. |
Application Source Qualifier |
Active/ Connected |
Represents the rows that the Integration Service reads from an application, such as an ERP source, when it runs a session. |
Custom |
Active or Passive/ Connected |
Calls a procedure in a shared library or DLL. |
Expression |
Passive/ Connected |
Calculates a value. |
External Procedure |
Passive/ Connected or Unconnected |
Calls a procedure in a shared library or in the COM layer of Windows. |
Filter |
Active/ Connected |
Filters data. |
HTTP Transformation |
Passive/Connected |
Connects to an HTTP server to read or update data. |
Input |
Passive/ Connected |
Defines mapplet input rows. Available in the Mapplet Designer. |
Java |
Active or Passive/ Connected |
Executes user logic coded in Java. The byte code for the user logic is stored in the repository. |
Joiner |
Active/ Connected |
Joins data from different databases or flat file systems. |
Lookup |
Passive/ Connected or Unconnected |
Looks up values. |
Normalizer |
Active/ Connected |
Source qualifier for COBOL sources. Can also use in the pipeline to normalize data from relational or flat file sources. |
Output |
Passive/ Connected |
Defines mapplet output rows. Available in the Mapplet Designer. |
Rank |
Active/ Connected |
Limits records to a top or bottom range. |
Router |
Active/ Connected |
Routes data into multiple transformations based on group conditions. |
Sequence Generator |
Passive/ Connected |
Generates primary keys. |
Sorter |
Active/Connected |
Sorts data based on a sort key. |
Source Qualifier |
Active/ Connected |
Represents the rows that the Integration Service reads from a relational or flat file source when it runs a session. |
SQL |
Active or Passive/Connected |
Executes SQL queries against a database. |
Stored Procedure |
Passive/ Connected or Unconnected |
Calls a stored procedure. |
Transaction Control |
Active/ Connected |
Defines commit and rollback transactions. |
Union |
Active/Connected |
Merges data from different databases or flat file systems. |
Update Strategy |
Active/ Connected |
Determines whether to insert, delete, update, or reject rows. |
XML Generator |
Active/ Connected |
Reads data from one or more input ports and outputs XML through a single output port. |
XML Parser |
Active/ Connected |
Reads XML from one input port and outputs data to one or more output ports. |
XML Source Qualifier |
Active/ Connected |
Represents the rows that the Integration Service reads from an XML source when it runs a session. |
获得一个关联的值。例如:源里包含employee ID,但你还需要employee name。
用于计算的植。例如:只是汇率或者个人所得税之类的固定数值,不是计算得出来的数据。
Update slowly changing dimension tables。主要是根据条件查出原表,若查出了,就把自己添加的标志位设为真,否则就设置为假。
Connected 和 unconnected 的transformations的输入和输出是不同的,不同点如表2列出的。
表2
Connected Lookup |
Unconnected Lookup |
从 pipeline获得输入。 |
从另一个transformation的:LKP的表达式获得输入。 |
使用静态或者动态cache。 |
使用静态cache。 |
Cache中包括所有的 mapping中使用到的lookup columns(就是condition中的和被标记为输出的columns)。 |
Cache中包括所有condition中的、被标记为输出的columns以及被标记为return port的。 |
同行能够返回多个columns 或者加载到动态lookup cache中。 |
每行只能返回一个return port (R)。 |
如果没有匹配的数据,Integration Service会返回一个默认值。如果是动态缓存(cache),会加入一个新的行或者放着他不管。 |
如果没有匹配的数据,Integration Service会返回一个NULL。 |
如果有匹配的数据,Integration Service回返回一个结果包括所有被设置为输出的值。如果是动态缓存,Integration Service会任意的修改一行或者放着它不管。 |
如果有匹配的数据,Integration Service会返回一个被设置为return port的值。 |
输出所有的被标记为output的符合条件的数据。 |
返回一个值到使用:LKP调用它的表达式。 |
用户可以设置默认值。 |
用户不可以设置默认值。 |
下面是Integration Service处理connected Lookup transformation的过程:
1. 一个connected Lookup transformation通过pipeline从其他的transformation获得输入值。
2. 为每个输入行,Integration Service会通过lookup ports 和 condition从源或者缓存中查询。
3. 如果组件没有使用缓存或者使用的静态缓存,Integration Service会使用lookup query来返回值。
4. 如果组件使用的动态缓存,当Integration Service在缓存找不到这行,它会把这行插入到缓存中。当Integration Service找到这行,它会修改这行在缓存中或者什么都不做。它标记这行是插入、修改或者是不做变动。
5. Integration Service从查询中返回值到下一个transformation。
如果transformation使用动态缓存,你可以把这行通过Filter 或者 Router transformation来过滤后在到目标中。
l 你可以在一个mapping中调用这个Lookup transformation多次。
l 下面的步骤描述了Integration Service处理一个unconnected Lookup transformation的过程:
1. 一个unconnected Lookup transformation从另一个transformation的一个:LKP表达式的结果中获得输入值,例如一个Update Strategy transformation。
2. Integration Service通过transformation 中的lookup ports 和 condition来查询。
3. Integration Service返回一个值到Lookup transformation 的return port 中。
4. Integration Service把值返回到:LKP表达式中。
l 步骤
1. 添加input ports。
2. 添加查询条件。
3. 指定返回值。
4. 从其他的组件中调用该lookup。
l 用途
unconnected lookups多数用于:
1. 在一个表达式测试一个lookup的值。
2. 在查询的基础上过滤。
3. 标记行基于查询的结果,例如:updating slowly changing dimension tables。
4. 调用同一个查找多次在一个mapping中。
当你在建立一个Lookup transformation时,你可以选择查询flat file或者relational table。
你可以通过SQL的来override默认的SQL,这样可以你可以加where或者查询多个表。
使用下面选项在使用flat file时:
1. 指定源是indirect files的。
2. 使用sorted输入。
l 使用这些技巧在你配置一个Lookup transformation的时候:
l 给被用于查询条件的列加一个索引。
l 把=号放在条件的第一位。
l 查询的时候,完全加载小的表。
l 在数据库中Join tables比使用查询要高校的多。
l 为静态cache设置固定的大小。
l 使用:LKP来调用unconnected Lookup transformations。
有时,你可以在使用lookup组件查询表的时候,把组件设置成Cached 的来提高session的速度。如果你选择了Cached ,你可以选择使用动态的还是静态的。默认的是使用静态的。
我们可以在一个lookup组件中为要查询的表配置cache。当第一行数据进入lookup组件的时候,Integration Service会在内存为它建立一个cache。它分配内存基于你在组件或者session的属性中配置的数量。Integration Service把条件值保存索引cache,把output值保存在数据cache。Integration Service会为每一条进入这个组件的行查询cache。
Integration Service也同样会建立cache files用$PMCacheDir(相对路径,在consol中可以配置)中默认的。如果数据不适合内存cache时,Integration Service把超出的数据保存到cache files中。当seesion结束,Integration Service会释放cache记忆和删除cache files,除非你配置组件使用持久化的cache。
如果你使用flat file lookup,Integration Service总是会把它放在cache中。如果你配置flat file lookup为sorted input,Integration Service不会把它放入cache,如果条件类不是分组的。如果这些列是分组的,但是没有sorted,Integration Service会处理这个查询的方式和没有配置sorted input一样。
当你配置了lookup cache,你可以配置如下cache选项:
Building caches:你可以配置session建立多个cache用串行或者并行。当你建立串行的cache时,Integration Service会按照源行进入的顺序建立cache。当你建立并行的cache时,Integration Service不会等第一行进入Lookup transformation,就会建立cache。代替的是建立多个并行的cache。
Persistent cache:你可以保存lookup cache files并重用他们在Integration Service调用一个配置使用该cache的Lookup transformation。
Integration Service 对Persistent Caches的处理:
Mapping or Session Changes Between Sessions |
Named Cache |
Unnamed Cache |
Integration Service cannot locate cache files. |
Rebuilds cache. |
Rebuilds cache. |
Enable or disable the Enable High Precision option in session properties. |
Fails session. |
Rebuilds cache. |
Edit the transformation in the Mapping Designer, Mapplet Designer, or Reusable Transformation Developer.* |
Fails session. |
Rebuilds cache. |
Edit the mapping (excluding Lookup transformation). |
Reuses cache. |
Rebuilds cache. |
Change database connection or the file location used to access the lookup table. |
Fails session. |
Rebuilds cache. |
Change the Integration Service data movement mode. |
Fails session. |
Rebuilds cache. |
Change the sort order in Unicode mode. |
Fails session. |
Rebuilds cache. |
Change the Integration Service code page to a compatible code page. |
Reuses cache. |
Reuses cache. |
Change the Integration Service code page to an incompatible code page. |
Fails session. |
Rebuilds cache. |
*Editing properties such as transformation description or port description does not affect persistent cache handling. |
Recache from source:当持久化的cache不是同步的时候,你可以配置Lookup transformation重新建立新的cache。
Static cache:你可以为所有的lookup source配置一个静态,或者只读的cache。默认的,Integration Service建立静态的cache。它为所有进入组件的lookup file或者 table 以及 looks up values建立cache。当条件为真的时候,Integration Service从cache中返回一个值。
Dynamic cache:为一个target table或者flat file source建立cache,并且向cache中插入新的行或者修改现有的行,当使用动态cache。在cache中,Integration Service动态的插入或者修改数据并且把数据传到目标中。
Shared cache:你可以共享cache在多个组件之间。你可以共享一个匿名的cache在一张mapping中。你可以共享一个有名的cache在同一个或者不同的mapping中。
当你没有为Lookup transformation配置cache,Integration Service为每一个输入行查询查询表。结果和处理过程是同样的,不论你是否设置cache。然而,使用cache可以改善session的性能。当被查询的表很大的时候可以使用cache最大的优化性能。
Cache Comparison
uncached lookup, static cache, dynamic cache的区别:
Uncached |
Static Cache |
Dynamic Cache |
你不可以向cache中插入或者修改。 |
你不可以向cache中插入或者修改。 |
你可以向cache中插入或者修改,并且可以向目标传输。 |
不可以进行flat file的查询。 |
可以进行relational 或者 flat file的查询。 |
可以进行relational 或者 flat file的查询。 |
当条件为真的时候,Integration Service从表或者cache中返回一个值。 当条件为假的时候,Integration Service返回一个默认值或者为非连接组件返回NULL。 |
当条件为真的时候,Integration Service从表或者cache中返回一个值。 当条件为假的时候,Integration Service返回一个默认值或者为非连接组件返回NULL。 |
当条件为真的时候,Integration Service会根据行的类型来修改或者放着它不管。你可以向目标传输修改后的行。 当条件为假的时候,the Integration Service会根据行的类型来插入或者放着它不管。这意味着行不在cache或目标中。你可以把插入的行传给目标表。 |
Transformation type: Active 、Connected
功能概述:
可以使用该组件可以进行汇总计算,如平均值和求和等。Aggregator transformation和Expression transformation不一样,在Aggregator transformation中执行计算是要分组的。Expression transformation只允许你执行计算在row-by-row的基础上的。
当你使用transformation建立汇总表达式的时候,使用条件语句来过滤行,比SQL语句要灵活的多。
Integration Service执行汇总计算,只读和储存必要的数据组和行数据在aggregate cache中的。
Ports in the Aggregator Transformation (Aggregator Transformation中的port)
配置Aggregator Transformation中的port,完成如下的任务:
输入表达式在任何output port,使用条件或者非汇总函数在该port中。
建立多行汇总的output port。
配置任何input, input/output, output, 或者variable port作为group port。
改进性能,为后来的组件只连接必要的input/output port,减少数据cache的大小。
使用变量port作为本地变量。
建立一个连接像一个表达式一样。
Components of the Aggregator Transformation(汇总组件的组成)
汇总组件是一个active的组件,改变pipeline中的行数。汇总组件拥有下面的构成和选项:
汇总表达式(Aggregate expression):在一个output port中输入。可以包括非汇总表达式和条件子句。
汇总函数(Aggregate Functions)
你可以把一个汇总函数嵌套在另一个汇总函数中。
Transformation语言包括如下的汇总函数:
l AVG
l COUNT
l FIRST
l LAST
l MAX
l MEDIAN
l MIN
l PERCENTILE
l STDDEV
l SUM
l VARIANCE
当你使用这些函数的时候,你必须在一个汇总组件的表达式中。
嵌套汇总函数(Nested Aggregate Functions):
你可以在一个汇总组件中的不同的output port中包括多个单层的函数(相对于嵌套函数)和嵌套的函数。但是你不能把他们放到一个汇总组件中。因此,如果一个汇总组件中的任何一个output port中包括一个单层函数,你不可以使用一个嵌套的函数在任何其他的port中在这个汇总组件中。当你在一个汇总组件中同时包括单层函数和嵌套函数,Designer会标记mapping或者mapplet为不正确的。如果你需要同时建立单层函数和嵌套函数,请建立在不同的汇总组件中。
条件子句(Conditional Clauses):
使用条件子句在汇总组件中,为了减少用在汇总的行数。条件子句可以是任何可以返回真或假的子句。
例如:你使用如下的表达式来计算出所有commissions大于QUOTA的员工总的commissions:
SUM( COMMISSION, COMMISSION > QUOTA )
非汇总函数(Non-Aggregate Functions)
你也可以使用非汇总函数在汇总表达式中。例如下面的表达式:
IIF( MAX( QUANTITY ) > 0, MAX( QUANTITY ), 0))
汇总函数中的Null值(Null Values in Aggregate Functions)
当你配置Integration Service时,你可以选择怎样处理NULL值在一个汇总函数中。你可以选择处理汇总函数中的NULL值,当作NULL或者零。默认的Integration Service处理在汇总函数的NULL值为NULL。
分组port(Group by port):指定如何建立组。这个port可以是任何类型的port,如:input, input/output, output, 或者 variable port。当数据分组后,汇总组件返回每组中最后一行,如果没有其他的指定。
汇总组件让你定义组汇总,性能比汇总所有输入的值好。例如:你查一个区域的总销售额比查询整个公司的要快。
为汇总表达式定义一个组,选择适当的input, input/output, output, 和 variable ports在汇总组件中。你可以选择多个port来建立一个新的唯一的联合的组。Integration Service会为定义的每个组进行汇总。
当你把数据分组了,Integration Service会为每一个组返回一个值。如果你没有,Integration Service会为所有输入的port输出一行。
当你在汇总组件中使用port分成多个组的时候,Integration Service使用port的序号来决定按照哪个组的顺序。例如:例如使用ITEM_ID 和 QUANTITY分组与使用QUANTITY 和 ITEM_ID是不同的。下面的汇总组件用STORE_ID 和 ITEM分组:
如果你使用如下的数据:
STORE_ID |
ITEM |
QTY |
PRICE |
101 |
'battery' |
3 |
2.99 |
101 |
'battery' |
1 |
3.19 |
101 |
'battery' |
2 |
2.59 |
101 |
'AAA' |
2 |
2.45 |
201 |
'battery' |
1 |
1.99 |
201 |
'battery' |
4 |
1.59 |
301 |
'battery' |
1 |
2.45 |
Integration Service 会执行如下的分组来执行汇总计算。
STORE_ID |
ITEM |
101 |
'battery' |
101 |
'AAA' |
201 |
'battery' |
301 |
'battery' |
Integration Service会让每组最后一行返回,按照上面的汇总结果,可以得到如下:
STORE_ID |
ITEM |
QTY |
PRICE |
SALES_PER_STORE |
101 |
'battery' |
2 |
2.59 |
17.34 |
101 |
'AAA' |
2 |
2.45 |
4.90 |
201 |
'battery' |
4 |
1.59 |
8.35 |
301 |
'battery' |
1 |
2.45 |
2.45 |
默认值(Default Values):
使用默认值来代替分组中的null。中央Integration Service允许包括null的输入的汇总。
例如:如果你定义一个默认值为‘Misc’在物品列,Integration Service会把null用Misc代替。
排序后的输入(Sorted input):使用该种方法可以改善session的性能。使用Sorted input,你必须使数据通过组件的排序和分组的port相应,用升序或者降序。
条件(Conditions)
不要使用排序后的输入,如果以下两种情况任意一个为真:
汇总表达式中使用嵌套函数。
Session使用incremental汇总。
预先排序的数据(Pre-Sorting Data)
数据必须按照如下来排序:
在汇总分类使用的port,输入的数据要与它的顺序一致。
在session的配置中使用同一个顺序。如果数据不是严格按照session的排序的升序或者降序,Integration Service让这个session失败。例如:当你用French排序命令配置session,汇总组件也要用French排序命令。
对于关系和文件源,使用Sorter transformation排序在汇总组件之前。你可以放置这个Sorter transformation到任何地方,只要在连接到汇总组件之前没有其他组件改变他的排列顺序。汇总组件中的分组用的port的顺序必须要和Sorter transformation中出现的顺序一致。
如果session使用关系数据库作为源,你也可以使用Source Qualifier transformation的Number of Sorted Ports来进行排序。
例:使用ITEM_NAME来进行排序,
Sorter transformation排序后的结果如下:
ITEM_NAME |
QTY |
PRICE |
Soup |
4 |
2.95 |
Soup |
1 |
2.95 |
Soup |
2 |
3.25 |
Cereal |
1 |
4.49 |
Cereal |
2 |
5.25 |
汇总组件返回如下值:
ITEM_NAME |
QTY |
PRICE |
INCOME_PER_ITEM |
Cereal |
2 |
5.25 |
14.99 |
Soup |
2 |
3.25 |
21.25 |
汇总cache(Aggregate cache):Integration Service会把数据保存在汇总cache中直到汇总计算结束。它把组的值保存在索引cache中、把行数据保存在数据cache中。如果汇总的数据太大,cache中装不下,Integration Service保存多出的数据到cache files。你可以配置索引和数据cache在汇总组件中或者在session的属性中。或者你也可以在Integration Service决定cache大小在运行的时候。注意:在使用的数据是排序后的,Integration Service不使用cache的。
提示(Tips )
使用下列的方法来优化汇总组件的性能。
使用排序后的输入来减少汇总cache的使用。
限制input/output或者output ports的连接数量。
在汇总之前过滤。
汇总组件问题解决(Troubleshooting Aggregator Transformations)
我使用排序后的输入,但是workflow使用的时间和以前一样。
你可能使用排序后的输入,以以下任意一种方式:
汇总表达式包括嵌套汇总函数。
Session使用增量汇总。
源数据是data driven。
一个session使用一个汇总组件造成性能低下。
workflow 期间,Integration Service可能过多的把内存分页拿到硬盘上。你可以使用提高transformation属性中的索引cache和数据cache的大小来提高session的性能。
我输入了一个覆盖的cache路径在汇总组件中,但是Integration Service保存session incremental aggregation files到其他某处。
你可以覆盖transformation cache directory在一个session级别。Integration Service会记录cache directory在session log中。你也可以检查session属性为一个cache directory。
Transformation type: Passive 、Connected
使用Expression transformation在一行中计算值,在你写入目标之前。例如,你需要校准员工的工资,连接first和last名字,或者把string转换为number。使用Expression transformation执行任何非汇总的计算。你也可以使用Expression transformation来测试条件语句在你输出结果到目标表或者其他transformations。
计算值:
使用Expression transformation为一行计算,你必须包括以下ports:
被使用在计算的port必须是Input 或者 input/output ports。例如:当为一个定单计算总价格时,等于被订的物品数量乘单价,这个port是input 或者input/output的。一个port是供给给单价的,另一个是供给给订的数量的。
Output port是给表达式的。你为output port输入表达式像配置一个选项一样。返回值需要和表达式的返回值式匹配的。如果想获得更多关于表达式的信息,请查看下节Working with Expressions。
加入多个计算:
在一个Expression transformation中,你可以输入多个表达式。只要为每一个output port输入一个表达式,你可以创建任意多的output port在这个transformation中。用这种方法,比分开建立多个transformations要好。
例如:你可能想从员工薪水中计算一些种类的代扣税,如:本地和联邦的个人所得税,社保和医保。所有的这些计算都需要员工的工资,税种,和/或者相应的税率,你可以建立一个Expression transformation,把工资和税种作为input/output ports,并且建立output port为每个需要的计算。
Working with Expressions (使用表达式)
你可以在一些transformations中使用表达式编辑器来输入表达式。建立表达式可以使用如下的函数:
Transformation language functions。类SQL 函数被设计用来操作普通的表达式。
用户自定义函数是你在PowerCenter中使用transformation language functions建立的。
订制函数是你使用订制函数API建立的。
Using the Expression Editor (使用表达式编辑器)
使用表达式编辑器来建立一个类SQL的语句。虽然你可以用手来建立表达式,但是你应该使用point-and-click方法来建立。选择函数,port,变量,和操作符从point-and-click界面,来减低你建立表达式时的错误率。
Entering Port Names into an Expression (输入一个port名到表达式)
对于一个连接的transformations,如果你使用port名在一个表达式里,Designer会修改表达式,当你在该transformation中修改该port名时。例如:你写了一个有效的表达式用来判断两个日期的不同,Date_Promised 和Date_Delivered。后来,你把Date_Promised port的名字改为Due_Date,Designer也会把表达式中的名字改为Due_Date。
Adding Comments (加注释)
你可以为一个表达式添加注释,来给这个表达式添加描述信息,或者指定一个URL到一个业务文档关于这个表达式的。
你使用以下任意一种方法来加注释:
l 在表达式中使用--或者//来添加注释。
l 单击Comments按钮,在注释对话框中添加。
Validating Expressions (验证表达式)
使用Validate按钮来验证表达式。如果你不验证一个表达式,Designer会在你关闭它的时候来验证。如果表达式不合法的,Designer会发出警告。你可以保存错误的表达式或者改正它。你不能运行一个有错误表达式的mapping在session中。
Expression Editor Display (表达式编辑器的显示)
表达式编辑器可以使用不同的颜色来标记表达式的语法,以便很好的阅读。如果你有最新的Rich Edit,riched20.dll,安装到了系统,表达式显示表达式函数为兰色,注释式灰色,引用的字符串式绿色。
你可以调整编辑器的大小。用拖拽边的方法来扩大对话框。Designer保存这个新的大小像客户机设置一样。
Adding Expressions to an Output Port (添加一个表达式到Output Port)
完成下列步骤来添加一个表达式到一个output port。
1. 在transformation中,选择port并打开表达式编辑器。
2. 输入表达式。
3. 添加注释。
4. 验证表达式。
Filter Transformation Overview
Transformation type: Active 、Connected
功能:根据条件过滤到不符合条件的行。
你可以使用SALARY > 30000来过滤掉SALARY小于等于3000的行。
过滤条件:过滤条件就是可以返回真或假的表达式。可以是一表达式,也可以是几个表达式,但表达式之间是与关系。如果你在条件中输入的是SALARY > 30000 和 SALARY < 100000,他们就等于SALARY > 30000 AND SALARY < 100000。
提示:
在mapping中,使用Filter transformation越早越好。
尽量使用Source Qualifier transformation来过滤数据。
Active 、Connected
你可以使用本组件连接两个不同源的关系表或者file系统。当然你也可以连接来自同一个源的数据(一般使用Source Qualifier Transformation,在下面会介绍使用本组件连接来自同一个源的数据的情况)。本组件一次只能连接两个源,如果有多个源就使用多个该种组件,直到你把所有你想连接的源都连接了为止。影响连接结果的有,连接的条件,连接的类型和输入的源。
图1显示的是一张mapping 的一个 Joiner transformation的master 和 detail pipelines。
图1
l input pipeline中包括Update Strategy transformation情况下,你不能使用本组件。
l 你不能直接把Sequence Generator transformation连接到本组件。
如果你想让Joiner Transformation工作,你需要以下步骤:
1. 配置组件属性。
2. 配置连接条件。
3. 配置连接条件。
4. 配置session为sorted 或者 unsorted input。
5. 配置transaction scope。
图2显示的是Joiner Transformation 的Properties Tab:
图2
表1是Joiner Transformation 的所有属性(Properties):
表1
Option |
Description |
Case-Sensitive String Comparison |
区分大小写。如果选中,Integration Service在执行连接操作的时候对string列会区分大小写。 |
Cache Directory |
指定路径作为master 或者 detail rows以及他们的索引行的cache。默认的,cache files都会建立在$PMCacheDir中保存的目录里。如果你覆盖这个路径请确认这个路径是存在的,并且有足够的硬盘空间来供给给cache files。这个目录可以是个映射或者本地的逻辑分区。(The directory can be a mapped or mounted drive.) |
Join Type |
指定连接类型: Normal, Master Outer, Detail Outer, 或者 Full Outer。 |
Null Ordering in Master |
Not applicable for this transformation type. |
Null Ordering in Detail |
Not applicable for this transformation type. |
Tracing Level |
Session log会记录该组件运行记录的详细程度。选项有: Terse, Normal, Verbose Data, 和 Verbose Initialization.。 |
Joiner Data Cache Size |
组件的数据cache大小。默认为2,000,000 bytes。如果配置的cache大小大于等于2 GB,你必须执行该session在64位机上。你可以配置一个确定的数字,或者由Integration Service在运行时决定大小。如果你设置为Integration Service决定,你也可以设置一个Integration Service可以分配的最大值。 |
Joiner Index Cache Size |
组件的索引cache大小。默认为1,000,000 bytes。如果配置的cache大小大于等于2 GB,你必须执行该session在64位机上。你可以配置一个确定的数字,或者由Integration Service在运行时决定大小。如果你设置为Integration Service决定,你也可以设置一个Integration Service可以分配的最大值。 |
Sorted Input |
指定输入的数据是排序后的。使用排序后的输入可以提高性能。 |
Transformation Scope |
指定Integration Service使用的对数据数据的转换逻辑。你可以选择Transaction, All Input, 或者Row。 |
在session运行中,Integration Service会使用master源的每一行来和detail源进行比较。为了达到最佳性能,对于无序的输入源,使用行数最少的作为master;对于有序的,使用duplicate key values最少的为master。默认的,Integration Service会把第一个被引入该组件的pipeline设置为detail。你可以在Ports tab 中的ports中的M column来更改。
你可以基于来自于两个输入源的port建立一个或者多个条件。例如:有两个输入源表EMPLOYEE_AGE和EMPLOYEE_POSITION,它们都包含一个字段employee ID是number型的,你就可以建立如下的连接条件:EMP_ID1 = EMP_ID2
Joiner transformation和SQL 的join很像,只是它的数据可以来自于不同类型的源。
下面介绍组件提供的几种连接类型:
Normal Join:
Integration Service会去掉所有master 和 detail中不符合条件的数据。
例如:你有两个源叫PARTS_SIZE 和 PARTS_COLOR,并且有如下的数据:
PARTS_SIZE (master source)
PART_ID1 |
DESCRIPTION |
SIZE |
1 |
Seat Cover |
Large |
2 |
Ash Tray |
Small |
3 |
Floor Mat |
Medium |
PARTS_COLOR (detail source)
PART_ID2 |
DESCRIPTION |
COLOR |
1 |
Seat Cover |
Blue |
3 |
Floor Mat |
Black |
4 |
Fuzzy Dice |
Yellow |
连接条件如下:
PART_ID1 = PART_ID2
结果如下:
PART_ID |
DESCRIPTION |
SIZE |
COLOR |
1 |
Seat Cover |
Large |
Blue |
3 |
Floor Mat |
Medium |
Black |
下面是等价的语句:
SELECT * FROM PARTS_SIZE, PARTS_COLOR WHERE PARTS_SIZE.PART_ID1 = PARTS_COLOR.PART_ID2
Master Outer Join
保留所有detail的行,并且和master进行匹配。它抛弃不匹配的master行。
以和上面同样的条件会得到如下的结果:
PART_ID |
DESCRIPTION |
SIZE |
COLOR |
1 |
Seat Cover |
Large |
Blue |
3 |
Floor Mat |
Medium |
Black |
4 |
Fuzzy Dice |
NULL |
Yellow |
因为没有size指定给Fuzzy Dice,Integration Service会自动补上一个NULL。
下面是和本例等价的SQL语句:
SELECT * FROM PARTS_SIZE RIGHT OUTER JOIN PARTS_COLOR ON (PARTS_SIZE.PART_ID1 = PARTS_COLOR.PART_ID2)
Detail Outer Join
保留所有master的行,并且和detail进行匹配。它抛弃不匹配的detail行。
以和上面同样的条件会得到如下的结果:
PART_ID |
DESCRIPTION |
SIZE |
COLOR |
1 |
Seat Cover |
Large |
Blue |
2 |
Ash Tray |
Small |
NULL |
3 |
Floor Mat |
Medium |
Black |
因为没有color指定给Ash Tray,Integration Service会自动补上一个NULL。
下面是和本例等价的SQL语句:
SELECT * FROM PARTS_SIZE LEFT OUTER JOIN PARTS_COLOR ON (PARTS_COLOR.PART_ID2 = PARTS_SIZE.PART_ID1)
Full Outer Join
保留所有从来自master 和detail的数据。
以和上面同样的条件会得到如下的结果:
PART_ID |
DESCRIPTION |
SIZE |
Color |
1 |
Seat Cover |
Large |
Blue |
2 |
Ash Tray |
Small |
NULL |
3 |
Floor Mat |
Medium |
Black |
4 |
Fuzzy Dice |
NULL |
Yellow |
和前两个一样,Integration Service会为没有匹配值的列补上NULL。
下面是和本例等价的SQL语句:
SELECT * FROM PARTS_SIZE FULL OUTER JOIN PARTS_COLOR ON (PARTS_SIZE.PART_ID1 = PARTS_COLOR.PART_ID2)
1、连接来自于一个Pipeline的两个分支
2、连接来自同一个源的两个实例
3、指导方针
使用如下方针来确定是否使用连接来自于一个Pipeline的两个分支,或者连接来自同一个源的两个实例:
l 连接来自于一个Pipeline的两个分支,当你的源很大或者你只能读源一次的时候。例如:你只能读从一个消息序列来的源一次。
l 连接来自于一个Pipeline的两个分支,当你使用排序后的数据。
l 连接来自同一个源的两个实例,当你在一个pipeline中使用一个blocking transformation在源和Joiner transformation之间。
l 连接来自同一个源的两个实例,当使用一个比较慢的时候。
l 连接来自同一个源的两个实例,当你需要连接未排序的数据。
1、Unsorted Joiner Transformation:
Integration Service在执行unsorted Joiner transformation时,它会首先读所有的master,然后在读detail的行。在它确认读完所有的master行到cache之前,它阻塞detail。一旦它读完,它不在阻塞detail。
2、Sorted Joiner Transformation
当Integration Service执行一个sorted Joiner transformation时候,它基于mapping的配置阻塞数据。阻塞逻辑可能发生在master 和 detail来自不同的源。
3、Caching Master Rows
当Integration Service执行Joiner transformation,它并发的读取源,并且基于master建立索引和数据cache。然后Integration Service执行Joiner transformation基于detail数据和cache的数据。
1、 如果可能在数据库中做连接。
2、 尽量使用排序后的数据来做连接。
3、 对于unsorted Joiner transformation,指定行数少的作为master。
4、 对于sorted Joiner transformation,使用duplicate key values最少的为master。
Transformation type: Active 、Connected
功能:和filter组件基本一样,都是过滤到不符合条件的行,只不过是filter只有一组条件,而router有一个或者多组条件。就像图1显示的,两个mapping完成的是同一个功能。
图1
一个router包括输入和输出组,输入和输出port,组过滤条件和Designer中可以修改的属性。图2是一个router的例子:
图2
Router transformation的组:
包括以下两种:
输入组:
Designer复制输入组的输入port的主要特性,为每个输出组建立输出port。
输出组:
有两种输出组:
用户自定义的组:
一个用户自定义的组由输出port和一个组过滤条件组成。你在Designer 的Groups tab 建立和删除用户自定义组。你可以为每个你想指定的条件建立一个用户自定义组。
Integration Service为输入的每行数据进行条件判断。它会在把该数据送到默认组之前进行所有所有条件对它判断。Integration Service决定判断的顺序,基于条件连接的输出组的顺序。如果一行数据符合多个条件,Integration Service会把它复制成多分(当然不算默认组,因为它是没有条件的)。
默认的组:
在你建立一个新的用户自定义输出组以后,Designer建立默认组。Designer不允许你编辑或者删除默认组。这个组没有组过滤条件。如果所有的组条件都为假的时候,Integration Service把行放到默认组。如果你想让Integration Service抛弃所有在默认组中的行,不把它和组件或者mapping目标连接就可以了。
Designer会在你删除最后一个用户自定义的组之后,删除默认组。
使用组的过滤条件:
你可以检查数据基于一个或者多个组过滤条件。你可以在Groups tab 的Expression Editor建立组条件。你可以使用任何一个返回一个值的表达式。你也可以给条件指定一个常量。一个组过滤条件会为通过组件的所有的行返回一个真或者假。0等价于假,任何非零值都等价于真。Integration Service会把判断值为真的行数据放到和每个用户自定义的组关联的组件或者目标。
如何添加一个组:
1. 在Router中建立一个组就像在其他的组件中建立一个port。步骤如下:
2. 点击Groups tab。
3. 点击Add button。
4. 在Group Name section中输入组的名字。
5. 点击组过滤条件区域,并打开表达式编辑器。
6. 输入组过滤条件。
7. 点击Validate检查条件的语法是否正确。
8. 点击OK。
Port:
Router transformation有输入和输出port。输入port在输入组,输出port在输出组。你可以建立输入port,从别组件里复制过来,或者用手建立。
图3显示的是Router transformation的Ports tab:
图3
Designer建立输出port,使用从输入port复制的如下属性:
Port name
Datatype
Precision
Scale
Default value
当你修改输入port之后,输出port也会跟着改变。输出port的名字是在输入port的基础上加上数字来形成的。
在一个mapping中连接一个Router Transformations :
当你在一张mapping中连接一个组件到Router transformation,应该考虑如下的规则:
l 你可以一个组连接一个组件或者目标。
你可以把一个输出port连接多个组件或者目标。
你可以把一个输出的多个输出port连接多个组件或者目标。
你可以把多个组连接到一个多输入的组件,例如:Joiner transformations。
Sorter Transformation 概述
Transformation类型: Active 、Connected
你可以使用该组件对数据进行排序。
排序的的种类:
升序
降序
排序源的种类:
从关系数据库来的数据
从flat file来的数据
提示:你可以在一个mapping里建立该组件。你可以指定多个用来排序的port,并且可以为它们每个都建立一个排序。
Sorting Data(排序的数据)
使用的port类型:input/output
在一个组件里出现多个排序port时,Integration Service的处理方法:
Integration Service会先对第一个port进行排序,然后在第一排序的基础上进行排序。下面是一个例子,可以很好的说明该过程。
源数据如下:
ORDER_ID |
ITEM_ID |
QUANTITY |
DISCOUNT |
45 |
123456 |
3 |
3.04 |
45 |
456789 |
2 |
12.02 |
43 |
000246 |
6 |
34.55 |
41 |
000468 |
5 |
.56 |
对ORDER_ID和ITEM_ID排序。根据上面的处理过程就会得到如下的结果。
ORDER_ID |
ITEM_ID |
QUANTITY |
DISCOUNT |
41 |
000468 |
5 |
.56 |
43 |
000246 |
6 |
34.55 |
45 |
123456 |
3 |
3.04 |
45 |
456789 |
2 |
12.02 |
属性:
Sorter Cache Size(排序的cache的大小):
Integration Service使用Sorter Cache Size属性来决定在执行该操作的时候,使用的内存的最大值。
在执行排序操作之前,Integration Service会把所有的数据加载到该组件里。你可以自己输入一个数字来配置Sorter cache的大小,也可以配置由Integration Service来决定运行时的大小。如果你配置Integration Service来决定cache的大小,你也可以配置允许Integration Service指派的最大的内存大小。
如果的配置的session的cache的总数为2GB或者更大的,你必须运行该session在64位的Integration Service上。
在执行排序操作之前,Integration Service指定内存的大小,基于Sorter cache size的配置。如果Integration Service运行一个分割的session,它为每个分割的session指定Sorter cache memory的数量。
如果它不能指定足够的内存,Integration Service会把session设置为fails。为了最好的性能,配置Sorter cache size小于或等于现有的物理内存的大小。最小要给该组件指定最少8 MB (8,388,608 bytes)的内存。Sorter cache size的默认值是8,388,608 bytes。
如果进来的数据比Sorter cache size指定数量大,Integration Service会把数据保存在Sorter transformation的目录。Integration Service需要至少两倍输入数据大小的硬盘空间,当储存数据在工作目录里。
使用下面的公式来决定输入数据的大小:
number_of_input_rows [( S column_size) + 16]
下表给出了一些列的值的大小,以不同的类型。
Datatype |
Column Size |
Binary |
精确度 + 8 约等于8 |
Date/Time |
24 |
Decimal, high precision off (all precision) |
16 |
Decimal, high precision on (precision <=18) |
24 |
Decimal, high precision on (precision >18, <=28) |
32 |
Decimal, high precision on (precision >28) |
16 |
Decimal, high precision on (negative scale) |
16 |
Double |
16 |
Real |
16 |
Integer |
16 |
Small integer |
16 |
NString, NText, String, Text |
Unicode mode: 2*(精确度+ 5) ASCII mode: 精确度+ 9 |
The column sizes include the bytes required for a null indicator.
To increase performance for the sort operation, the Integration Service aligns all data for the Sorter transformation memory on an 8-byte boundary. Each Sorter column includes rounding to the nearest multiple of eight.
The Integration Service also writes the row size and amount of memory the Sorter transformation uses to the session log when you configure the Sorter transformation tracing level to Normal. For more information about Sorter transformation tracing levels, see Tracing Level.
Case Sensitive (大小写敏感度)
该选项会让Integration Service考虑排序数据的大小写。当你选中了这个属性,Integration Service对数据排序的时,会认为把大写比小写的高。
Work Directory (工作目录)
你必须为Integration Service指定一个工作目录来创建临时文件,当它对数据排序的时候。在Integration Service对数据排序后,它删除临时文件。你可以指定任何一个Integration Service所在机器的路径来作为工作目录。默认的,Integration Service使用过程变量$PMTempDir的值来指定。当你用一个Sorter transformation分开一个session时,你可以指定不同的工作目录为每个分割部分在pipeline中。处于增加session性能的目的,指定工作目录在Integration Service 系统中的不同的物理硬盘上。
Distinct Output Rows (输出的行是唯一的)
你可以配置Sorter transformation处理输出的行是唯一的。如果你配置该项,Mapping Designer会配置所有的port作为sort key的一部分。当Integration Service运行session时,它会通过比对抛弃重复的行在排序操作期间。
Tracing Level (追踪级别)
配置Sorter transformation的追踪级别,来控制在Integration Service 向session log 中写入Sorter的错误和状态信息的数量和种类。
在普通追踪级别,Integration Service通过排序组件的行的数量和组件在排序操作时候的内存数量。Integration Service也会记录第一条和最后一条进入组件的数据的时间和日期。
如果你把级别设置到很详细的级别,Integration Service会记录通过的所有数据。Integration Service也会记录排序组件什么时候释放内存和移走临时文件。
Null Treated Low
你可以配置排序组件使用这种方式来处理null值。可以使用该组件,当你想让Integration Service在排序操作时,处理null比任何其他值都底。不使用则相反。
Transformation Scope (转化范围)
Transformation Scope会指定Integration Service如何应用转换逻辑到输入的数据:
Transaction级别:应用转换逻辑到所有在transaction中的行。选择Transaction,当一个数据行以来所有的数据在同一个transaction中的,但是不依赖其他transactions的行。
All Input级别:应用转换逻辑到所有的输入数据。当你选择All Input,PowerCenter放弃输入transaction的边界。选择All Input当一行数据依赖所有来自源的行。
Source Qualifier Transformation Overview(概述)
Transformation type: Active、Connected
当你添加一个relational 或者flat file 源加入一个mapping,你需要一个Source Qualifier transformation连接它。当运行一个session时,Source Qualifier transformation负责描述Integration Service读的行。
使用Source Qualifier transformation来完成如下的任务:
连接从同样的源数据库的数据。你可以用主外键关系使用一个Source Qualifier transformation连接两个或者更多的表
过滤行当Integration Service读取源数据的时候。如果你包括一个过滤条件,Integration Service添加一个WHERE子句到默认的查询。
指定outer join比默认的inner join要好。如果你包括一个用户自定义的连接,Integration Service替代连接信息被指定的SQL查询的元数据。
指定sorted ports。如果你指定一些sorted ports,Integration Service添加一个ORDER BY到SQL查询。
从源中查询唯一的值。如果你选择Distinct,Integration Service添加一个SELECT DISTINCT语句到默认的SQL的查询。
建立一个定制的查询来解决一个特殊的SELECT语句来为Integration Service读取源数据。例如,你可以使用定制查询来执行汇总计算。
Transformation Datatypes
不要更改Source Qualifier transformation中数据类型。如果源中定义的数据类型和Source Qualifier transformation不匹配的话,Designer在你保存的时候会报错。
Parameters and Variables
使用mapping parameters 和 variables在SQL query, user-defined join, and source filter 在一个Source Qualifier transformation。你也可以使用系统变量$$$SessStartTime。
Integration Service首先产生一个SQL查询并且用mapping parameter或者variable他们的start value替代,然后在源数据库上执行查询。
当mapping parameter 或者 variable是string的时候,使用string identifier适应源系统。
当mapping parameter 或者 variable是datetime的时候,需要把数据转换为源数据库的格式。
各数据库的时间格式。
Source |
Date Format |
DB2 |
YYYY-MM-DD-HH24:MI:SS |
Informix |
YYYY-MM-DD HH24:MI:SS |
Microsoft SQL Server |
MM/DD/YYYY HH24:MI:SS |
ODBC |
YYYY-MM-DD HH24:MI:SS |
Oracle |
MM/DD/YYYY HH24:MI:SS |
Sybase |
MM/DD/YYYY HH24:MI:SS |
Teradata |
YYYY-MM-DD HH24:MI:SS |
不同数据库,应该使用各个数据库所有的函数来转换格式。
Source Qualifier Transformation Properties(属性)
Option |
Description |
SQL Query |
定义一个定制的查询来代替默认的。 |
User-Defined Join |
指定连接条件。 |
Source Filter |
指定过滤条件。 |
Number of Sorted Ports |
表示要用于排序的列的数量。如果你选择了这项,Integration Service会为默认的查询语句添加一个ORDER BY子句。这个ORDER BY子句包括的被指定的ports的数量,是从transformation最顶端的port开始的。 当选择了,数据库的排序顺序必须和session中的排序顺序匹配。 |
Tracing Level |
设置在session log中的细节数量,当你在执行一个session中包含这个transformation。 |
Select Distinct |
指定你是否想select唯一的行。Integration Service包括一个SELECT DISTINCT语句当你选择这个选项。 |
Pre-SQL |
Pre-session SQL是在Integration Service读取数据源前的操作。 |
Post-SQL |
Post-session SQL是在Integration Service把数据写入目标以后对数据库的的操作。 |
Output is Deterministic |
Relational source or transformation output that does not change between session runs when the input data is consistent between runs. When you configure this property, the Integration Service does not stage source data for recovery if transformations in the pipeline always produce repeatable data. Relational source 或者 transformation输出的不变化的在session运行期间,输入的数据是固定的在运行期间。当你配置这个属性,Integration Service |
Output is Repeatable |
Relational source or transformation output that is in the same order between session runs when the order of the input data is consistent. When output is deterministic and output is repeatable, the Integration Service does not stage source data for recovery. |
Default Query(默认查询)
该组件默认的查询语句的生成是依靠,组件中有多少个port被其他的组件引用。例如:某表中只有CUSTOMERS.CUSTOMER_ID,CUSTOMERS.COMPANY,CUSTOMERS.FIRST_NAME三列给引用,所以生成的语句就是如下:
SELECT CUSTOMERS.CUSTOMER_ID, CUSTOMERS.COMPANY, CUSTOMERS.FIRST_NAME
FROM CUSTOMERS
Joining Source Data(连接源数据)
默认的连接,如果表之间有主外键关系的话,会自动的使用该关系进行连接。
如果没有主外键关系,则会根据类型匹配。
Adding an SQL Query(覆盖默认查询)
覆盖默认的查询:
1. 打开Source Qualifier transformation,点击Properties tab。
2. 点击Open button在SQL Query区域。SQL编辑对话框出现。
3. 点击Click Generate SQL。Designer会显示默认的查询语句。
4. 输入查询语句在默认查询语句出现的地方。
5. 选择该查询要查的源属于的ODBC data source。
6. 输入用户名和密码来连接到这个数据库。
7. 点击Validate。Designer执行查询并返回语法是否正确。
8. 点击OK返回Transformations编辑窗口。再次点击OK返回Designer。
9. 点击Repository > Save。
Entering a User-Defined Join(输入用户自定义连接)
建立一个用户自定义的连接:
1. 建立Source Qualifier transformation从多个源或者联合的源。
2. 打开Source Qualifier transformation,并且点击Properties tab。
3. 点击Open button在User Defined Join区域。SQL编辑对话框会出现。
4. 输入连接语句。不要输入WHERE在join的开头。Integration Service会在运行的时候加上这个关键字。
5. 点击OK,返回Transformations对话框,然后点击OK返回Designer。
6. 点击Repository > Save。
Outer Join Support(外连接)
有助于提高性能(因为这样可以减少在内存中流动的数据的行数)。
Integration Service提供两种外连接:
l 左外
l 右外
Informatica的连接语法:
当你在输入连接语法的时候,可以使用Informatica或者数据库特有的。但当你使用Informatica的连接语法的时候,Integration Service会在运行的时候把它转换为数据库特有的。所以最好总是使用数据库特有的连接语法。
当使用Informatica连接语法的时候,使用表名作为列名的前缀。例如,如果你有一个列名是‘FIRST_NAME’在‘REG_CUSTOMER’表中,你要输入‘REG_CUSTOMER.FIRST_NAME’在连接的语法中。当然,在为表名起了别名以后,要用表的别名。
你能把左外、右外连接和自然连接联合使用在一个source qualifier中。使用多个自然连接和多哥左外连接。
当使用联合连接时,输入他们以如下顺序:
1、自然
2、 左外
3、 右外(有些数据库是不能使用的)
自然连接语法:{ source1
INNER JOIN
source2
on
join_condition
}
source1 源表的名字。Integration Service会根据连接条件从该表返回数据。
source2 源表的名字。Integration Service会根据连接条件从该表返回数据。
join_condition 连接条件。使用源数据库支持的语法。你可以使用AND操作符来联合使用多个连接条件。
左外连接的语法:{ source1
LEFT OUTER JOIN
source2
on
join_condition
}
source1 源表的名字。就左外连接,Integration Service返回该表的所有行。
source2 源表的名字。Integration Service返回该表的行,在匹配连接条件的时候。
join_condition 连接条件。使用源数据库支持的语法。你可以使用AND操作符来联合使用多个连接条件。
右外连接的语法:{ source1
RIGHT OUTER JOIN
source2
on
join_condition
}
source1 源表的名字。Integration Service返回该表的行,在匹配连接条件的时候。
source2 源表的名字。就右外连接,Integration Service返回该表的所有行。
join_condition 连接条件。使用源数据库支持的语法。你可以使用AND操作符来联合使用多个连接条件。
如何输入一个源过滤条件:
1. 在Mapping Designer中打开Source Qualifier transformation。组件编辑器对话框出现。
2. 选择Properties tabs。
3. 在Source Filter field点击打开按钮。
4、在SQL编辑对话框输入过滤语句。包括表名和port名。不要在条件中出现WHERE关键字。也可以出现mapping参数和变量。
5、 点击OK。
Sorted Ports:
何时使用Sorted Ports:
当mapping中有汇总和连接组件的时候,为了性能的考虑,你可能要使用该选项。
怎样使用Sorted Ports:
1. 在Mapping Designer中打开Source Qualifier transformation,并点击Properties tab。
2. 点击Number of Sorted Ports,并输入你想排序的port数量。Integration Service会添加与配置的数量相同的从Source Qualifier transformation的顶部开始算起的port到ORDER BY子句中。源数据的排序顺序必须与session的排序顺序相符。
提示:Sybase限定ORDER BY中的列数最多为16行,所以在使用Sybase不要使排序的列超过16列。
3.点击OK。
使用Distinct:
当你需要Integration Service从源中查询的值的唯一的的时候,你可以使用Select Distinct。
当你选中了Select Distinct之后,Designer会在SELECT子句中加入关键字DISTINCT。
如何配置Select Distinct:
1. 在Mapping Designer中打开Source Qualifier transformation,并点击Properties tab。
2. 选择Select Distinct,然后点击OK。
如何在session中复写Select Distinct:
1. 在Workflow Manager中,打开Session task,并点击Mapping tab。
2. 点击Transformations view,点击源接点下的Source Qualifier transformation。
3. 在Properties settings中设置Select Distinct,并点击OK。
使用pre- 和 post-session SQL应注意:
使用数据库允许的指令。Integration Service不允许包括注释,尽管数据库允许。
可以使用parameters 和 variables。
使用分号(;)来分隔多条语句。
Integration Service会忽略在/*…*/中的分号。
如果你想在/*...*/以外使用分号,请在分号前使用‘\’。当你使用‘\’时,Integration Service会忽略它,并不会理会它后面的分隔符。
Designer不会验证SQL是否正确。
常见问题:
l 我不能执行拖拽和放下操作,例如:连接port。
请检查status bar中查询详细的错误信息。
l 我不能把源和目标连接到一起。
你不能直接的把源和目标连到一起。你必须在关系源和flat file源连接到Source Qualifier transformation后,再通过Source Qualifier transformation和目标连接。同样COBOL源需要使用Normalizer transformation。
l 我不能把多哥源连接到一个目标上。
Designer不允许多个Source Qualifier transformations连接到一个目标(表)上。下面有两种解决方法:
1. 复用目标表。一旦target definitions是可复用的,你可以添加同一个目标到一张mapping中多次。然后把源和目标一个一个的连接。
2. 把源在Source Qualifier transformation中连接。
l 我输入了一个订制的查询语句,但是在执行中却没有工作。
你可以先检查你输入的SQL语句是否正确。你也可以在session log中获得更多的信息。
最有可能出现的错误就是你没有指定表的拥有者是谁。
你可以把SQL语句复制到数据库的查询工具中,执行来看是否正确。
我在源过滤条件中使用了mapping变量,session失败了。
Source Qualifier transformation中测试SQL是否正确。请注意变量或者参数是什么类型的,尤其是时间类型的,你应该注意它的格式是否和源系统一致。
Transformation type: Active 、Connected
功能:把不同种类或者同种类的源合并到一起。相当于SQL语句的UNION ALL语句。不会去除重复的行
Union Transformation的规则和指导方针:
l 你可以建立多个输入组,但是只能有一个输出组。
l 所有的输入和输出组必须有匹配的port。所有组的精度,数据类型和数值范围必须匹配。
l Union transformation不会移除重复行。如果想去掉重复的行,你必须添加其他的组件,如:Router 或者 Filter transformation。
l 你不能使用Sequence Generator 或者 Update Strategy transformation在Union transformation之后。
l Union transformation不会产生转换。
Union Transformation的构成(Union Transformation Components)
l Transformation tab:你可以为组件重命名和添加描述。
l Properties tab:你可以指定跟踪级别。
l Groups tab:你可以建立和删除输入组。Designer显示你在Ports tab建立的组。
l Group Ports tab:你可以为输入组建立和删除port。Designer显示你在Ports tab建立的port。
和Groups 以及 Ports一起工作 (Working with Groups and Ports)
Union Transformation拥有多个输出组和一个输入组。建立group在Groups tab,建立port在group port tab。
在Groups tab你可以建立一个或者多个输入组。Designer默认建立一个输出组。你不能编辑和删除这个输出组。
图1显示的是Union transformation的Groups tab。
图1
你可以建立port用以下方法,从一个transformation复制port,或者你可以手动建立一个port。当你在一个Group Ports tab上建立一个port的时候,Designer会在每一个input group上建立一个input ports,并且在output group中建立output ports。这些port会使用和你建立的port相同的名字,相同的类型,相同的精度。在Ports tab中,会在每个名字的后面加上一个数字来区分它们,当然只有名字是不一样的,其他的都是一样的。
图2显示的是Union transformation 的Group Ports tab:
图2
Ports tab显示你建立的组和port。在Ports tab,你不能编辑组和port。使用Groups和Group Ports tab来编辑组和port。
图三显示的是Union transformation 的Ports tab,里边有在图1和图2中建立的组和port。
图3
在mapping中使用一个Union Transformation (Using a Union Transformation in Mappings):
Union transformation是一个non-blocking的多输入组的组件。你可以连接输入组从不同的分支,在一个pipeline或者不同pipeline。
当你添加一个Union transformation到mapping,你必须检查你连接的所有输入组的同一个port。如果你只连接了一个输入组,但是没有连接一个port在另外一个输入组,Integration Service会输出空值给未连接的port。
图4显示一个拥有一个Union transformation的mapping:
图4
当一个mapping的Union transformation从一个单一的transaction generator接受数据,Integration Service会扩大转换边界。当该组件从多个组件接受数据的时候,Integration Service会抛掉所有输入transaction的边界,并且输出行在一种open transaction(outputs rows in an open transaction)。
Transformation type: Active 、Connected
如何设置Update Strategy :
使用如下步骤来定义一个修改策略:
l 加入一个Update Strategy transformation到mapping的目的是控制怎样处理一个被标记的行,在mapping中是插入,修改,删除,或者抛弃。
l 当你配置session时,怎样对待标记行。你可以标记所有的行为插入,删除,或者修改,或者你可以选择data driven选项,这意味着Integration Service按照Update Strategy transformations中的编码来执行。
l 当你在session中配置插入,修改和删除选项时,它是对每个目标都起作用的。在target-by-target basis,你可以允许或者不允许插入和删除,并且你可以选择三种方法来捕捉修改,基于对session的修改策略的设置。
为Session设置修改策略:
当你配置一个session,你有一些选项来处理特定的数据库,包括修改。
为所有行指定操作:
当你配置一个session时,你可以为一个数据库选择一个对所有行的操作,使用Treat Source Rows As选项。
配置Treat Source Rows在属性tab:
Treat Source Rows的属性如下:
Setting |
Description |
Insert |
插入所有行。如果插入的行干扰数据库中主键或者外键关系,Integration Service会放弃该行。 |
Delete |
删除所有行。Integration Service发现在目标表中有该行(基于主键),Integration Service删除它。注意:主键关系必须在repository的目标(表)定义中存在。 |
Update |
修改所有行。对于每行,Integration Service在目标表中查找匹配的主键。如果存在,Integration Service修改该行。在目标定义中,主键关系存在。 |
Data Driven |
Integration Service按照输入Update Strategy 和 Custom transformations的编码,来处理标志为插入,删除,修改,或者抛弃的行。 如果mapping中有一个Update Strategy transformation,这个field回默认的标记为Data Driven。在一个mapping中包含Update Strategy 或者 Custom transformation,如果你没有选择Data Driven,Workflow Manager会报警。当你运行session,Integration Service不会按照Update Strategy 或者 Custom transformation来处理标的行。 |
为个别的目标表指定操作:
一旦你决定了在session中怎样处理所有的行,你也需要为单个的目标设置修改策略。在ession properties的Mapping tab中的Transformations view定义修改策略。如下图:
你可以设置如下修改策略选项:
Insert.选择该选项。把一行插入目标表。
Delete.选择该选项。从表删除一行。
Update.你可以使用如下的选项:
Update as Update.修改已存在的行。
Update as Insert..插入一行作为修改。
Update else Insert.如果存在就修改,否则,插入它。
Truncate table. 在读取数据前,先truncate 目标表。
Mapping级:
修改策略表达式:
Operation |
Constant |
Numeric Value |
Insert |
DD_INSERT |
0 |
Update |
DD_UPDATE |
1 |
Delete |
DD_DELETE |
2 |
Reject |
DD_REJECT |
3 |