版本:IBM InfoSphere DataStage V11.3.1
操作系统:linux redhat 6.4
需求场景:
最近数据库在做迁移,同时需要对新迁移程序进行初始化。初始化跑批作业由存储过程调用执行,同时需要输入特定的参数。
如果基于目前开发DS作业,会遇到如下问题:
需要手动去输入参数,同时也需要等该作业跑完之后,在输入下一个参数去跑。这样我们会耗费时间去不停的输入参数,同时如果忘记前一个参数会造成数据错误。
当然主要还是想自动化。所以需要开发一个,支持循环调度,同时可以获取不同参数的作业。
控件讲解:
支持循环,Sequence Job 通过 StartLoop Activity Stage 和 EndLoop Activity Stage 提供了循环的功能。循环变量可以是基于起始值,结束值和步长的整数循环,也可以基于给定的列表进行循环,还可以把这些循环中的临时变量传递给每个具体的循环步骤。在 StartLoop Activity Stage 和 EndLoop Activity Stage 之间,可以加入任意多个的
实现方式:
数据库准备:
创建存储过程rpoc_m_act_loan_out_m 需要输入参数 i_date
begin
-- Call the procedure
rpoc_m_act_loan_out_m(i_date => :i_date);
end;
开发Sequence Job :
在StartLoop_Activity_1 设置如下:
RPOC_M_ACT_LOAN_OUT_M 引用变量,设设置如下:
查看日志:
DS会把这八个参数20120228,20130630,20130731,20130831,20130930,20131031,20131130,20131231分为八个作业来进行依此调度。可以从日志中得到
Message: CopyOfQ_HGZ_VJK_WBFK_GZB..JobControl (@Coordinator): Summary of sequence run
14:04:06: Sequence started
14:04:06: StartLoop_Activity_8 loop iteration 1 started
14:04:06: Job_Activity_10 (JOB RPOC_M_ACT_LOAN_OUT_M) started
14:04:08: Job_Activity_10 (JOB RPOC_M_ACT_LOAN_OUT_M) finished, status=1 [Finished OK]
14:04:08: StartLoop_Activity_8 loop iteration 2 started
14:04:08: Job_Activity_10 (JOB RPOC_M_ACT_LOAN_OUT_M) started
14:04:11: Job_Activity_10 (JOB RPOC_M_ACT_LOAN_OUT_M) finished, status=1 [Finished OK]
14:04:11: StartLoop_Activity_8 loop iteration 3 started
14:04:11: Job_Activity_10 (JOB RPOC_M_ACT_LOAN_OUT_M) started
14:04:14: Job_Activity_10 (JOB RPOC_M_ACT_LOAN_OUT_M) finished, status=1 [Finished OK]
14:04:14: StartLoop_Activity_8 loop iteration 4 started
14:04:14: Job_Activity_10 (JOB RPOC_M_ACT_LOAN_OUT_M) started
14:04:17: Job_Activity_10 (JOB RPOC_M_ACT_LOAN_OUT_M) finished, status=1 [Finished OK]
14:04:17: StartLoop_Activity_8 loop iteration 5 started
14:04:17: Job_Activity_10 (JOB RPOC_M_ACT_LOAN_OUT_M) started
14:04:20: Job_Activity_10 (JOB RPOC_M_ACT_LOAN_OUT_M) finished, status=1 [Finished OK]
14:04:20: StartLoop_Activity_8 loop iteration 6 started
14:04:20: Job_Activity_10 (JOB RPOC_M_ACT_LOAN_OUT_M) started
14:04:24: Job_Activity_10 (JOB RPOC_M_ACT_LOAN_OUT_M) finished, status=1 [Finished OK]
14:04:24: StartLoop_Activity_8 loop iteration 7 started
14:04:24: Job_Activity_10 (JOB RPOC_M_ACT_LOAN_OUT_M) started
14:04:27: Job_Activity_10 (JOB RPOC_M_ACT_LOAN_OUT_M) finished, status=1 [Finished OK]
14:04:27: StartLoop_Activity_8 loop iteration 8 started
14:04:27: Job_Activity_10 (JOB RPOC_M_ACT_LOAN_OUT_M) started
14:04:30: Job_Activity_10 (JOB RPOC_M_ACT_LOAN_OUT_M) finished, status=1 [Finished OK]
14:04:30: EndLoop_Activity_9 loop finished
14:04:30: Sequence finished OK
控件说明:
StartLoop Activity 阶段标记循环的起点并对其进行了定义。
除了“常规”和“触发器”页面,StartLoop Activity 的“属性”对话框还包含 StartLoop 页面。
您可具有数字循环(可在其中定义计数器、限制和增量值),或具有列表循环(可在其中对列表中的每一项执行一次循环)。您可以将当前计数器值作为参数(格式为stage_label.$Counter)传递到循环中的阶段,其中 stage_label 是“图”窗口中给出的 StartLoop Activity 阶段的名称。使用 EndLoop Activity 阶段可标记循环的末尾,它具有一条连接到其相应 StartLoop Activity 阶段的链接。
如果需要,那么可以嵌套循环。
在 StartLoop 页面中定义循环设置。该页面包含:
- 循环类型。选择“数字”可实施“For...Next”类型的循环,选择“列表”可实施“For...Each”类型的循环。
选择“数字”时,该页面包含以下字段:
- 初始值。计数器的初始值。
- 增量值。计数器的增量值。
- 最终值。最终计数器值。
您可以对任何一个字段使用参数,并在运行时指定实际值。可单击“浏览”按钮以打开“外部参数帮助程序”,它显示了此时在作业序列中可用的所有参数。在该字段中输入的参数需要使用井号(#)来定界。从“外部参数帮助程序”选择的参数都将自动括在两个井号之间。
选择“列表”时,该页面具有不同的字段:
- 定界值。输入列表,使用选定的定界符分隔其中的每一项。
- 定界符。指定将用来分隔列表项的定界符。可从以下几项中进行选择:
- 逗号(缺省值)
- 空格
- 其他(在文本字段中输入所需字符)
相关作业