变量分类与赋值

本文为您介绍Dataphin中的变量分类及为本地变量赋值时,如何针对日期时间进行运算。

变量分类说明

Dataphin中存在以下类型的变量:

变量类型

描述

全局变量

在Dataphin规划-公共定义-全局变量中事先声明定义的变量,可以在租户内任何节点或代码中引用,系统初始内置的全局变量有${bizdate}

image

说明
  • 全局变量暂不支持集成同步任务(仅旧版本可用,新版本已不再支持)。

  • 全局变量设置。具体操作,请参见新建全局变量

空间名称变量

${项目名称}${板块名称}。下图以计算任务为例。

image.png

  1. 在①处获取项目名称或板块名称。

  2. 在②处的编辑器中,您可以通过获取的项目名称或板块名称,使用${项目名称或板块名称}语法进行引用。

  3. 在③的输入参数中,系统将自动识别到参数类型。

说明

空间名称变量不支持转换为其他类型变量。

本地变量

无须事先声明和定义,直接在代码中使用${variable_name},即可定义一个名字为variable_name的本地变量。下图以计算任务为例。

image.png

变量名建议只使用数字、字母和下划线。且不要使用dp_glb_开头,此为全局变量保留设置,长度不超过32位字符。

重要
  • 如果variable_name与某个全局变量名称一致, 会被系统优先视作引用了全局变量, 可在参数配置中转换类型为本地变量。

  • 如果variable_name与某个生产项目或者生产板块的名称一致,会被系统强制视作为空间名称变量。

  • 如果${variable_name}是代码内容的一部分, 而不是变量, 可在参数类型配置中设置该变量为非变量

  • 如果${variable_name}是跨节点变量, 可在参数类型配置中设置该变量为跨节点变量

  • 若需将本地变量的参数值设置为空值。可以单击参数值处的设为空值

跨节点变量

指当前变量为上游节点透传给本对象节点的变量参数。可用于以下场景:

  • 上游节点A将某一个变量${var}传递给下游节点B, ${var}被B的计算逻辑引用。 例如,在金融场景下,汇率通常存放在引擎的一张物理表, 有大量的节点在计算过程中都需要用到汇率.。可以通过一个Python节点读取物理表中的汇率存放到一个变量中,将该变量传递给下游的节点使用。

  • 上游节点A将某一个变量${var}传递给下游节点B,B将根据${var}的取值来决定运行策略。例如,上游节点A获取某远程服务的状态,如果远程服务状态为"停止",则A的下游节点B将空跑运行;A需要将远程服务的状态以变量的方式传递给B。

重要
  • 跨节点变量暂不支持实时任务。

  • 引入跨节点参数变量后,对当前节点补数据时,建议同时补输出跨节点参数的上游节点和当前节点。

变量赋值说明

日期时间计算表达式

为本地变量赋值时,如果需要针对日期时间进行运算,Dataphin支持以下快捷日期计算操作符:

  • Dataphin 提供基于两个日期时间的运算

    • 基于业务日期${bizdate}的方式:${(yyyyMMdd|yyyy/MM/dd|yyyy-MM-dd) (+|-) n}

    • 基于预计执行时间(即节点任务设置的起调时间)的方式:$[(yyyyMMddHHmmss|yyyy/MM/dd HH:mm:ss|yyyy-MM-dd HH:mm:ss) (+|-) n]

  • 日期时间各部分的标识符号

    • :yyyy。

    • :mm(日期时间只到天粒度时可使用)或MM(日期时间到分钟粒度时必须使用大写,以便和分钟mm进行区分)。

    • :dd。

    • 小时:HH。

    • 分钟:mm。

    • :ss。

  • 日期时间运算的单位 (interval) 是天

    • 1 小时使用1/24来表示,5小时为5/24。

    • 1 分钟使用1/24/60来表示,30分钟为30/24/60。

示例参考

当前日期

基于业务日期(T-1)的配置

实际值

基于预计执行时间(T)的配置

实际值

2018-01-10

${yyyymmdd}

20180109

$[yyyymmdd]

20180110

2018-01-10

${yyyyMMdd}

20180109

$[yyyyMMdd]

20180110

2018-01-10

${yyyymmdd -1}

20180108

$[yyyymmdd -1]

20180109

2018-01-10

${yyyymmdd -7}

20180102

$[yyyymmdd -7]

20180103

2018-01-10

${yyyy-mm-dd}

2018-01-09

$[yyyy-mm-dd]

2018-01-10

2018-01-10

${yyyy-mm}

2018-01

$[yyyy-mm]

2018-01

2018-01-10

${yyyy-mm -1}

2017-12

$[yyyy-mm -1]

2017-12

2018-01-10

${yyyy}

2018

$[yyyy]

2018

2018-01-10

${yyyy+1}

2019

$[yyyy + 1]

2019

2018-01-10

${yyyy/MM/dd HH:mm:ss}

2018/01/09 00:00:00

$[yyyy/MM/dd HH:mm:ss]

2018/01/10 00:00:00

2018-01-10

${yyyy/MM/dd HH:mm:ss-1/24}

2018/01/08 23:00:00

$[HH:mm:ss-5/24/60]

23:55:00