DataWorks熟能生巧系列直播第三期:DataWorks调度参数配置-阿里云开发者社区

开发者社区> DataWorks> 正文
登录阅读全文

DataWorks熟能生巧系列直播第三期:DataWorks调度参数配置

简介: 本系列文章为DataWorks钉钉大群内熟能生巧系列直播的文字版,基本涵盖了直播中讲解到的大部分内容,大家可以学习或者Mark一下,有需要的时候再来回顾。本系列直播内容由DataWorks技术支持团队出品,运营团队整理,大部分是DataWorks用户实际使用中遇到的频率较高的问题,希望对大家有一定帮助。

本篇文章主要介绍了DataWorks调度参数的两种分类——系统内置变量和自定义参数,并介绍了各参数的使用和测试方式、注意事项和常见场景,实操演示了参数在各场景下的使用情况

分享人:DataWorks技术支持团队


我们在开发者社区学习路线里有发布一个DataWorks的学习路线,里面包含了入门讲解和熟能生巧系列的直播内容,大家可以去学习一下,需要主账号登陆学习哦:https://developer.aliyun.com/learning/course/81


一、调度参数的分类和使用


1、分类

调度参数分为系统内置变量和自定义参数两类,其区别在于能否在代码中直接使用。系统内置变量可以直接使用,不需要赋值。自定义参数需要在代码中自定义一个变量,然后在参数配置区给这个变量赋值,赋值支持四种形式的值:${…}、$[…]、系统内置参数(例如$bizdate)、常量。

幻灯片3.PNG

2、系统参数

首先是系统参数配置,取值和格式如下,包括业务时间和定时时间,业务时间等于定时时间减一天,也就是业务时间在定时时间前一天。另外,业务时间精确到天,取值与自定义参数${yyyymmdd}一致,定时时间精确到时分秒取值与$[yyyymmddhh24miss]一致。

幻灯片6.PNG

3、自定义参数

然后是自定义参数。先看大括号格式 ${…},大括号格式可以精确到天。并且如果只需取到月份的话,需要用大括号形式。

幻灯片8.PNG

中括号格式如下图,是可以精确到时、分、秒的。

幻灯片9.PNG

然后是系统内置参数,用得比较多的是后面四个,$bizdate可以取到天,$cyctime可以取到时分秒,$gmtdate也精确到天,最后$bizmonth取到月份。

幻灯片10.PNG

4、使用示例

如下图,这里在代码中可以直接使用${bdp.system.cyctime}和${bdp.system.bizdate},不用在右侧调度配置参数栏中赋值,而自定义参数需要在代码中自定义一个变量名,写作${var1}形式表示变量var1,右侧参数配置中需要用var1=$bizdate(系统变量形式)或者var1=${yyyymmdd} (自定义参数形式)来给var1变量赋值。另外,只有${bdp.system.cyctime}和${bdp.system.bizdate}这两个系统内置变量可以直接在代码中使用,代码中是不能直接使用系统内置参数的(比如$bizdate),如果想要代码中使用${bizdate},仍然需要在右侧参数配置处赋值bizdate=$bizdate(和var1是一样的)。

image.png

ODPS SQL节点使用示例如下图。两个系统变量可以在代码中直接使用,而自定义参数需要先在代码中定义变量名,然后在右侧参数配置里给变量赋值。。

幻灯片12.PNG

数据集成节点使用示例如下,与ODPS SQL节点一致,注意如果在分区信息中配置pt=${bizdata},那需要在右侧参数配置中配置bizdata=$bizdate:

幻灯片13.PNG

Shell节点使用示例也一样,但Shell节点中的变量不允许自定义命名,只能以$1、$2、$3…来命名,当参数达到10个后,需要用大括号,如${10}。

幻灯片14.PNG

PyODPS节点也一样,但在使用自定义参数的时候,为了避免侵入代码,可以在全局变量中增加一个args的字典对象,调度参数可以在此获取。

幻灯片15.PNG

