本文为您介绍调度参数的相关问题。

调度参数往前取一个小时,如何处理跨天参数替换的问题

  • 问题描述

    表分区格式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

如何处理表的分区格式年月日时分秒间带空格情况:pt=yyyy-mm-dd hh24:mi:ss

重要 调度参数赋值不支持带空格。
您可使用两个自定义变量进行赋值,具体如下:
  • 年月日:参数datetime=$[yyyy-mm-dd]
  • 时分秒:参数hour=$[hh24:mi:ss]
分别获取日期和时间后,在代码中使用空格拼接为pt=${datetime} ${hour}调度配置

节点定时时间为每天20:00,节点内参数取值为定时时间($cyctime或者$[yyyymmddhh24miss]),由于上游节点执行异常导致当前节点第二天0:00才调起,此时参数取值是20:00还是0:00?

实例的定时时间可以理解为预期状态下实例运行时间,定时时间与实例实际运行时间可能存在差异(任务实际运行时,可能会因为等待资源等原因导致实际运行时间与定时时间不一致)。实例定时时间是绝对的,不会随着实例的运行时间而改变。

调度参数中取的是实例的定时时间,节点调度参数的替换值在实例生成时就已经替换,不会随着实例实际运行时间的改变而改变,因此,您无需顾虑调度参数取值是否会变动。定时时间定时调度时间

如何配置ODPS Spark节点中的时间参数?

您在创建ODPS Spark节点时,需在编辑页面配置节点使用的参数,系统会按照配置顺序执行。

配置代码中变量后,需单击编辑页面右侧的调度配置,在参数面板为上述变量赋值,调度参数使用详情请参见本文内容。spark任务配置

如何对不便于进行二次处理调度参数返回值的节点进行取值?

部分节点(例如,离线同步节点)配置了调度参数后,调度参数的返回值不能直接使用,需要进行转换等二次处理。该类节点,您可以配置赋值节点为该节点的上游,使用赋值节点先引用调度参数并对参数返回结果进行转换处理,再通过节点上下文功能,将最终的参数结果传递给下游的目标节点。

直接使用MaxCompute日期函数取值和通过调度参数取值有什么区别?

  • 直接使用MaxCompute日期函数取值,其返回结果是执行计算任务的机器所显示的时间。当在不同时间执行同一个实例时,返回时间会改变。
  • 通过调度参数取值,其返回结果是基于定时时间进行计算的。无论何时执行同一个实例,返回时间均不会改变。

如何在数据开发测试调度参数?

由于调度参数仅经过调度系统才能被自动替换,因此,如果您需通过数据开发测试调度参数在调度系统的替换情况,可选择开发环境冒烟测试。
说明 由于数据集成任务没有开发环境测试功能,所以如果您需测试该类任务调度参数替换情况,建议新建一个SQL节点,使用开发环境冒烟测试先单独测试调度参数,测试符合预期后,再在数据集成节点中使用。

FAILED: ODPS-0130161:[1,84] Parse exception - invalid token '$'

报错原因:调度参数未赋值或赋值出现异常。

解决办法
  1. 检查是否有给调度参数赋值。
  2. 检查配置的调度参数是否符合要求(详情请参见调度参数支持的格式)。
重要 修改参数配置后需提交发布,发布后请在生产运维中心周期任务的属性面板查看参数是否是最新的配置。
赋值异常

params format error,please check your params(key=values)

解决办法:
  1. 检查是否为变量赋值。
  2. 检查调度参数是否有多余空格。
  3. 节点名称中,点(.)和中文不能一起使用。
示例:time①=②$[yyyymmdd③hh24:mi:ss]time1=$[yyyymmdd]④time2=$[hh24:mi:ss] (①②③④为空格所在位置)。
  • 调度参数的等号(=)两端不可以加空格,即示例中的①②处。
  • 调度参数赋值中不支持空格,即示例中的③处。
  • 两个调度参数间用一个空格分隔,即示例中的④处。

运行,高级运行和开发环境冒烟测试赋值逻辑有什么区别

操作 描述
运行 第一次运行后,您需手动为该变量赋值常量,第一次赋值会被记录。如果对代码进行修改,该变量依旧使用第一次运行时的赋值。
高级运行 高级运行时,您需手动为当前代码中的变量进行赋值常量,如果修改了代码中的变量,请使用高级运行给变量重新赋值常量。
说明 如果要修改任务执行资源组,请使用高级运行
开发环境执行冒烟测试 通过手动选择业务日期模拟节点自动调度的场景,获取当前业务日期下调度参数的替换值。
替换调度参数

如何查看生产环境调度参数替换情况?

如果您在数据开发修改了调度参数并且提交发布,请在生产运维中心周期任务属性面板检查调度参数是否符合预期,如果不符合预期,请检查任务发布,发布包界面,是否发布生成功。在周期实例属性面板查看单个实例调度参数替换情况。
重要 单个实例不管是否已经运行过,实例的执行参数会实时更新为生产周期任务最新的参数配置。
周期任务
实时场景:
  • 节点A当天周期实例A1调度参数time1取值为$bizdate,当天实例已执行成功,代码中参数取值即为bizdate业务时间(具体值)。
  • 在当天某一时间点调度参数time1取值由$bizdate改为$cyctime,那么当天实例执行参数此时会显示为cyctime定时时间(具体值)。
  • 当前实例重跑,会用最新的参数配置:即time1=$cyctime
  • 如果要看调度参数变更前的实例使用的调度参数替换情况,请在日志中查看,详情参考常见问题:如何在日志中查看调度参数替换情况如何通过日志查看当前实例执行时调度参数替换情况?
调度参数替换情况

如何通过日志查看当前实例执行时调度参数替换情况?

在代码中找到SKYNET_PARAVALUE字样。日志查看调度情况

如何定义调度参数的时区?

夏令时支持现转实例引擎和参数分区计算,在进入和退出夏令时当天能正确运行。以美国西部时间为例,说明如下:
  • 进入夏令时会产生23个实例,当天03:00往前偏移10分钟的结果是01:50。进入夏令时当天定时时间2点的任务会空跑。
  • 退出夏令时会产生24个实例,当天03:00往前偏移10分钟的结果是02:50。

进入夏令时当天的日、周和月调度节点,如果设置的运行时间正好是被跳过的时间段,则当天生成的实例运行时间会是当天的0点整。

节点中调度参数已配置且提交发布,但返回值始终无变化。

您需排查调度参数是否被同名业务流程参数覆盖。排查操作,详情请参见流程参数

当排查到存在同名业务流程参数时,如无需使用该业务流程参数,则可将其删除;如需保留该业务流程参数,则需修改节点调度参数的名称。