DSQL是Teradata数据库跑批程序,是数据仓库集市加工数据最基本最主要的作业程序。随着业务量的增加,室内集市中的DSQL作业数量也早就达到了千位数,并在不断增长。如果生产上DSQL程序报错,不仅浪费和占用服务器资源,也影响下游作业的运行时效,而且增加了后期上线后的维护成本。
因此,每次上线前的统一测试管理规范,不依赖开发人员的自觉测试,保证集市这么多作业正常稳定运行,显得很有意义。
下面简单介绍用python实现自动DSQL跑批程序的测试方案。
准备工作
本地配置DSQL执行环境。
把准备上线的集成包清单对象,DSQL脚本下载下来。
另外需要首先载入开发人员编号,及对应的姓名,方便后续定位得到作业负责人。这里保存在一个字典中。
接着读取作业清单对象,保存DSQL作业清单,及其负责人编号。示例代码如下。
这样我们获取了作业清单列表,在字典的kyes中,其值对应作业负责人姓名。
跑批DSQL脚本
有了作业清单,以及下载好了的DSQL脚本文件。我们可以循环执行这些脚本了。单独的测试一个作业,可以通过如下的cmdline命令放在windows的命令行中执行。
‘dsql -c’后面是配置文件信息,包含teradata数据的登录信息密码。’-f’后面是DSQL脚本的路径。然后后面是实例化日期,及保存日志文件的路径。
通过subprocess模块中Popen()函数,执行每一个DSQL脚本。
下面定义一个函数,根据输入的DSQL作业名,跑批DSQL脚本。
循环遍历上述得到的作业名就可以跑批所以的DSQL作业。
如果作业没有错误,代码中的输出为:
如果程序报错,会输入如下类似信息:
通过查找字符串Failure确定是否成功还是失败。
对月跑作业处理
日跑作业,每天都会跑,一般都会被测试到。月作业每个月只跑一次,或固定某一些天,一般都是在月末,做每个月的月统计。统一设定月末日期,很多作业都能测试到。
但是还有少量作业,不是月末跑数。所以设定的固定月末日期,这样的DSQL脚本就会在程序中间跳出,达不到测试目的。之前就放过了这样的DSQL作业错误到生产上,产生报错。
当然可以从DSQL脚本中做字符串解析判断DSQL作业的运行时间。但是开发人员控制运行日期的位置不固定,方式也不统一。解析起来很困难。
如果程序从中间跳出,生成的日志一般只有原来DSQL脚本的一半大小。根据这个信息可以通过对比日志文件和原程序文件的大小情况,来判断是否是非月末跑数。
这样能够实现对月跑作业的测试。
保存错误
对作业出现的错误,要做自动化的记录。这里写入mysql数据库。
可以统计经常出错点,规避警示后面再犯。也通过邮件周,月,年通报,约束开发人员,使其上线前能认真测试。
在Mysql数据库中创建如下的表,由于数据部是太多,没有设置主键,索引。记录如下信息
作业名称
作业类型
负责人
运行日期
错误代码
错误等级
错误内容
这个表也对依赖关系填写,表清理信息填写的错误等做记录。这里不做讨论。
定义写入数据库的函数如下:
连接起来
主程序对作业列表做一个循环。
这里只给出示例代码,正确运行还需要在本机调整。
最后致谢公司同事周斌,原来运行cmd命令用的os.Popen()不能读取执行状态,需要读DSQL运行日志来判断是否有错误。开始尝试subprocess.Popen()不能获取执行状态。
欢迎关注
让数据实现价值
领取专属 10元无门槛券
私享最新 技术干货