TASKCTL技术进阶之《三招让调度元信息更精简》

浏览: 2237

       本人在之前某个数据仓库项目实施中有机会接触到TASKCTL调度软件。经过一个多月的使用,目前还算得上小有心得。现总结了一点小经验分享给大家,希望能为使用TASKCTL的朋友带来方便。好了,直接点进入正题。

       从官方文档了解到,TASKCTL采用“代码开发”的方式来设计调度流程(也称为调度元信息),这也是该软件的亮点之一。既然所谓“代码设计”,当时也就有“缺省、继承、引用(代码复用)”等编程概念......

招式一:“缺省”

       缺省是对于某种任务类型来说的,比如通过admin设定任务类型的时候,我们可以给dsjob(datastage任务类型)设置缺省环境参数为$(ProjectName),入口参数为$(WorkDate),如下图所示:

QQ图片20151029172300.png

       给任务类型设定好缺省值后,就可以在设计"dsjob_new"任务的时候,而不必为每个dsjob_new任务都设置exppara和para属性了。

  <dsjob_new>
<name>Load_ODS_Table1</name>
<progname>Import_ODS_Table1</progname>
<exppara>ds_project1</exppara>
<para>20110101</para>
</dsjob_new>
<!-- 使用job的缺省属性后,减少了expprar和para这两行代码 -->
<dsjob_new>
<name>Load_ODS_Table2</name>
<progname>Import_ODS_Table2</progname>
</dsjob_new>
<dsjob_new>
<name>Load_ODS_Table3</name>
<progname>Import_ODS_Table3</progname>
</dsjob_new>

注:$(ProjectName)和$(WorkDate)可以在流程运行时再确定值


招式二:“继承”

     XML的特性大家都知道,本质上是一棵树型结构,因此TASCKTL的继承就在树型结构上作文章了。简单一句话就是“子级继承父级,并且继承具有传递性和就近性”,举个栗子:

  <parallel>
<name>MainModul_ParallelNode0</name>
<para>20110101</para>
<dsjob_new>
<name>Load_ODS_Table1</name>
<progname>Import_ODS_Table1</progname>
</dsjob_new>
<serial>
<name>MainModul_SerialNode0</name>
<para>20110102</para>
<dsjob_new>
<name>Load_ODS_Table2</name>
<progname>Import_ODS_Table2</progname>
</dsjob_new>
<dsjob_new>
<name>Load_ODS_Table3</name>
<progname>Import_ODS_Table3</progname>
</dsjob_new>
</serial>
</parallel>

       如以上代码所示,当在parallel节点设置了para属性值后,这个节点下所有节点都继承该值(传递性)。但是如果在serial节点下另添一个新值,serial节点下的任务节点根据“就近性”优先继承新值。TASKCTL的任务属性根据“缺省”->“继承”->“自定义”的方式优先级依次递增。根据你的业务逻辑来选择合适的特性是个不错的主意。另外TASKCTL还支持主--子模块间的继承,这里就不再举例了,感兴趣的话,大家可以亲自动手试试吧。


招式三:“引用(代码复用)”

       我们在编程的时候,通过考虑到代码复用的情况。在TASKCTL中可以通过引用子流程的方式来达到代码复用的目的,看下面的栗子吧:

<serial>
<name>MainModul_rootnode</name>
<flow>
<name>flow1</name>
<progname>project1_Flow5</progname>
<para>startdatetime='20110101010101'</para>
</flow>
<flow>
<name>flow2</name>
<progname>project1_Flow5</progname>
<para>startdatetime='20110202020202'</para>
</flow>
</serial>

      在这里,我们只设计了一个业务子流程"project1_Flow5"。然后在主流程中,通过传入不同的参数值多次引用,得到不同的处理结果。

      通过合理运用上面三个技巧,能让调度元信息更加精简,结构也更加简单明了。好了,这次就为大家介绍到这里,下次会给大家分享更加实用的东东。

推荐 1
本文由 凯瑞 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册