5、调度参数的注意事项

DataWorks有三种运行方式,运行、高级运行和开发环境冒烟测试,这里有几个需要注意的地方。

 

选择运行,只会在第一次弹框时给当前的变量赋值常量。如果修改了代码中变量名是不会继续弹框给新变量赋值。选择高级运行,每次都会弹框给当前变量赋值。如果您变更了代码中的变量,或者需要重新为变量赋值,请务必使用高级运行。运行和高级运行都只能给参数赋值常量,用于测试。如果您需要测试实际调度时的参数替换,请使用开发环境冒烟测试。

 

开发环境冒烟测试会根据业务时间替换调度参数;若修改了调度参数赋值,请务必先保存提交,再使用开发环境冒烟测试。

幻灯片17.PNG

需要注意的是参数赋值语句中,空格仅用于分离多条赋值语句,即多个自定义变量赋值语句可以用空格分离(下图4处),但单个赋值语句内不支持 使用空格(下图1、2、3处)。另外,大括号可以取任务的业务时间,最小粒度是天,中括号取定时时间,可以精确到时分秒。

幻灯片18.PNG


6、使用调度参数的常见场景

场景一:如何处理表的分区格式中需要空格的情况。如果要在时间中带一个空格,需要用两个参数来做,一个参数取年月日,一个参数取时分秒,然后在代码里用一个空格去拼接两个参数,这样就可以实现替换的值中带一个空格。

幻灯片20.PNG

场景二:跨天调度参数替换。

 

如何处理小时任务0点运行的实例,计算结果变为当天的23点,实际应当是前一天的23点的情况?

 

问题描述:

在代码中表的分区为pt=${datetime} ${hour},希望执行时获取上个小时的数据。使用两个自定义变量参数datetime=$[yyyymmdd]、hour=$[hh24-1/24]可以满足需求。但是0点运行的实例,计算结果会变成当天的23点,实际应当是前一天的23点。

 

解决方法:

 

您可以修改参数的计算公式,修改datetime为$[yyyymmdd-1/24],hour的计算公式仍然是$[hh24-1/24]。计算结果如下,即可满足需求:

如果一个实例的定时时间是2015-10-27 00:00:00,减1小时便是昨天,则$[yyyymmdd-1/24]的值是20151026、$[hh24-1/24]的值是23。

如果一个实例的定时时间为2015-10-27 01:00:00的实例,减1小时还是今天,则$[yyyymmdd-1/24]的值是20151027、$[hh24-1/24]的值是0。

幻灯片21.PNG

二、实操演练


1、内置参数

先针对两个参数来看它的替换情况,bizdate是业务时间,cyctime是定时时间,也就是具体时间。我们选择开发环境冒烟测试来看这两个参数的替换情况。每次修改完务必先保存、提交,再点击开发环境冒烟测试。

image.png

我们选择业务时间假设是10月1号,那bdp.system.bizdate的取值应该是2020年10月1号,那bdp.system.cyctime的取值应该是2020年10月2号,它的小时分钟应该全是0。接着我们看一下它实际运行的结果,如下图,冒烟测试后日志中可以看到替换的值,业务时间20201001没有问题。

image.png

然后cyctime的参数值为20201002000000。替换出来也是对的

image.png


2、自定义参数大括号格式

接下来看一下自定义参数大括号的这种格式。当前取了5个参数,bizdate、年月日、年份、月份和天,业务日期还是选择2020年10月1号。

image.png

如下图,冒烟测试后日志中可以看到bizdate等于20201001,var1取年月日,值和bizdate一致,var2取了年份,var3取月份,var4取日期,取值都没有问题。

image.png

接下来尝试往前取一年,往前取一个月和往前取一天。如果要往前取多少年多少月,那一定要使用大括号的这种格式。可以看到参数赋值这里都减了1

image.png

如下图,冒烟测试后日志中可以看到,bizdate依旧是20201001,但是现在年份往前取了一年变成2019,月份和天也提前了,成了9月31日,取值也没问题。

