Datastage 循环调度作业实例

版本: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”类型的循环。

选择“数字”时,该页面包含以下字段:

  • 初始值。计数器的初始值。
  • 增量值。计数器的增量值。
  • 最终值。最终计数器值。

您可以对任何一个字段使用参数,并在运行时指定实际值。可单击“浏览”按钮以打开“外部参数帮助程序”,它显示了此时在作业序列中可用的所有参数。在该字段中输入的参数需要使用井号(#)来定界。从“外部参数帮助程序”选择的参数都将自动括在两个井号之间。

选择“列表”时,该页面具有不同的字段:

  • 定界值。输入列表,使用选定的定界符分隔其中的每一项。
  • 定界符。指定将用来分隔列表项的定界符。可从以下几项中进行选择:
    • 逗号(缺省值)
    • 空格
    • 其他(在文本字段中输入所需字符)

相关作业

打赏

觉得本站还不错就打赏一下吧!

支付宝扫一扫打赏

微信扫一扫打赏

本站所有内容均来自于互联网自动采集,如无意侵犯了您的权利,请您发送邮件到admin@chinaetl.com.cn联系管理员删除。
ChinaETL » Datastage 循环调度作业实例