本篇文章主要介绍了DataWorks调度参数的两种分类——系统内置变量和自定义参数 并介绍了各参数的使用和测试方式、注意事项和常见场景 实操演示了参数在各场景下的使用情况。
分享人 DataWorks技术支持团队
我们在开发者社区学习路线里有发布一个DataWorks的学习路线 里面包含了入门讲解和熟能生巧系列的直播内容 大家可以去学习一下 需要主账号登陆学习哦 https://developer.aliyun.com/learning/course/81
调度参数分为系统内置变量和自定义参数两类 其区别在于能否在代码中直接使用。系统内置变量可以直接使用 不需要赋值。自定义参数需要在代码中自定义一个变量 然后在参数配置区给这个变量赋值 赋值支持四种形式的值 ${…}、$[…]、系统内置参数 例如$bizdate 、常量。
2、系统参数首先是系统参数配置 取值和格式如下 包括业务时间和定时时间 业务时间等于定时时间减一天 也就是业务时间在定时时间前一天。另外 业务时间精确到天 取值与自定义参数${yyyymmdd}一致 定时时间精确到时分秒取值与$[yyyymmddhh24miss]一致。
3、自定义参数然后是自定义参数。先看大括号格式 ${…} 大括号格式可以精确到天。并且如果只需取到月份的话 需要用大括号形式。
中括号格式如下图 是可以精确到时、分、秒的。
然后是系统内置参数 用得比较多的是后面四个 $bizdate可以取到天 $cyctime可以取到时分秒 $gmtdate也精确到天 最后$bizmonth取到月份。
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是一样的 。
ODPS SQL节点使用示例如下图。两个系统变量可以在代码中直接使用 而自定义参数需要先在代码中定义变量名 然后在右侧参数配置里给变量赋值。。
数据集成节点使用示例如下 与ODPS SQL节点一致 注意如果在分区信息中配置pt ${bizdata} 那需要在右侧参数配置中配置bizdata $bizdate
Shell节点使用示例也一样 但Shell节点中的变量不允许自定义命名 只能以$1、$2、$3…来命名 当参数达到10个后 需要用大括号 如${10}。
PyODPS节点也一样 但在使用自定义参数的时候 为了避免侵入代码 可以在全局变量中增加一个args的字典对象 调度参数可以在此获取。
5、调度参数的注意事项DataWorks有三种运行方式 运行、高级运行和开发环境冒烟测试 这里有几个需要注意的地方。
?
选择运行 只会在第一次弹框时给当前的变量赋值常量。如果修改了代码中变量名是不会继续弹框给新变量赋值。选择高级运行 每次都会弹框给当前变量赋值。如果您变更了代码中的变量 或者需要重新为变量赋值 请务必使用高级运行。运行和高级运行都只能给参数赋值常量 用于测试。如果您需要测试实际调度时的参数替换 请使用开发环境冒烟测试。
?
开发环境冒烟测试会根据业务时间替换调度参数 若修改了调度参数赋值 请务必先保存提交 再使用开发环境冒烟测试。
需要注意的是参数赋值语句中 空格仅用于分离多条赋值语句 即多个自定义变量赋值语句可以用空格分离 下图4处 但单个赋值语句内不支持 使用空格 下图1、2、3处 。另外 大括号可以取任务的业务时间 最小粒度是天 中括号取定时时间 可以精确到时分秒。
场景一 如何处理表的分区格式中需要空格的情况。如果要在时间中带一个空格 需要用两个参数来做 一个参数取年月日 一个参数取时分秒 然后在代码里用一个空格去拼接两个参数 这样就可以实现替换的值中带一个空格。
场景二 跨天调度参数替换。
?
如何处理小时任务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。
二、实操演练先针对两个参数来看它的替换情况 bizdate是业务时间 cyctime是定时时间 也就是具体时间。我们选择开发环境冒烟测试来看这两个参数的替换情况。每次修改完务必先保存、提交 再点击开发环境冒烟测试。
我们选择业务时间假设是10月1号 那bdp.system.bizdate的取值应该是2020年10月1号 那bdp.system.cyctime的取值应该是2020年10月2号 它的小时分钟应该全是0。接着我们看一下它实际运行的结果 如下图 冒烟测试后日志中可以看到替换的值 业务时间20201001没有问题。
然后cyctime的参数值为20201002000000。替换出来也是对的
接下来看一下自定义参数大括号的这种格式。当前取了5个参数 bizdate、年月日、年份、月份和天 业务日期还是选择2020年10月1号。
如下图 冒烟测试后日志中可以看到bizdate等于20201001 var1取年月日 值和bizdate一致 var2取了年份 var3取月份 var4取日期 取值都没有问题。
接下来尝试往前取一年 往前取一个月和往前取一天。如果要往前取多少年多少月 那一定要使用大括号的这种格式。可以看到参数赋值这里都减了1
如下图 冒烟测试后日志中可以看到 bizdate依旧是20201001 但是现在年份往前取了一年变成2019 月份和天也提前了 成了9月31日 取值也没问题。
然后看下中括号的这种格式 参数有cyctime、年月日、时分秒、小时和分钟。因为中括号形式能取到时分秒 所以用cyctime来做示例 这里cyctime也是个变量 和bizdate一样 需要赋值。这里定时时间我们选0点29分。
保存、提交、开发环境冒烟测试完成后打开日志来查看下 cyctime是20201002002900 也就是2020年10月2日0点29分00秒 是没问题的。另外var2的年月日、var3的时分秒、var4的小时和var5的分钟替换值也都没问题。
然后单独测试下往前取一个小时。现在的任务定时时间是0:29 业务时间是10月1号 那么往前取一个小时应该是23点。再次提醒 修改代码变量的时候一定要先保存提交 然后再去使用开发环境冒烟测试。
替换出来后var4的值是23 小时是23点 没问题。
我们现在把空格加上 参数赋值var [yyyymmdd hh24miss] 尝试将年月日和时分秒用空格分开 看看是什么情况。
测试日志中可以看到 虽然在变量赋值语句中加了一个空格 但是替换出来的值是没有空格的。
如果要在赋值的时候添加一个空格 就需要用两个参数来做。这个场景先分成两个参数 分别取年月日和时分秒 中间用一个空格隔开 然后代码里面也要加一个空格。
可以看到代码语句select ${var1} ${var2} 这里的变量var1和var2中间是带了一个空格的 参数替换也正常 分别是年月日20201002和时分秒000400。
处理0点的运行实例 要取前一天的23点 但它却会替换为当天的23点。比如这里选择业务时间为10月1号 定时时间为0点 那么实际正常结果定时时间出来应该是10月2号0点 然后再往前减1个小时 就应该是10月1号23点。
但是测试结果日志里可以看到这里替换成了10月2号23点 这个结果是错的。
这个时候我们可以修改成datetime [yyyymmdd-1/24] 即日期也往前减一个小时。
这时结果是20201001 和 23 即10月1号23点 是正确的取值了。
首先是“运行”功能 新建一个SQL节点 代码中写上select ‘${var}’。
然后点击运行 第一次运行的时候会有弹窗 可以为代码中的var赋值 这里赋值为1 点确定后点击运行。
这里运行没有问题 参数var也替换为了1。
现在把变量名修改一下 改为var1 然后再保存、运行。
此时因为不是第一次运行 不会再弹框为变量赋值 会直接弹出运行框。
可以看到运行日志中var1参数没有替换。
所以如果修改了代码中的变量 就一定要使用高级运行给var1这个新变量重新赋值。
这样代码中的新变量var1才能被正确地替换掉。
另外 如果需要修改调度资源组 也是需要使用高级运行重新选择资源组 和参数赋值是同一个界面。
?以上就是本次分享的全部内容了 有问题需要解答的同学可以扫码加一下我们的钉钉大群 群里有直播回放可以观看。
感谢大家的关注
马上就要过春节了,大城市里依然是不准燃放烟花这种空气污染的东西的,想念小时...
1、准备内容: 1.1、新建Android Studio项目,用于Smali增加日志处理代码,并生...
/ python 生产实战 60 秒系统安全认证实战 / 上节主要讲解了目前主流的认证规范/...
TOP云 (west.cn)7月9日消息,2017GDS 域名 峰会上,来自全球的注册局、注册商...
前言 作为一名开发人员我们经常会听到HTTP协议、TCP/IP协议、UDP协议、Socket、S...
只有 域名 怎么备案?如果只有域名,没有服务器是不能进行备案的。可以购买一台...
企业级图分析平台提供商TigerGraph宣布成功完成1.05亿美元的C轮融资,这也是图数...
TOP云 (west.cn)4月1日消息,据国外媒体报道,专注于美国市场的新闻网站PlayBu...
ES2019 规范是对 JavaScript的小规模扩展,但仍带来了一些有趣的功能。本文向你...
科学技术的不断发展,互联网信息技术的不断革新,大数据时代已经到来,大数据收...