当前位置:主页 > 查看内容

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

发布时间:2021-06-29 00:00| 位朋友查看

简介:本篇文章主要介绍了DataWorks调度参数的两种分类——系统内置变量和自定义参数 并介绍了各参数的使用和测试方式、注意事项和常见场景 实操演示了参数在各场景下的使用情况。 分享人 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






本文转自网络,原文链接:https://developer.aliyun.com/article/784963
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文


随机推荐