变量信息
总控信息中定义的变量属于流程私有变量,主要应用于模块代码。变量信息主要包括:变量名称、变量值、变量类型、是否加密等信息。
变量名称
变量名称是一个流程内所有私有变量的关键索引信息,使用时注意以下几点:
- 唯一性:一个流程内,私有变量名称是唯一的,不能重复;
- 长度:变量名称长度不能超过 50 个字符;
- 输入限制:名称不能数字开头,不能包含特殊字符,如:!@|#*...等;
变量值
在定义私有变量时,必须确定初始变量值。在整个调度应用过程,该值可能会根据用户的行为进行修改。比如业务日期类变量。
长度:变量值长度不能超过 200 个字符
变量类型
TASKCTL 调度平台变量类型主要分三类:日期类(date)、普通类(comm)、常量(const)。
- 日期类:日期类变量指与自然日期或业务日期相关的变量。一般情况下, 此类变量在调度应用过程会随不同调度批次的变化而变化。
- 普通类:普通类变量是相对日期类而言的。一般情况下,普通变量不会随不同调度批次的变化而变化,比如作业程序经常用的数据库用户、密码变量等。但是当环境变化后,有可能变量值会改动,如脚本路径。
- 常量类:通常设定值后,就不能被更改了。比如一些名称标识等。
是否加密
流程变量可能会涉及到一些系统的敏感信息,比如:用户密码,为了信息的安全性,TASKCTL 调度对变量增加的是否加密属性,对于加密的变量值,用户是不可见的。
在流程总控文件中,该属性 Y 代表加密;N 代表不加密。
关于变量应用范围
TASKCTL 的一个流程除了使用自身定义的私有变量以外,流程还可以使用工程变量(v7.0 )和平台常量。
与私有变量主要区别在于变量应用范围不同:
- 私有变量:只能应用于流程自身。
- 工程变量:可以应用工程下的所有流程
- 平台常量:应用于整个平台下的所有流程
流程模块代码
模块是流程核心信息的基本组织单位,其信息既是通过 XML 语言进行描述,同时,以 XML 语言描述的模块文本又是直接面向客户设计应用,因此,TASKCTL 为了信息组织更灵活、更简单、更易懂,借鉴了相关程序语言的设计思想,使模块信息即有一定的规则,又有一定的语法特征。
代码关键字
模块代码采用 XML 描述时,会涉及到很多 XML 标签关键字,用户对这些 XML 标签的了解,是流程模块代码设计的基本条件。
模块代码关键字如下表所示:
上表列举了模块代码各种 XML 标签。标签主要分节点标签与节点属性标签两大类,节点标签又分组节点与作业节点,作业节点又分缺省作业与自定义作业, 所有这些类型标签分类结构如下图所示:
节点属性标签
节点属性标签主要用于描述 TASKCTL 流程中各种节点,比如基本属性以及一些控制属性。在实际应用中,各种属性对不同节点的有效性不一致,比如程序属性对组节点无效。
组节点标签
组节点属于流程节点,主要包括串行节点与并行节点,是流程的基本控制节点。
系统缺省作业标签
系统缺省作业属于作业节点,是 TASKCTL 流程节点树状关系模型中的叶节点,代表一个作业,只是这种作业属于 TASKCTL 中内置逻辑作业,它们分别通过固定标签 flow、include、nulljob、begin、end 来表示。
自定义作业类型标签
自定义作业指 ETL 中用户开发的各种作业,比如:shell、datastage 类作业等。对此类作业标签关键字是由用户自定义确定。比如,对于 shell 脚本作业,我们既可以用’sh’表示,也可以用’shell’来表示。在实际应用中,自定义作业类型标签是通过管理平台定义的,TASKCTL 为了方便用户,也预设了一些常用自定义作业,如:ftpget、filewatch、selfmsg 等作业。
模块代码基本特征
模块代码是流程核心信息基本单位,它主要具备以下特征:
固定基本结构
为了统一模块的格式以及一些技术控制,TASKCTL 对模块采用统一的固定基本结构。
该固定结构为:1、根节点始终为串行节点;2、二级节点第一个节点始终为开始节点;二级节点最后一个节点始终为结束节点。如下图所示:
这种不变的结构在代码中体现为:
属性继承与缺省
模块代码设计时,我们会设计大量的串并节点与作业节点,而每个节点都会存在很多属性,为了设计方便与代码简洁,TASKCTL 基于流程节点特殊的树状特征,引入了各种节点的属性继承与缺省机制。
- 属性继承:属性继承指下级节点继承上级节点的属性。下级节点只要不显示定义相关属性,下级节点自动继承上级节点的属性。
- 属性缺省:属性缺省指节点未显示定义某属性,又不能有效继承时,采用系统属性缺省值。
在实际应用中,对于继承与缺省我们必须要注意以下几点:
1.继承与缺省优先级问题
在模块节点树中,继承的优先级比缺省高。当一个节点上级节点相关属性不是缺省值,且下级节点没显示定义时,首先是继承,其次才是采用缺省值。
2.不是所有属性都存在继承与缺省特征
一个流程作业或组节点属性较多,但并不是所有属性都具有继承与缺省特征, 比如:节点 name 属性,该属性即不能继承也无缺省,用户必须显示定义;对于属性继承、缺省与具体属性关系如下表所示:
继承的有效范围
子级模块能继承父级模块的属性,子流程不能继承父级流程的属性
变量
变量是流程模块代码的基本特征,它与传统程序设计中的变量概念有一定区别,TASKCTL 中流程变量的本质是宏替换,目的是为了增加流程代码设计的可移植性与可维护性。
以下是一个变量应用实例:
变量定义
对于流程变量的定义,变量不在模块代码中定义,而是在流程总控文件中定义
变量使用
在模块代码中我们用特殊格式表示变量,即用’$’加括号的方式表达,如下所示:
在整个模块代码设计中,变量并不是应用于所有属性,让所有属性均能实现宏替换,能够使用变量的属性主要包括以下五种属性:
- progname:程序名称
- prevshell:前置脚本
- nextshell:后置脚本
- para:作业程序运行参数
- exppara:作业程序运行环境参数
- agentid:作业程序代理节点名称
- hostuser:远程执行用户
- condition:自定义控制策略
- ignoreerr:错误忽略条件
- splitcount:分片作业个数
- cyclebreak:循环中断条件
流程缺省变量
模块代码除了可以使用自身私有变量以及平台常量以外,还可以使用系统缺省变量。
缺省变量主要包括:
- cycle:当前循环值,循环值从 1 开始;
- ctlid:流程 ID,在实际应用中,调度平台会自动给每个流程分配一个 ID 号;
- renum:重做次数,对于一些错误作业,平台会不断重调,第一次运行前为 0,第一次运行完后为 1,当错误后第二次运行前为 1,当错误后第二次运行该值为 2,以此类推;