image.png


3、自定义参数中括号格式

然后看下中括号的这种格式,参数有cyctime、年月日、时分秒、小时和分钟。因为中括号形式能取到时分秒,所以用cyctime来做示例,这里cyctime也是个变量,和bizdate一样,需要赋值。这里定时时间我们选0点29分。

image.png

image.png

保存、提交、开发环境冒烟测试完成后打开日志来查看下,cyctime是20201002002900,也就是2020年10月2日0点29分00秒,是没问题的。另外var2的年月日、var3的时分秒、var4的小时和var5的分钟替换值也都没问题。

image.png

然后单独测试下往前取一个小时。现在的任务定时时间是0:29,业务时间是10月1号,那么往前取一个小时应该是23点。再次提醒,修改代码变量的时候一定要先保存提交,然后再去使用开发环境冒烟测试。

image.png

替换出来后var4的值是23,小时是23点,没问题。

image.png


4、业务场景——赋值中带空格

我们现在把空格加上,参数赋值var=[yyyymmdd hh24miss],尝试将年月日和时分秒用空格分开,看看是什么情况。

image.png

测试日志中可以看到,虽然在变量赋值语句中加了一个空格,但是替换出来的值是没有空格的。

image.png

如果要在赋值的时候添加一个空格,就需要用两个参数来做。这个场景先分成两个参数,分别取年月日和时分秒,中间用一个空格隔开,然后代码里面也要加一个空格。

image.png

可以看到代码语句select '${var1}' '${var2}'这里的变量var1和var2中间是带了一个空格的,参数替换也正常,分别是年月日20201002和时分秒000400。

image.png

image.png


5、业务场景——跨天调度参数替换

处理0点的运行实例,要取前一天的23点,但它却会替换为当天的23点。比如这里选择业务时间为10月1号,定时时间为0点,那么实际正常结果定时时间出来应该是10月2号0点,然后再往前减1个小时,就应该是10月1号23点。

image.png

image.png

但是测试结果日志里可以看到这里替换成了10月2号23点,这个结果是错的。

image.png

这个时候我们可以修改成datetime=[yyyymmdd-1/24],即日期也往前减一个小时。

image.png

这时结果是20201001 和 23,即10月1号23点,是正确的取值了。

image.png


6、运行与高级运行区别

首先是“运行”功能,新建一个SQL节点,代码中写上select ‘${var}’。

image.png

然后点击运行,第一次运行的时候会有弹窗,可以为代码中的var赋值,这里赋值为1,点确定后点击运行。

image.png

image.png

这里运行没有问题,参数var也替换为了1。

image.png

现在把变量名修改一下,改为var1,然后再保存、运行。

image.png

此时因为不是第一次运行,不会再弹框为变量赋值,会直接弹出运行框。

image.png

可以看到运行日志中var1参数没有替换。

image.png

所以如果修改了代码中的变量,就一定要使用高级运行给var1这个新变量重新赋值。

image.png

image.png

这样代码中的新变量var1才能被正确地替换掉。

image.png

另外,如果需要修改调度资源组,也是需要使用高级运行重新选择资源组,和参数赋值是同一个界面。


 以上就是本次分享的全部内容了,有问题需要解答的同学可以扫码加一下我们的钉钉大群,群里有直播回放可以观看。

感谢大家的关注!

DataWorks部门主群二维码.JPG





版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
DataWorks
使用钉钉扫一扫加入圈子
+ 订阅

DataWorks作为飞天大数据平台操作系统,对接各种大数据计算引擎,以all in one box的方式提供专业高效、安全可靠的全域智能大数据平台,高效率完成数据全链路研发流程,建设企业数据治理体系。 从2009年飞天大数据平台写下第一行代码开始,DataWorks历经10年发展,形成一套成熟的产品功能体系,满足企业数据中台搭建需求。

官方博客
最新文章
相关文章
DataWorks产品官网