在DataWorks中设置调度时间时,可以使用cron表达式来指定具体的时间,包括年、月、日、时、分、秒。如果您要设置当前时间前一个小时的日期作为调度时间,可以使用如下的cron表达式:
0 0 * * * ?
这个表达式的含义是每小时的第0分0秒执行一次,即整点触发。如果您的任务需要在整点之后的某个时间点触发,可以根据实际情况调整分钟和秒数的值,比如:
0 30 * * * ?
这个表达式的含义是每小时的第30分0秒执行一次,即半点触发。
在DataWorks中设置调度参数以获取当前时间前一个小时的日期,可以参考以下步骤:
在DataWorks中,可以通过以下方式获取当前时间前一个小时的日期:
$ {bdp.system.bizdate}
此外,还可以通过以下方式获取当前时间前一个月或一年的日期:
$ {bdp.system.monthbefore(1)} $ {bdp.system.yearbefore(1)}
这里的数字表示需要往前移动的月份或年份的数量。例如,{bdp.system.monthbefore(2)}表示当前时间往前两个月的日期,{bdp.system.yearbefore(2)}表示当前时间往前两年的日期。
请注意,这些调度参数仅适用于DataWorks的任务调度功能,且需要在创建任务时使用这些参数。
调度参数往前取一个小时,如何处理跨天参数替换的问题
问题描述
表分区格式day=yyyymmdd,hour=hh24,执行时小时会取上个小时的数据,使用$[yyyymmdd] $[hh24-1/24]参数可以满足,但0点时会变成当天的23点,该情况如何处理?
解决办法
您可修改参数的计算公式,将datetime设置为$[yyyymmdd-1/24],hour的计算公式仍然是$[hh24-1/24]。
配置说明
代码中设置day=datetime, hour={hour},
节点配置参数赋值datetime=[yyyymmdd-1/24],hour=[hh24-1/24]
实时场景
如果一个实例的定时时间为2021-7-21 00:00:00,减1小时便是昨天,则$[yyyymmdd-1/24]的值为20210720、$[hh24-1/24]的值为23。
如果一个实例的定时时间为2021-7-21 01:00:00,减1小时还是今天,则$[yyyymmdd-1/24]的值为20210721、$[hh24-1/24]的值为00。
如果您希望在DataWorks中设置调度参数以获取当前时间前一个小时的日期,您可以使用以下方法:
1.修改参数计算公式:您可以修改参数的计算公式,将datetime参数的计算方式修改为[yyyymmdd−1/24],同时保持hour的计算公式为[hh24-1/24]。这样,datetime参数将获取当前时间前一个小时的日期。
2.处理表的分区格式:如果您的表采用了年月日时分秒间带空格的分区格式(例如pt=yyyy-mm-dd hh24:mi:ss),您可以使用两个自定义变量分别赋值年月日和时分秒,并将datetime参数设置为datetime,hour参数设置为{hour}。这样,datetime参数将根据年月日和时分秒拼接为当前时间前一个小时的日期。
3.定时任务执行时间:如果您正在使用定时任务,并且希望在每天的特定时间(例如每天的20:00)执行任务,并且希望在上游节点执行异常导致第二天0:00才调起时,参数取值为20:00而不是0:00,您可以考虑以下解决方案:
(1)在任务配置中,将定时任务的执行时间设置为每天的20:00。这样,当第二天0:00调起时,由于定时任务的时间戳为每天的20:00,因此参数取值仍为20:00。
(2)在代码中添加逻辑判断。在任务执行前,您可以检查当前时间并判断是否为第二天0:00。如果是,则将参数值设为20:00;否则,根据正常逻辑进行参数计算。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
DataWorks基于MaxCompute/Hologres/EMR/CDP等大数据引擎,为数据仓库/数据湖/湖仓一体等解决方案提供统一的全链路大数据开发治理平台。