zoukankan      html  css  js  c++  java
  • Informatica_(4)工作流

    三、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:parapara.txt。
    文件内容:
    [Global]
    $$VARDATE='1987-4-19 00:00:00'
    新建/选择一个Workflow,菜单“工作流--》编辑”,打开“属性”页签,
    在Parameter Filename属性中添加参数文件的路径信息,如:c:parapara.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:Informatica9.6.1serverinfa_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:Informatica9.6.1serverinfa_sharedTgtFiles2018-04-05emp_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。

  • 相关阅读:
    (连通图 模板题 无向图求桥)Critical Links -- UVA -- 796
    (连通图 模板题)迷宫城堡--hdu--1269
    (连通图 模板题 无向图求割点)Network --UVA--315(POJ--1144)
    (线段树 区间合并更新)Tunnel Warfare --hdu --1540
    (线段树 区间查询更新) Can you answer these queries? -- hdu--4027
    (线段树)Balanced Lineup --POJ --3264
    (线段树) Count the Colors --ZOJ --1610
    (线段树)Just a Hook -- hdu -- 1689
    All about <httpRuntime targetFramework>
    ASP.NET 4.0升级至ASP.NET 4.5需要注意的地方 【转】
  • 原文地址:https://www.cnblogs.com/BradMiller/p/9280001.html
Copyright © 2011-2022 走看看