三、workflow执行、监控
workflow是PowerCenter的执行单元;
一个workflow包括一个或者多个session(或task)。
1.session
session是mapping的实例化。
session是给mapping提供配置文件的场所或机制。
有了这些配置信息,mapping就可以执行了,所以说session是mapping的一个可执行实例。
session的两种类型:Reusable session(可重复使用)和非Reusable session(不可重复使用)。
1.1 Reusable session(可重复使用session)
创建一次,可以被多次重用。
选中“Task Developer”,打开菜单“Tasks--》create”,输入session名点“create”,选择对应的mapping.
Reusable session可用以多个workflow或者worklet。
1.2 非Reusable session(不可重复使用session)
先创建workflow,再创建session。
选中“workflow designer”,打开菜单“workflows--》create”,输入workflow名点“OK”,workflow的起始点“Start”创建成功;
再在workflow的工作区内创建session,即非Reusable session。
非Reusable session可以转换为Reusable session,双击session,选中“make reuseable”。
2.workflow
2.1 并行执行
一个workflow同时链接多个session,并且多个session之间没有依赖关系,可以并行执行以提升效率。
2.2 串行执行
一个workflow同时链接多个session,并且多个session之间存在依赖关系,需要按照依赖关系顺序依次执行。
例外处理:对于后一个session依赖于前一个session的运行状态时,双击连线,增加条件“$session1.status=succeeded”
2.3 调度:周期性的定时运行workflow
在“workflow designer”中打开一个workflow,打开菜单“workflows--》edit--》Scheduler Tab”,选中"Non Reuseable",点“应用”,
设置完成后,需要执行Schedule workflow。
3.worklet
worklet也是task/session的集合(和workflow一样);
worklet不能单独运行,只能放在workflow中,作为workflow的子集运行(和workflow的区别)。
worklet可以被一个或多个workflow调用。
选择“worklet designer”,打开菜单“worklets-->create”,
worklets虽然也有“Start”,但他不可以独立执行。
只有将worklets加入到workflow中才可以被执行。
4.command
command是workflow中的一个Task。
可以使用command调用外部命令或者shell。
5.control
control task 提供了通过workflow/worklet内的任务,控制workflow/worklet状态的能力。
当关键任务失败时,可以将进程指向control task,
在control task内设置控制选项。
6.发送e-mail
6.1 配置发送e-mail
需要配置集成服务确保其能够发送邮件;
在PowerCenter服务器端安装PowerCenter支持的发送邮件e-mail的客户端;
--单独安装邮件服务器。
PowerCenter是否能发送邮件事实上和(具体的)邮件服务器无关,
重要的是邮件客户端是否支持相关的协议,并且该客户端可以支持相应的邮件服务器。
6.2 在workflow中使用e-mail
1.在workflow/worklet中发送e-mail
2.在session的components Tab中发送e-mail
3.在workflow的General Tab中发送e-mail
7.event tasks
event raise触发事件,
event wait等待event raise触发的事件,
一旦获得了正在等待的时间,就会触发其后续的Task。
7.1 用户自定义事件使用
用户自定义事件需要在workflow中定义一个Event对象。
首先在workflow中定义事件。菜单“workflows-->edit”,选中events Tab,增加一个事件(EventX);
在workflow中可以使用event raise和event wait;
在event raise中配置需要抛出的事件(EventX);
在event wait中配置需要监听的事件(EventX);
当事件(EventX)被event raise抛出后,event wait将监听到事件(EventX),从而触发后续的流程。
7.2 预定义事件使用
预定义事件是一种File-Watch事件,即event wait等待一个触发文件(.trigger文件)。
由人为手动触发,仅使用event wait任务监听是否发现触发文件(.trigger文件)即可;
当发现该文件后,event wait任务触发后续的流程。
触发后触发文件(.trigger文件)不会被自动删除,
在event wait的属性页签配置delete filewatch file选项即可删除触发文件(.trigger文件)
8.timer
timer是一个定时任务,它可以指定后续任务的启动时间。
在timer页签指定时间,包括绝对时间和相对时间。
绝对时间可以使用物理时间,也可以用变量指定。
相对时间是指定距离上一个任务启动的时间间隔。
9.decision
decision Task用于多个前置任务的与或非判断。
“$s_1.Status=succeeded OR $s_2.Status=succeeded OR $s_2.Status=succeeded”
即前3个session只要有一个成功就执行后续session。
10.assignment
assignment Task的作用是给用户定义的变量赋值(赋值可以是一个常量或者一个表达式)。
给workflow定义一个变量,菜单“workflows--》edit”,选择Variables页签,输入变量名($$var_int)、类型、是否永久。
在assignment Task中定义“$$var_int:=$$var_int+1”,并在后续的link condition中使用该变量做判断。
四、常用功能汇集
11.debugger
D客户端--》Mapping--》Debugger--》Start Debugger命令(快捷键F9);
依次选择Next--》Using Existing Session--》Next--》Next即可。
菜单功能:
Start Debugger (快捷键F9) 开始调试;
Next Instance (快捷键F10) 继续运行;
Continue (快捷键F5)运行到下一个断点,如果没有断点,则运行到结束;
Edit Breakpoints (快捷键Alt+F9) 编辑断点
Evaluate Expression 对表达式进行计算
进入Debug模式后,会在下方输出窗口看到mapping中任一组件正在流入的数据和计算的结果。
12.Mapplet/Reusable transformation
Mapplet/Reusable transformation类似与存储过程和函数,是某一种功能的集合,是为了提供公共功能的可重用性。
Mapplet与Reusable transformation区别在于Reusable transformation只能使用一个转换组件,Mapplet可以使用多个转换组件。
12.1 Reusable transformation
Reusable transformation是用一个转换组件实现通用功能;
所有的Mapping都可以调用,但不能修改;
只能在Reusable transformation中进行修改,并且修改后所有调用的mapping全部适用。
举例:
工资加100
12.2 Mapplet
Mapplet是用多个转换组件实现通用功能,可是实现比Reusable transformation更复杂的功能;
所有的Mapping都可以调用,但不能修改;
只能在Mapplet中进行修改,并且修改后所有调用的mapping全部适用。
点击“Mapplet Designer”,菜单Mapplet--》create,
Mapplet Input--》转换组件--》Mapplet Output
注意:Mapplet可以包含源表,但是不能包含目标表。
举例:
只对工资小于2000的员工工资加100
13.shortcut快捷方式
shortcut是为了解决数据源、数据目标或其他对象在跨Folder(文件夹)和跨Repository(存储库)方面的一致性及可重用能力。
用于解决公共对象重复存储的问题,及重复存储所带来的同步更新问题。
解决方案:
创建一个Global Repository作为公司级的共享对象管理和存放位置;
在每个Repository中创建一个共享文件夹作为部门级的共享对象管理和存放位置。
分别成为Global shortcut和Local shortcut。
可以创建shortcut的对象包括:源定义、可重用的transformation、Mapplet、Mapping、目标定义、业务组件。
13.1 Local shortcut:在同一个存储库下的不同文件夹内共享。
创建Local shortcut是在同一个Repository中从共享文件夹向其他文件夹创建共享对象的过程。
首先,创建共享文件夹。在R客户端,菜单“Folder--》Create”,勾选“Allow shortcut”。
其次,将所有公共的对象创建到共享文件夹中。
最后,创建Local shortcut,同时打开共享文件夹和其他非共享文件夹,将共享文件夹中的某个对象拖入非共享文件夹中。
在工作区双击shortcut,即可查看shortcut的详细信息。
13.2 Global shortcut:在不同存储库之间共享。
创建Global shortcut是在不同的Repository之间从Global Repository向Local Repository创建共享对象的过程。
首先,必须有一个Global Repository和一个Local Repository。
PowerCenter默认创建的Repository都是Local类型,需要将Local存储库升级为Global存储库。
在控制台(Admin Console)中,选择要升级的Local Repository,在属性Tab中编辑,将Global Repository的值由false改为true;
注意:模式必须是独占,并且该升级是不可逆的。
接着,注册Local Repository。
在控制台(Admin Console)中,选择Local Repository,选择右侧的菜单“Action--》Repository Domain--》Register Local Repository”,
在弹出框中选择Global Repository和Local Repository,并输入密码,单击OK。
打开R客户端,发现Global Repository被加入到Local Repository中,即可以在本地存储库中看到全局存储库的对象。
最后,需要在本地存储库中创建共享文件夹,在共享文件夹中创建共享对象,将共享对象拖入到本地存储库的非共享文件夹的过程中即生成Global shortcut。
注意:Global Repository需要在命名上与Local Repository进行区分。
14.session相关属性
session是mapping的可运行实例,一个mapping可以有多个session;
session提供了大量的属性和配置选项以控制、优化session的运行。
14.1 Properties Tab相关参数
1.Write Backward Compatible Session Log File:兼容日志文件的格式(文本文件、*.bin文件)
Session Log File Name:指定日志文件的文件名;
Session Log File driectory:修改日志文件默认的存放路径。
2.Enable Test Load & Number of Rows to Test:指定以较少的数据对session进行测试。
启用Enable Test Load时集成服务不会将数据写入目标表,但会执行session的全部其他逻辑。
3.Treat source rows as:指定每行数据的操作标签,默认Insert。
Insert 插入数据;
Update 更新数据;
Delete 删除数据;对于更新和删除操作,目标表必须要有逻辑主键(powercenter内定义的主键),否则不能正确执行。
Data Driven 数据驱动, 需要与Update Stragety配合使用,由Update Stragety来为每行数据指定增、删、改、拒绝中的某一种操作。
4.Rollback Transactions on Errors:集成服务(Integration Service)遇到非致命错误时也会回滚当前事务。
举例:插入10条数据时,其中一条主键冲突,不勾选该选项,9条成功,1条失败;选择该选项10条数据都被回滚。
5.Java Classpath:如果在PowerCenter中使用了第三方的Java类包或者自定义的类,需要在此指定相关的Java类包的路径,
尤其是使用Java Transformation时。
6.Session retry on deadlock:在Normal写的情况下,发生目标写死锁,PowerCenter将尝试再次向目标写入,
尝试写入的次数取决于参数Number of Deadlock Retires,这是集成服务的一个属性。
14.2 Config Object Tab相关参数
1.Contraint Base Load Ordering:PowerCenter基于主外键的约束向目标表加载数据。
2.Custom Properties:PowerCenter在遇到问题时,有时需要使用一些内部参数辅助执行或者解决遇到的问题。
例如:OptimizeODBCWrite、OptimizeODBCRead等参数,一般为非公开属性,联系售后指导。
3.Log Options:为了跟踪Session的历史运行情况,包括解决问题、性能调优、满足合规要求等。
Save Session log by:按次或者按照时间戳保存日志;
Save Session log for these runs:按次保存日志时设置的保存个数;
Session Log File Max Size: 设置Session Log文件的文件大小,默认为0,表示无限制;
对于Session Log特别大或者Real-Time Session时,最好设置Session Log文件的大小限制,单位为MB。
Session Log File Max Time Period: 设置Session Log文件的存放周期,单位为小时。
Maximum Partial Session Log Files: 设置Session Log的最大保存量,与单个文件的大小和保存周期有关;
如果超出最大保存量,保存期内最早的日志将被复写。
Write Commit Statistics Log Frequency:默认值为1,每个commit都会被写入日志。
Write Commit Statistics Log Interval: 写Commit统计的时间间隔,单位是分钟。
4.Stop on errors:即使有一行数据错误session也要停止运行,并标记为失败(可用于关键的session)。
5.Override tracing:当session发生错误时,在调试中为了跟踪session运行错误而启动的不同日志级别;
日志级别过高会影响session的性能,因此在调试完成后需要恢复到默认值。
6.On Stored Procedure ERROR:默认为Stop,即当Stored Procedure发生错误时停止整个session;
选择Continue时,即当Stored Procedure发生错误时继续运行session。
7.On Pre-Session command task ERROR:默认为Stop,即当Pre-Session command发生错误时停止整个session;
选择Continue时,即当Pre-Session command发生错误时继续运行session。
8.On Pre-Post SQL ERROR:默认为Stop,即当Pre-Post SQL发生错误时停止整个session;
选择Continue时,即当Pre-Post SQL发生错误时继续运行session。
9.Error Log Type:有三个选项(None、Database、Flat File),默认值为None。
选择Database可以将错误信息、异常信息存放到数据库中;
选择Flat File可以将错误信息、异常信息存放到文件中。
15.参数和变量
在程序中有可能变化的地方都应该尽量使用参数和变量。
15.1 Mapping参数
例子:
从EMP表中获取某天入职的人员。
1.定义参数:
参数在使用前必须先定义。
在Mapping中定义参数。
Mapping参数是在Mapping层面的参数,不能跨Mapping使用。
新建/选择一个mapping,菜单“映射--》参数和变量”,
“新建”参数,输入参数名“$$VARDATE”,数据类型“string”,长度“29”,初始值“YYYY-MM-DD HH24:MI:SS”。
2.使用参数
在Mapping中使用参数。
打开SQ--》属性页签,改写Sql Query属性:
SELECT EMP.EMPNO, EMP.ENAME, EMP.SAL
FROM EMP
WHERE EMP.HIREDATE >=to_date($$VARDATE,'YYYY-MM-DD HH24:MI:SS') and EMP.HIREDATE <to_date($$VARDATE,'YYYY-MM-DD HH24:MI:SS')+1
3.定义、使用参数文件
PowerCenter中参数通过文件传递。
先定义参数文件,再在Workflow中使用参数文件。
参数文件目录及文件名:如:c:\para\para.txt。
文件内容:
[Global]
$$VARDATE='1987-4-19 00:00:00'
新建/选择一个Workflow,菜单“工作流--》编辑”,打开“属性”页签,
在Parameter Filename属性中添加参数文件的路径信息,如:c:\para\para.txt。
日期类型为什么要设置为string呢?
当$$VARDATE参数定义为string类型时,在参数文件中定义参数值必须使用单引号。
当$$VARDATE参数定义为日期类型时,在参数文件中定义参数值不能使用单引号;
但传递后的参数值1987-4-19 00:00:00不能和日期类型的数据库字段比较,仍需要转换;
并且数据库中日期类型的长度和informatica日期类型的长度还存在差异。
4.参数文件格式
参数使用范围用[]进行标注;
参数前缀格式:$$和$。
15.2 Mapping变量
参数在文件中定义,执行中不能被修改。
变量可以在PowerCenter中被重置,即通过函数动态的修改变量值。
例子:
从EMP表中获取陆续入职的人员。
1.定义变量:与定义参数一致。
新建/选择一个mapping,菜单“映射--》参数和变量”,
“新建”参数,输入参数名“$$VARDATE”,数据类型“string”,长度“29”,汇总“Max”,初始值“1900-01-01 00:00:00“。
汇总分为“Max”和“Min”,“Max”可以获取上次运行的参数$$VARDATE的最大值;
当设置为“Max”后,可以使用SetMaxVariable函数,设置为“Min”则不可以使用SetMaxVariable函数。
2.编辑SQ:使用变量
打开SQ--》属性页签,改写Sql Query属性:
SELECT EMP.EMPNO, EMP.ENAME, EMP.HIREDATE, EMP.SAL
FROM
EMP
where EMP.HIREDATE>to_date('$$VARDATE','YYYY-MM-DD HH24:MI:SS')
为了支持continous运行,使用大于号(>)获取上次运行结束到当前最新的全部数据。
3.更新变量:使用f(x)
增加表达式转换组件,输入HIREDATE,输出OUT_VARDATE,
表达式为:SETMAXVARIABLE($$VARDATE,TO_CHAR(HIREDATE,'YYYY-MM-DD HH24:MI:SS'))
-- 再增加表达式转换组件,输入OUT_VARDATE,输出HIREDATE,并链接到目标表中,
-- 表达式为:TO_DATE(OUT_VARDATE,'YYYY-MM-DD HH24:MI:SS');
在目标表中增加HIREDATE_S字段,将OUT_VARDATE链接到目标表中;
从SQ中链接其他字段到目标表中。
注意:
PowerCenter为了执行优化的目的,没有被下游使用的端口将不被计算。
即如果不将计算后的HIREDATE链接到目标表,则变量不会被更新为最大值。
4.测试
制作工作流(不需要使用参数文件)并运行,session使用了变量的初始值“1900-01-01 00:00:00“。
运行完成后,选中Session右键--》查看永久值,可以看到变量值已进行了更新;
给EMP再增加数据,再次运行工作流新增加的数据被同步到目标表,变量值再次更新。
5.变量操作函数
SetMaxVariable($$Variable,value) 从value和$$Variable中选择最大值更新$$Variable;
SetMinVariable($$Variable,value) 从value和$$Variable中选择最小值更新$$Variable;
SetVariable($$Variable,value) 直接使用value更新$$Variable;
SetCountVariable($$Variable) 根据session运行时行标签更新$$Variable,
当行标签为Insert时变量值加1,当行标签为Delete时变量值减1,当行标签为Update时变量值不变。
15.3 系统/session参数与变量
参数和变量都配置在Session中,如$PMTargetFileDir、$PMBadFileDir等。
这些变量有哪些、在哪里定义、是否可以修改呢?
在控制台(Admin Console)中打开"集成服务--》进程“ 可以看到所有的参数,
修改后将影响集成服务下的所有session,这些参数被称为系统参数。
$PMRootDir E:\Informatica\9.6.1\server\infa_shared
$PMSessionLogDir $PMRootDir/SessLogs
$PMBadFileDir $PMRootDir/BadFiles
$PMCacheDir $PMRootDir/Cache
$PMTargetFileDir $PMRootDir/TgtFiles
$PMSourceFileDir $PMRootDir/SrcFiles
$PMExtProcDir ./ExtProc
$PMTempDir $PMRootDir/Temp
$PMWorkflowLogDir $PMRootDir/WorkflowLogs
$PMLookupFileDir $PMRootDir/LkpFiles
$PMStorageDir $PMRootDir/Storage
PowerCenter还提供了大量session级别的参数,根据特性分为:
用户定义的session参数(User-Defined Parameter);
内置的session参数(Build-in Parameter)。
1.用户定义的session参数
参数类型 命名规范 描述
Session Log File $PMSessionLogFile 定义Session Log文件名
Number of Partitions $DynamicPartitionCount 定义Session Partition的数量
Source File $InputFile* 定义Source File文件名
Lookup File $LookupFile* 定义Lookup File文件名
Target File $OutputFile* 定义Target File文件名
Reject File $BadFile* 定义Reject File文件名
Database Connection $DBConnection* 定义关系型数据库连接的连接名,包括源、目标、Lookup和存储过程等。
External Loader Connection $LoaderConnection* 定义Loader连接的连接名
FTP Connection $FTPConnection* 定义FTP连接名
Queue Connection $QueueConnection* 定义Queue连接名
Application Connection $AppConnection* 定义Application连接名
General Session Parameter $Param* 通用Session参数定义,可以通过此参数定义如:table owner name、
table name prefix、FPT file or目录名、lookup cache file name prefix、email address等
除*外其余不能修改,*为用户自定义部分,可根据需要替换为实际的名称。
参数需要定义在参数文件中,并为参数赋值。
使用场景:
场景1:项目中有开发、测试、生产3个环境,分别使用不同的数据库,部署过程需要修改大量的mapping和session的数据库连接,可以将数据库连接作为参数。
场景2:批量目录修改的问题,对目录使用参数,仅修改参数文件即可。
2.内置的session参数
session内置的参数可以帮助开发人员在Post-Session shell commands、sql commands和E-mail中获取session运行时状态或者信息。
参数类型 命名规范
Folder Name $PMFolderName
Integration Service Name $PMIntegrationServiceName
Repository Service Name $PMRepositoryServiceName
Repository User Name $PMRepositoryUserName
Session Name $PMSessionName
Session Run Mode $PMSessionRunMode
Source Number of affected Rows $PMSourceQualifierName@numAffectedRows
Source Number of applied Rows $PMSourceQualifierName@numAppliedRows
Source Number of rejected Rows $PMSourceQualifierName@numRejectedRows
Source table name $PMSourceName@TableName
Target Number of affected Rows $PMTargetName@numAffectedRows
Target Number of applied Rows $PMTargetName@numAppliedRows
Target Number of rejected Rows $PMTargetName@numRejectedRows
Target table name $PMTargetName@TableName
Workflow name $PMWorkflowName
Workflow run ID $PMWorkflowRunId
Workflow run instance name $PMWorkflowRunInstanceName
15.4 workflow/worklet变量
例子:
将session的输出文件写入对应日期的文件夹,如果文件夹不存在,则自动创建文件夹。
1.创建mapping,目标为文件
源为EMP表,目标为EMP文件。
”目标--》创建“,输入目标表名称,数据库类型选择”Flat File“后点”创建“,维护列信息。
2.创建workflow,并定义变量
”工作流--》创建“,输入工作流名称,点”变量”页签--》“新增”,输入变量名"$$FOLDER_NAME"及类型“nstring”
3.创建任务并,使用变量生成文件夹
"任务--》创建",输入任务名称,创建,选择mapping,完成;
双击编辑任务--》映射页签--》目标表--》属性栏:勾选create target Directory,Output file directory设置为“$PMTargetFileDir\$$FOLDER_NAME”
4.创建Assignment为变量赋值
拖一个分配(“Assignment”)并双击打开--》表达式页签--》新增:"$$FOLDER_NAME=to_char(sysdate,'yyyy-mm-dd')"--》应用、确定。
链接“启动”--》“分配”--》“Session”,并启动工作流。
5.监控工作流并检查目录和文件的生成情况。
E:\Informatica\9.6.1\server\infa_shared\TgtFiles\2018-04-05\emp_file1.out
15.5 Local变量
Local变量用于比较相邻的两条记录的某一个字段的值。
如计算相邻记录的某个字段的差,或者比较相邻记录的某个字段的值是否相等。
例子:
超市需要掌握(同一)客户到超市采购的时间间隔(即两次采购的时间差)。
采购表如下:
create table s_order (
o_id number(16) not null primary key,
ac_id number(8) not null,
o_amount number(10,2),
o_date date
);
目标表如下:
create table t_order (
o_id number(16) not null primary key,
ac_id number(8) not null,
o_amount number(10,2),
o_date date,
day_diff number(5)
);
mapping如下:
源表--》SQ--》f(x)--》目标表
SQ内需要改写sql,按账户和日期进行排序:select * from s_order order by ac_id,o_date
f(x)内需要定义变量记录上次和本次的账户和日期,
如果账户相同(上次账户=本次账户),则day_diff赋值为上次日期减本次日期;
如果账户不同(上次账户!=本次账户),则day_diff赋值为0。