informatica mapplet组件怎么使用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了informatica mapplet组件怎么使用相关的知识,希望对你有一定的参考价值。
1. INFORMATICA CLIENT的使用1.1 Repository Manager 的使用
1.1.1 创建Repository。
前提:
a. 在ODBC数据源管理器中新建一个数据源连接至你要创建Repository的数据库(例:jzjxdev)
b. 要在你要连接的数据库中新建一个用户(例:name: ETL password: ETL)
现在你可以创建一个Repository了。选择Repository – Create Repository,输入Repository Name(例:JZJX),Database Username(例:etl),Database Password(例:etl),ODBC Data Source(例:jzjxdev),Native Connect String(数据库所在ip例:141.20.52.108)
1.1.2 添加Repository。
通过这一步你可以添加别人已经建好的Repository。
选择Repository – Add Repository,输入Repository Name(例:JZJX),Username(例:etl),点击ok就可以看到名为JZJX的Repository在左边的浏览器中,但是此时还看不到它的内容,要看到它的内容或者对它进行操作必须先连接它。
1.1.3 添加Folder
选择Folder – Create,输入文件夹名称即可。
1.2 Designer 的使用
首先连接Repository,可以看到该Repository在Repository Manager中创建的文件夹。
1.2.1 Sources
Sources文件夹下的表是抽取的来源表。
导入方法:
选择Tools菜单下的Source Analyzer,然后选择Sources菜单下的Import from database,连接想要连接的数据库,连接上后选择你要抽取的表点击ok你所选择的表就会出现在Sources文件夹下。
说明:上面的导入过程导入的只是表结构,你也可以自己创建来源表,只要你创建的表的结构跟真实存在的那张表的表结构一致就行。
1.2.2 Targets
Targets文件夹下的表是抽取的目标表,也就是抽取结果的存放表.
导入方法: 选择Tools菜单下的Warehouse Designer,然后选择Targets菜单下的Import from database,连接想要连接的数据库,连接上后选择你要抽取的表点击ok你所选择的表就会出现在Targets文件夹下。
说明:上面的导入过程导入的只是表结构,你也可以自己创建目标表,只要你创建的表的结构跟真实存在的那张表的表结构一致就行。
1.2.3 Mappings 的设计
选择Tools菜单下的Mapping Designer才能进行Mapping的设计。
每个Mapping都由来源表,transformation和目标表组成,描述数据抽取的过程。来源表和目标表可以从Sources和Targets文件夹拖拽到工作区,但是transformation一般来说是需要自己创建的。Mapping的设计关键是transformation的使用,它的使用关系到数据抽取的正确性和效率。下面说明各个transformation的作用和用法。
(Active:表示该transformation可以改变通过它的数据的行数;
Passive:表示该transformation不改变通过它的数据的行数;
Connected:表示该transformation要连接到数据流;
Unconnected:表示该transformation可以不连接到数据流)
1.2.3.1 Source Qualifier
作用:根据查询SQL文从关系表或平坦文件查出所要记录
用法:创建好Source Qualifier(下简称SQ) 后,将需要的用的字段从来源表拖拽到SQ ,双击SQ,对SQ的属性进行设置。
Select Distinct 属性:选中的话表明结果记录将去除重复值;
Tracing Level属性: 共有四级,表示log的复杂程度;
Number Of Sorted Ports属性: 排序的字段个数,值大于0时Sql Query中的sql 文将出现order by 从句;
Sql Filter属性: 属性值将出现在Sql Query属性值的where表达式中;
User Defined Join属性: 用户如果要定义外部连接可在此写(例: REG_CUSTOMER LEFT OUTER JOIN PURCHASES on
(REG_CUSTOMER.CUST_ID = PURCHASES.CUST_ID AND PURCHASES.AMOUNT > 100.00) )
Sql Query属性:值是一条sql 文,session运行时会执行这条sql 文进行查询。
命名方式:SQ_Name
类型:Active/Connected
注意:SQ的输入只能来自来源表; User Defined Join属性值必须用括起来;在更改了SQ的属性值之后一定要点击Sql Query属性的
generate sql按钮重新生成sql文。
1.2.3.2 Update Strategy
作用:决定该行进行插入,删除,更新,忽略中的哪一种操作
用法:创建好Update Strategy(下简称US)后,将需要的用的字段从transformation拖拽到US ,双击US,对US的属性进行设置。US的设
置关键是Update Strategy Expression属性的设置,这个表达式使用IIF 或DECODE 函数对记录的每一行进行判断,为每一行赋予
DD_INSERT,DD_UPDATE,DD_DELETE,DD_REJECT(这四个是常量,值分别为0,1,2,3)中任意一个值,表明该行在数据库中将进行
何种操作。
命名方式:UPD_Name
类型:Active/Connected
注意:mapping中有US时,mapping对应的session的在配置属性时必须把Treat rows属性设置为Data Driven,否则US将不起作用。
1.2.3.3 Expression
作用:计算一个值
用法:创建好expression_r(下简称EXP)后,将需要的用的字段从来源表拖拽到EXP,双击EXP,
新增输出端口,编辑该端口的表达式。
命名方式:EXP_Name
类型:Passive/Connected
注意:要进行列运算一般用这个transformation; 此种transformation可以使用本地变量
1.2.3.4 Stored Procedure
作用:调用一个存储过程
用法:创建Stored Procedure(下简称SP)的时候连接数据库选择必要的存储过程。SP有连接和不连接到数据流两种用法。
连接到数据流方式跟一般的transformation类似,通过拖拽端口来实现数据流。
不连接到数据流分表达式调用和Pre-/Post Session两种方式。表达式调用方式中SP被Mapping中另一个transformation 中的表达式
调用。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
注意:
1.2.3.5 Sequence Generator
作用:产生主键
用法:创建好Sequence Generator(下简称SEQ)后,双击SEQ,对SEQ的属性进行设置。Start Value属性是开始值,此属性只在选择了
Cycle选项才有效;Increment By 属性值是每次增加的值;End Value属性值是结束值;Current Value属性值是当前开始值;Cycle选
项被选择的话NEXTVAL的值达到End Value值之后会重新从Start Value开始;Reset选项被选择的话,服务器会为每个使用了该SEQ的
session的NEXTVAL值都从Current Value开始。
命名方式:SEQ_Name
类型:Passive/Connected
注意:这是一个只有两个输出端口没有输入端口的transformation.;
如果该SEQ时可重复使用的话,不能选择Reset选项。
1.2.3.6 Aggregator
作用:执行分组聚合运算
用法:创建好Aggregator(下简称AGG)后,将需要的用的字段从其他transformation拖拽到AGG ,双击AGG,在端口tab中每个端口有
group by 选项。钩上想要分组的列,新增端口,编写聚合表达式实现分组聚合运算。
命名方式:AGG_Name
类型:Active/Connected
注意:可使用本地变量
1.2.3.7 Filter
作用:过滤记录
用法:创建好Filter(下简称FIL)后,将需要的用的字段从transformation拖拽到FIL ,双击FIL,对FIL的属性进行设置。FIL的配置主
要是对Filter Condition的配置,Filter Condition 写入类似where条件的表达式即可。
命名方式:FIL_Name
类型:Active/Connected
注意:
1.2.3.8 Lookup
作用:查询值
用法:创建Lookup(下简称KP)的时候选择要查询的表。和Stored Procedure一样SP有连接和不连接到数据流两种用法。
连接到数据流方式将要关联查询的字段从其他的transformation拖拽过来,然后双击LKP进行属性的配置。Lookup Policy On
Multiple Match属性表明当查询到多个行时采取取第一行,取第二行,报错中哪个策略.Lookup Condition 属性值是查询的条件。
Lookup Sql Override属性值是查询执行的Sql文,我们可以在里面直接写Sql。Lookup Caching Enabled属性表明是否使用缓存,此项
一般选择为好,有利提高效率。Loopup Cache Persistent属性表明是否使用永久的缓存。
命名方式:LKP_Name
类型:Passive/Connected or Unconnected
注意:如果Lookup表的类型是来源表的话,请尽量使用Joiner;
一个已连接的LKP不能再被其他transformation的表达式调用;
如果查询表在session运行过程中不会改变,使用Loopup Cache Persistent属性可提高性能;
尽量不要在Lookup Sql Override中书写order by子句,因为cached LKP默认有order by ;
1.2.3.9 Joiner
作用:连接查询来自不同数据库的表或平坦文件
用法:创建好Joiner(下简称JNR)后,将需要的用的字段从transformation拖拽到JNR ,双击JNR,对JNR的属性进行设置。用于连接的
两个表一个称为detail表,一个称为master表。JNR属性中可配置Join Type(连接类型)为Normal Join,Master Outer Join,Detail
Outer Join 和Full Outer Join中任意一种。Normal Join相当于常规的inner join; Master Outer Join相当于常规的Detail left
outer join Master;Detail Outer Join相当于常规的Detail right outer join Master; Full Outer Join相当于常规的full outer
join。Join Condition属性值就是常规sql文on 后带的条件。
命名方式:JNR_Name
类型:Active/Connected
注意:尽量使用Normal Join,Master Outer Join.这两个的效率比另外两个更好
1.2.3.10 Normalizer
作用:格式化记录,这些记录可以是来自COBOL源
用法:
命名方式:NRM_Name
类型:Active/Connected
注意:
1.2.3.11 Router
作用:根据一组表达式将记录分类路由到多个transformation
用法:创建好Router(下简称RTR)后,将需要的用的字段从transformation拖拽到RTR,双击RTR,对RTR的属性进行设置。在Group tab
中添加组,为每组编辑该组的过滤条件。
命名方式:RTR_Name
类型:Active/Connected
注意:组过滤条件表达式的计算值必须是真或者假。
1.2.3.12 Rank
作用:排序记录,只输出最顶层或最低层的n个记录
用法:创建好Rank(下简称RNK)后,将需要的用的字段从transformation拖拽到RNK,双击RNK,对RNK的属性进行设置。在Ports tab中
有一个名为‘R’的列,选择你要排序的列。你还可以选择你想分组的列。在Properties tab中Top/Bottom属性,Top表示选择顶层的
记录,Bottom表示选择底层的记录; Number Of Ranks属性值是整数,表示要选择的记录条数。假设你在‘R’列中选择了名为’
Price’的列,而且Group By选择了‘Name’列,Top/Bottom属性选择的是‘Top’, Number Of Ranks属性值是2,那么将抽取过程是
这样的:以name分组取出每组中 Price最大的2列记录。
命名方式:RNK_Name
类型:Active/Connected
注意:可以使用本地变量
1.2.3.13 ERP Source Qualifier
作用:根据查询SQL文从ERP文件查出所要记录
用法:
命名方式:
类型:Active/Connected
注意:
1.2.3.14 XML Source Qualifier
作用:根据查询SQL文从XML文件查出所要记录
用法:
命名方式:XSQ_Name
类型:Passive/Connected
注意:
1.2.4 Mapping Parameters(参数) 和 Variables(变量)的使用
如果你在一个mapping中多次用到同一个值,又或者mapping中要用到一个在session运行才能决定的值,这时候可以使用mapping
parameters或variable。添加参数或变量的方法是:选择Mappings-Parameters and Variables,在窗口新增变量或者参数,并对它的
数据类型,数据大小,初始值进行设置。添加的参数和变量在本mapping的transformation的表达式中就可以使用了。这些参数和变
量的值还可以设置在.txt文件中,建session或者batch的时候把这个文件的路径设置在Parameter输入框中就行了。
Mapping参数变量的命名方式:$$NAME
存放参数变量的.txt文件的格式:folder_name可写可不写
[folder_name.session_name]
parameter_name=value
variable_name=value
mapplet_name.parameter_name=value
[folder_name.session2_name]
parameter_name=value
variable_name=value
mapplet_name.variable_name=value
[folder2_name.session_name]
parameter_name=value
variable_name=value
mapplet_name.parameter_name=value
1.2.5 Mapping 的调试
选择Mappings–Debugger–Start Debugger,在点击‘下一步’的过程中选择调试过程运行在哪台服务器然后为来源表选择数据库,
最后到完成。等调试初始化好之后点击Mappings–Debugger–Continue(或按F5),即可开始调试,选择某个目标表即可看该表的结果
数据。如果还想看中间某个transformation的数据,在开始调试前为该transformation增加一个断点。
1.3 Server Manager 的使用
1.3.1 Register Server(注册服务器)
任何session都必须运行在某个服务器上,所以如果Server Manager里没有服务器的话必须注册一个,当然你也可注册多个服务器。
服务器的注册过程如下:
选择Server Configuration – Register Server,Server输入 的是要注册的服务器的名称;Host Name 输入的是运行了informatica
server的机器名或iprotocol选择TCP/IPort Number输入4001。最下面的是服务器的变量设置,设置的是session或batch运行时一些
文件的存放位置,比如说log文件bad 文件 cache文件,一般不用更改。这样一个服务器就注册到repository了,不过后面你可以双
击它重新编辑。
1.3.2 Add DataBase Connection(添加数据库连接)
选择Server Configuration – DataBase Connection,点击Add,然后选择数据库的类型。不同类型的数据库配置起来不一定一样,下面说明Oracle 和SQL Server两种数据库连接的配置。
Oracle类型数据库连接配置:Data Source 输入数据源名称;User Name输入数据库连接的用户名;Password输入数据库连接的密码;Connect String 输入Oracle TNS 服务名。
SQL Server 类型数据库连接配置: Data Source 输入数据源名称;User Name输入数据库连接的用户名;Password输入数据库连接的密码;Database Name输入数据库名称;Server Name输入数据库的ip地址;Domain Name输入数据库的域名。
1.3.3 Add Session(添加抽取任务)
Mapping 只是数据抽取过程的设计,要使这个过程运行必须为该Mapping建立对应的session,然后运行该session。选择Operations-Add Session,在窗口中选择一个Mapping点击ok会出现编辑该session的窗口。
Session输入框输入该session的名称;
server选择该session将运行在的服务器;
Treat rows有Insert,Delete,Update,Data Driven四个选项,表明抽取出来的数据在目标表中作何种操作,只有在session对应的mapping中有Update Stategy时才能选择Data Driven而且也必须选择Data Driven;
Source 框选择来源表所在的数据库;
Target Options 中的Insert,Update(as Update),Update(as Insert),Update(else Insert),Delete,Truncate table 选项的意思分别是:将insert作insert操作,将Update 作insert操作,将Update先做Update操作不成功再作insert操作,将delete作delete操作,在对目标表操作前删除目标表所有数据。这些选项如果与Update Stategy冲突server将以这里的设置为准,也就是说这里的设置可以覆盖Update Stategy的设置;Parameter输入框中输入session要用到的参数或变量的所在文件的路径;其他设置比较简单或者保持原来的值即可,这里就不再详细说明了。除了在添加 session的过程中可编辑session之外,双击已添加的session也对session重新设置。
注:如果mapping 中有Joiner的话,session的编辑窗口的Source Type就变成heterogeneous(不同类),这样就无法通过设置Source
来设置来源表的位置,只能在Source Location tab中为每个来源表设置位置。
1.3.4 Add Batch(添加批操作任务)
添加Batch可以将一系列的session串起来,这样就可以让必须按顺序执行的session有序的执行。添加方法:选择Operations-Add Batch,在窗口中对batch进行编辑。Batch输入框中输入batch 的名称;
Parameter输入框中输入batch中的session要用到的参数或变量的所在文件的路径,由于每个session都可以设置自己的parameter,所以batch中可以不设置,即使batch的parameter进行了设置也会被各个session自己的parameter设置所覆盖,但如果session用到了parameter在同一个文件中的话,把parameter文件的位置设置在batch的parameter输入框就显得更方便;Enabled选项表明是否让该batch有效;Concurrent选项表明是否让batch中的所有session并行地运行;Schedule中可设置batch的运行时间和运行频率。
1.3.5 Session和Batch 的运行
右键单击要运行的session或者batch,选择start即可让该session或者batch立刻运行。如果你的session或者batch的Schedule设置不是选择的‘Run only on demand’,那么该session或者batch就会在设置完后就处在Scheduled状态,时间一到就会自动运行。(可以右击服务器选择monitor来监视运行在该服务器下的session或者batch当前状态)。 参考技术A 其实informatica自带的帮助对各种组建和功能已经说明的很详细了,只要输入关键词查找就可以。worklet说白了就是为了使mapping看起来更简洁有条理,你完全可以把所有的session都放到一个mapping中执行,但是当你有几百个session的时候,可能按照一定的规则分类放到不同的worklet里面,再集中到mapping中更有可读性。哦,sorry,上面说的是worklet,但是mapplet也是差不多的作用,当一个mapping中涉及的源表太多的时候,分类放到mapplet里面,再集中到mapping中,更有条理更好读,但是需要注意的是,如果mapping中需要使用参数,mapplet中需要单独声明。
Informatica常用组件使用方法
表1中列出的是informatica中的所有组件。不会在本文档中出现的会在组件名后标出。
表1
Lookup
1.1 概要描述
获得一个关联的值。例如:源里包含employee ID,但你还需要employee name。
用于计算的植。例如:只是汇率或者个人所得税之类的固定数值,不是计算得出来的数据。
Update slowly changing dimension tables。主要是根据条件查出原表,若查出了,就把自己添加的标志位设为真,否则就设置为假。
1.2 Connected or unconnected
Connected 和 unconnected 的transformations的输入和输出是不同的,不同点如表2列出的。
表2
Connected
下面是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来过滤后在到目标中。
unconnected
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中。
1.3 Relational or flat file lookup
当你在建立一个Lookup transformation时,你可以选择查询flat file或者relational table。
Relational
你可以通过SQL的来override默认的SQL,这样可以你可以加where或者查询多个表。
flat file
使用下面选项在使用flat file时:
1. 指定源是indirect files的。
2. 使用sorted输入。
Tips
l 使用这些技巧在你配置一个Lookup transformation的时候:
l 给被用于查询条件的列加一个索引。
l 把=号放在条件的第一位。
l 查询的时候,完全加载小的表。
l 在数据库中Join tables比使用查询要高校的多。
l 为静态cache设置固定的大小。
l 使用:LKP来调用unconnected Lookup transformations。
1.4 Cached or uncached
有时,你可以在使用lookup组件查询表的时候,把组件设置成Cached 的来提高session的速度。如果你选择了Cached ,你可以选择使用动态的还是静态的。默认的是使用静态的。
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的处理:
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的区别:
Aggregator Transformation
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分组:
Integration Service 会执行如下的分组来执行汇总计算。
Integration Service会让每组最后一行返回,按照上面的汇总结果,可以得到如下:
使用默认值来代替分组中的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排序后的结果如下:
汇总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。
Expression Transformation
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。
你可以为一个表达式添加注释,来给这个表达式添加描述信息,或者指定一个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)
1. 在transformation中,选择port并打开表达式编辑器。
2. 输入表达式。
3. 添加注释。
4. 验证表达式。
Filter Transformation
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来过滤数据。
Joiner Transformation
1.5 Transformation type:
Active 、Connected
1.6 功能:
你可以使用本组件连接两个不同源的关系表或者file系统。当然你也可以连接来自同一个源的数据(一般使用Source Qualifier Transformation,在下面会介绍使用本组件连接来自同一个源的数据的情况)。本组件一次只能连接两个源,如果有多个源就使用多个该种组件,直到你把所有你想连接的源都连接了为止。影响连接结果的有,连接的条件,连接的类型和输入的源。
图1显示的是一张mapping 的一个 Joiner transformation的master 和 detail pipelines。
图1
1.7 不能使用Joiner transformation的两种情况:
l input pipeline中包括Update Strategy transformation情况下,你不能使用本组件。
l 你不能直接把Sequence Generator transformation连接到本组件。
1.8 如何让一个Joiner Transformation工作:
如果你想让Joiner Transformation工作,你需要以下步骤:
1. 配置组件属性。
2. 配置连接条件。
3. 配置连接条件。
4. 配置session为sorted 或者 unsorted input。
5. 配置transaction scope。
1.9 属性:
图2显示的是Joiner Transformation 的Properties Tab:
图2
表1是Joiner Transformation 的所有属性(Properties):
表1
1.10 怎样设置master 和 detail以最佳的性能:
在session运行中,Integration Service会使用master源的每一行来和detail源进行比较。为了达到最佳性能,对于无序的输入源,使用行数最少的作为master;对于有序的,使用duplicate key values最少的为master。默认的,Integration Service会把第一个被引入该组件的pipeline设置为detail。你可以在Ports tab 中的ports中的M column来更改。
1.11 定义条件:
你可以基于来自于两个输入源的port建立一个或者多个条件。例如:有两个输入源表EMPLOYEE_AGE和EMPLOYEE_POSITION,它们都包含一个字段employee ID是number型的,你就可以建立如下的连接条件:EMP_ID1 = EMP_ID2
1.12 连接类型:
Joiner transformation和SQL 的join很像,只是它的数据可以来自于不同类型的源。
下面介绍组件提供的几种连接类型:
Normal Join:
Integration Service会去掉所有master 和 detail中不符合条件的数据。
例如:你有两个源叫PARTS_SIZE 和 PARTS_COLOR,并且有如下的数据:
PARTS_SIZE (master source)
PARTS_COLOR (detail source)
连接条件如下:
PART_ID1 = PART_ID2
结果如下:
下面是等价的语句:
SELECT * FROM PARTS_SIZE, PARTS_COLOR WHERE PARTS_SIZE.PART_ID1 = PARTS_COLOR.PART_ID2
Master Outer Join
保留所有detail的行,并且和master进行匹配。它抛弃不匹配的master行。
以和上面同样的条件会得到如下的结果: