------------------- 来源于 https://ask.hellobi.com/blog/xiii/2254 -------------------
本人在之前某个数据仓库项目实施中有机会接触到TASKCTL调度软件。经过一个多月的使用,目前还算得上小有心得。现总结了一点小经验分享给大家,希望能为使用TASKCTL的朋友带来方便。好了,直接点进入正题。
从官方文档了解到,TASKCTL采用“代码开发”的方式来设计调度流程(也称为调度元信息),这也是该软件的亮点之一。既然所谓“代码设计”,当时也就有“缺省、继承、引用(代码复用)”等编程概念......
招式一:“缺省”
缺省是对于某种任务类型来说的,比如通过admin设定任务类型的时候,我们可以给dsjob(datastage任务类型)设置缺省环境参数为$(ProjectName),入口参数为$(WorkDate),如下图所示:
给任务类型设定好缺省值后,就可以在设计"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"。然后在主流程中,通过传入不同的参数值多次引用,得到不同的处理结果。
通过合理运用上面三个技巧,能让调度元信息更加精简,结构也更加简单明了。好了,这次就为大家介绍到这里,下次会给大家分享更加实用的东东。
[最后编辑于 2017-11-22 10:46 ]
请登录后评论~