全部產品
Search
文件中心

DataWorks:調度參數來源及其運算式

更新時間:Nov 26, 2025

調度參數是DataWorks中實現任務動態化和組態管理的核心機制。它允許您在代碼中使用變數預留位置,並在任務調度時為其注入動態值。這不僅解決了週期性任務中寫入程式碼日期帶來的維護難題,更通過提供工作空間、工作流程、節點上下文和節點本地四級參數體系,實現了配置與代碼的分離,極大地提升了任務的靈活性、複用性與環境適應能力。

重要

本文專註於調度參數的賦值來源和運算式文法。在閱讀本文前,請確保您已瞭解調度參數的基本配置方法,參見:配置並使用調度參數

調度參數的賦值來源

調度參數除了支援使用本節點定義的參數外,還支援使用上下文參數、工作流程參數和工作空間參數,範圍範圍由低到高。

  1. 節點本地定義(本節點)

    在節點調度配置調度參數地區內定義的參數,僅對當前節點有效。可支援豐富的參數運算式,詳見下文。

  2. 上下文參數 (跨節點傳遞)

    用於接收其直接上遊節點的輸出值。這種方式不僅傳遞了值,還確立了節點間的調度依賴關係。當一個參數的值需要由上遊任務的運行結果動態決定時,使用此方式。可通過單擊參數賦值地區的image快捷添加上下文參數,上下文參數詳見:配置並使用節點上下文參數

    PixPin_2025-11-25_10-20-21

  3. 工作流程參數 (工作流程內共用)

    在工作流程上定義的參數,可以被該工作流程內的所有子節點引用。可通過${workflow.參數名}方式直接引用。工作流程參數的參數運算式,也可參照本文。

    PixPin_2025-11-25_10-18-53

  4. 工作空間參數(工作空間內共用)

    在工作空間層級定義的全域參數,該空間下的所有節點都可引用。它最常用於區分開發環境和生產環境的配置,例如,定義一個名為 db_name 的參數,在開發環境的值為 db_dev,在生產環境的值為 db_prod。可在設定調度參數值時直接選擇工作空間參數。詳見:使用工作空間參數

    PixPin_2025-11-25_10-18-00

參數運算式

調度參數通過定義參數名參數值來定義賦值邏輯,其中參數值支援時間參數系統內建參數常量等多種形式。定義完成後即可在代碼中,通過${參數名}的方式來引用。

  • 自訂時間參數:如${...}$[...],可在兩種時間基準值(業務日期定時時間)的基礎上進行變換,詳見:時間參數

  • 系統內建參數:如$bizdate$bizmonth、$jobid,可用於擷取業務日期、業務月份、商務程序ID等,不局限於時間類型。詳見:系統內建參數

  • 常量:如'123''abc'等。

其中時間參數是調度參數的主要應用情境,用於在任務運行時動態替換各種時間字串。

時間參數

核心概念:時間基準

DataWorks的所有動態時間參數都基於以下兩種核心的時間基準。

概念

定義

參數值

自訂格式

時間精度

業務日期

通常指任務定時運行日期的前一天。在T+1的離線計算情境中,它代表需要處理的業務資料的發生日期。例如,今天統計前一天的營業額,此處的前一天,指交易發生的日期,也就是業務日期。

${yyyymmdd}

${...}

年月日

定時時間

指任務在調度配置中設定調度時間,在任務運行時會被系統替換為任務執行個體啟動並執行當天。它精確到秒,並獨立於任務的實際已耗用時間。

引用該時間為任務預期執行時間,與實際開始執行時間並非完全一致。任務實際開始執行時間受多方因素影響。

$[yyyymmddhh24miss]

$[...]

年月日時分秒

概念總結:

  • 業務日期 ≈ 昨天 (資料的日期)=$bizdate=${yyyymmdd}

  • 定時時間 ≈ 今天 (任務啟動並執行時間)=$cyctime=$[yyyymmddhh24miss]

一個典型的T+1任務就是:在今天(定時時間)的淩晨,啟動一個任務,去處理昨天(業務日期)的資料。

以下為$bizdate${yyyymmdd}$cyctime$[yyyymmddhh24miss]的參數定義和業務日期為2025-10-16時的預覽結果。

image

image

若基準時間的參數傳回值不滿足要求,也可以通過${...}$[...]進行自訂時間參數,自訂時間參數是在兩種基準時間的基礎上進行變換,支援以下幾種方式:

重要

通過自訂方式對調度參數進行賦值時,需注意區分兩種括弧的格式{...}和[...],兩種模式的基準值不同,返回的參數值也截然不同,避免造成生產資料錯誤。

自訂時間參數

DataWorks支援通過${...}$[...]來擷取業務時間和定時時間,並支援通過以下幾種類型,對時間進行靈活變換,以符合業務需要。以節點配置的調度時間為天調度,調度時間02:30:45為例。假設業務日期為20251031,以下是基準時間:

  • 業務日期${yyyymmdd},以20251031為例。

  • 定時時間$[yyyymmddhh24miss],以20251101023045為例。

    重要

    定時時間為預設的調度時間,在任務執行個體化時已固定。如任務執行個體因資源受限或上遊節點狀態等原因延遲運行,定時時間不會隨著執行個體實際已耗用時間而改變。

${...}$[...] 核心區別

首先瞭解兩者的核心區別。${...}$[...] 兩種格式在時間基準和計算能力上存在本質區別,混用這兩種格式可能導致資料錯誤。

對比維度

${...} (基於業務日期)

$[...] (基於定時時間)

時間基準

業務日期(T-1)

定時時間(T)

時間精度

(年月日)

(年月日時分秒)

位移計算能力

支援對 年、月、周、天 進行位移計算。

支援對 天、小時、分鐘 進行位移計算。

核心限制

不支援時、分、秒等更小時間單位的格式化與位移計算。

不支援通過 $[yyyy±N]$[mm±N] 的文法直接對年、月進行位移,需藉助 add_months 函數。

預設等價

${yyyymmdd} 等價於 $bizdate

$[yyyymmddhh24miss] 等價於 $cyctime

時間格式化

使用大括弧${...}$[...],結合yyyyyymmdd自訂群組合產生時間參數,擷取業務日期前後多少年、月、天。

代碼

描述

${...}(基於業務日期)

$[...] (基於定時時間)

賦值方式

結果

賦值方式

結果

yyyy

4位年份

${yyyy}

2025

$[yyyy]

2025

mm

2位月份

${mm}

10

$[mm]

11

dd

2位日期

${dd}

31

$[dd]

01

hh24

24小時制小時

不支援(精度為天)

-

$[hh24]

02

hh / hh12

12小時制小時

-

$[hh]

02

mi

分鐘

-

$[mi]

30

ss

-

$[ss]

45

yyyymm

取年月

${yyyymm}

202510

$[yyyymm]

202511

yyyy-mm-dd

格式化為用“-”拼接

${yyyy-mm-dd}

2025-10-31

$[yyyy-mm-dd]

2025-11-01

yyyy-mm-dd hh24:mi:ss

格式化為用“-”拼接,並帶時分秒

不支援(精度為天)

-

支援方式見字串拼接:方案2

位移計算

位移計算是動態參數的核心,可基於業務日期定時時間進行前後加減。如在時間基準的基礎上實現擷取前後N年、月、日,或N小時、分鐘(小時分鐘僅支援定時時間)的時間計算。${...}$[...]由於時間基準的精度不同,可支援的範圍也不一樣。

  1. ${...} 模式的位移計算

    • 核心能力:支援對年、月、周、天進行整數位移。

      重要

      不支援時、分的位移計算。即不支援${yyyy-mm-dd-1/24}等用法。

    • 文法:${<時間格式><±N>},N對應時間格式的最小單位。如格式為yyyymm,則N的單位對應mm(月);如格式為yyyymmdd,則格式對應dd(天)。

      日期加減周期

      位移單位

      擷取方式

      舉例

      前/後N年

      ${yyyy±N}${yy±N}

      取上一年:${yyyy-1}

      前/後N月

      ${yyyymm±N}

      取上個月:${yyyymm-1}

      前/後N周

      ${yyyymmdd±7*N}

      取上周:${yyyymmdd-7*1}

      前/後N天

      ${yyyymmdd±N}

      取前天:${yyyymmdd-1}

  2. $[...] 模式的位移計算

    • 核心能力:支援對天、小時、分鐘進行分數位移。

      重要

      $[...]無法根據$[yyyy-N]$[mm-N]時間格式擷取多少年前、多少月前的時間資料。如需對年月進行位移計算,需用 add_months 函數來支援年月位移。

    • 文法:$[<時間格式><±N>] ,其中小時位移使用N/24 ,分鐘位移使用N/24/60,N為需要位移的小時或分鐘數。

      需求

      位移單位

      擷取方式

      舉例

      前/後 N 年

      $[add_months(yyyymmdd,12*N)] (後N年)
      $[add_months(yyyymmdd,-12*N)] (前N年)

      取上一年:$[add_months(yyyymmdd,-12)]

      前/後 N 月

      $[add_months(yyyymmdd,N)] (後N月)
      $[add_months(yyyymmdd,-N)] (前N月)

      取上個月:$[add_months(yyyymmdd,-1)]

      前/後 N 周

      $[yyyymmdd±7*N]

      取上周:$[yyyymmdd±7*1]

      前/後 N 天

      $[yyyymmdd±N]

      取昨天:$[yyyymmdd-1]

      前/後 N 小時

      小時

      擷取該時間資料包含如下方式:

      • $[hh24miss±N/24]$[hh24±N/24]

      • $[自訂時間格式±N/24]

      不同時間格式的取前一個小時:

      • 取月:$[mm-1/24]

      • 取年:$[yyyy-1/24]

      • 取年月:$[yyyymm-1/24]

      • 取年月日:$[yyyymmdd-1/24]

      • 取前一天且前一小時:$[yyyymmdd-1-1/24]

      前/後 N 分鐘

      分鐘

      擷取該時間資料包含如下方式:

      • $[hh24miss±N/24/60]

      • $[yyyymmddhh24miss±N/24/60]

      • $[mi±N/24/60]

      • $[自訂時間格式±N/24/60]

      不同時間格式的取定時時間的前15分鐘:

      • $[yyyy-15/24/60]

      • $[yyyymm-15/24/60]

      • $[yyyymmdd-15/24/60]

      • $[hh24-15/24/60]

      • $[mi-15/24/60]

      複雜組合位移

      天+小時

      $[yyyymmdd±N±M/24],N為天位移量,M為小時位移量。

      樣本:擷取前一天的前一小時 → $[yyyymmdd-1-1/24]

      說明
      • 執行小時分鐘的位移計算時,可能存在跨天問題。跨天時間的參數處理方式,詳情請參見調度參數往前取一個小時,如何處理跨天參數替換的問題

      • 月末日期執行月位移計算時,若目標月份沒有對應日期,結果將自動校準為該月的最後一天。例如:當前為2025-03-31,執行減1月位移操作,由於2月沒有31號,取值為2025-02-28。

通過引擎函數二次變換

當調度參數的內建格式化和位移無法直接產生最終需要的值時(如擷取上月的最後一天),可通過使用目標節點的計算引擎內建的函數或通過賦值節點在調用參數時,對時間參數進行二次變換。

參考:調度參數傳回值二次處理的典型情境

字串拼接

此方法用於構建內建文法不支援的、但有規律的日期文字。它將調度參數產生的日期部分與固定的常量字串進行組合。

案例1:動態擷取每月的第一天。

  • 情境:無論任務在哪天運行,都需要一個代表當月第一天的字串,格式為 yyyymm01

  • 實現:

    1. 提取年月部分:使用 ${yyyymm} 擷取當前業務日期的年月部分(例如,如果業務日期是 20231027,則結果為 202310)。

    2. 拼接常量:將提取出的年月與字串 '01' 進行拼接。

    3. 參數調用:first_day_of_month=${yyyymm}01

  • 結果:當任務運行時,${first_day_of_month} 將被替換為 20231001

案例2:擷取yyyy-mm-dd hh24:mi:ss格式的時間。

  • 情境:擷取一個yyyy-mm-dd hh24:mi:ss格式的時間,如:2023-11-01 02:30:45

  • 實現:

    1. 設定兩個參數:分別為datetime1datetime2,並且分別賦值為datetime1=$[yyyy-mm-dd]datetime2=$[hh24:mi:ss-1/24/60]

    2. 拼接參數:將datetime1datetime2通過空格拼接。

    3. 參數調用:pt=${datetime1} ${datetime2}

  • 結果:當任務運行時,${datetime1} ${datetime2}將被替換為:2023-11-01 02:30:45

系統內建調度參數

DataWorks支援下表的系統參數,可用於設定調度參數的取值。但該方式靈活性差,時間格式固定,建議優先使用支援靈活變換的自訂時間參數。

內建參數

定義

$bizdate

業務日期,格式為yyyymmdd,與自訂參數${yyyymmdd}取值一致。

該參數的應用較為廣泛,日常調度中預設任務預期已耗用時間的前一天為業務日期。

$cyctime

任務的定時時間,格式為yyyymmddhh24miss,與自訂參數$[yyyymmddhh24miss]取值一致。

$gmtdate

當前日期,格式為yyyymmdd

該參數預設取當天日期,執行補資料操作時輸入的日期為業務日期+1

$bizmonth

業務月份,格式為yyyymm

  • 如果業務日期的月份與當前月份一致,則$bizmonth=業務日期月份-1

  • 如果業務日期的月份與當前月份不一致,則$bizmonth=業務日期月份

$jobid

任務所屬的商務程序ID。

$nodeid

節點ID。

$taskid

節點產生的執行個體ID。

附錄

補資料時的參數替換

任務提交至營運中心後,可以通過執行補資料操作批量產生並執行指定日期範圍內的歷史任務執行個體,以完成資料的修複、回補或回溯分析。

  • 業務日期($bizdate):補資料時選擇的業務日期和$bizdate的替換結果保持一致。若調度參數使用${...}自訂格式,其基準時間即為選中的日期,隨後根據指定的時間運算式進行變換。

  • 定時時間($cyctime):執行補資料時,$cyctime替換結果為選擇的業務日期+1天。

    例如,補資料選擇的業務日期為20250315,則執行補資料時,$cyctime參數的替換結果為20250316000000。若調度參數使用$[...]格式,其基準時間為選中的業務日期+1,隨後根據指定的時間運算式進行變換。

調度參數與業務日期、定時時間、實際已耗用時間的關係

關係類別

說明及樣本

調度參數與實際已耗用時間的關係。

調度參數替換值在執行個體產生時已確定,因此,調度參數的替換值不會隨著執行個體實際已耗用時間的改變而發生變化。

調度參數與任務定時時間的關係。

當調度參數設定為$[]時,參數的替換值由執行個體的定時時間決定,即由節點調度配置的調度時間決定。

例如,當前節點為小時調度節點,並且設定定時調度時間為00:00~23:59,每小時調度一次,則:

  • 第一個小時執行個體定時時間為0點,小時的參數取值為00

  • 第二個小時執行個體定時時間為1點,小時的參數取值為01

調度參數與業務日期、定時時間的關係。

關於夏令時說明

DataWorks可保障在進入和退出夏令時當天,任務能夠正確運行。進入與退出夏令時切換產品側的解決方案詳情,請參見相關文檔情境:夏令時切換對調度任務啟動並執行影響。為避免夏令時切換對您任務執行造成額外理解成本,建議實施夏令時的地區優先查看此文檔。

自訂參數取值差異對比

本文以ODPS SQL節點為例,假設任務的調度時間為2025年07月20日10時30分00秒,展示${…}$[…]參數的時間取值配置,具體如下表。

時間取值

${…}參數

$[…]參數

取年份:2025

  • 調度參數賦值:datetime=${yyyy}

  • 代碼引用:pt=${datetime}

  • 參數替換結果:pt=2025

  • 調度參數賦值:datetime=$[yyyy]

  • 代碼引用:pt=${datetime}

  • 參數替換結果:pt=2025

取年份:25

  • 調度參數賦值:datetime=${yy}

  • 代碼引用:pt=${datetime}

  • 參數替換結果:pt=25

  • 調度參數賦值:datetime=$[yy]

  • 代碼引用:pt=${datetime}

  • 參數替換結果:pt=25

取年份:2024

  • 調度參數賦值:datetime=${yyyy-1}

  • 代碼引用:pt=${datetime}

  • 參數替換結果:pt=2024

  • 調度參數賦值:datetime=$[add_months(yyyymmdd,-12)]

  • 代碼引用:pt=${datetime}

  • 參數替換結果:pt=2024

取月份:07

  • 調度參數賦值:datetime=${mm}

  • 代碼引用:pt=${datetime}

  • 參數替換結果:pt=07

  • 調度參數賦值:datetime=$[mm]

  • 代碼引用:pt=${datetime}

  • 參數替換結果:pt=07

取日期(天):20

  • 調度參數賦值:datetime=${dd}

  • 代碼引用:pt=${datetime}

  • 參數替換結果:pt=20

  • 調度參數賦值:datetime=$[dd]

  • 代碼引用:pt=${datetime}

  • 參數替換結果:pt=20

取日期:2025年06月20日

  • 調度參數賦值:datetime=${yyyy-mm-dd-29}

  • 代碼引用:pt=${datetime}

  • 參數替換結果:pt=2025-06-20

重要

此方式需考慮月份天數,不推薦使用,建議通過$[]方式擷取上月的同一日期。

  • 調度參數賦值:datetime=$[add_months(yyyymmdd,-1)]

  • 代碼引用:pt=${datetime}

  • 參數替換結果:pt=2025-06-20

取日期:2025年07月19日

  • 調度參數賦值:datetime=${yyyy-mm-dd}

  • 代碼引用:pt=${datetime}

  • 參數替換結果:pt=2025-07-19

  • 調度參數賦值:datetime=$[yyyy-mm-dd-1]

  • 代碼引用:pt=${datetime}

  • 參數替換結果:pt=2025-07-19

取日期:2024年07月20日

  • 調度參數賦值:datetime=${yyyy-mm-dd-364}

  • 代碼引用:pt=${datetime}

  • 參數替換結果:pt=2024-07-20

重要

此方法需考慮閏年,不推薦使用,建議通過$[]方式擷取上一年的同一日期。

  • 調度參數賦值:datetime=$[add_months(yyyymmdd,-12)]

  • 代碼引用:pt=${datetime}

  • 參數替換結果:pt=2024-07-20

取時間:10:30:00

不支援

  • 調度參數賦值:datetime=$[hh24:mi:ss]

  • 代碼引用:pt=${datetime}

  • 參數替換結果:pt=10:30:00

取時間:2025-07-20 10:30:00

不支援

  • 調度參數賦值:datetime1=$[yyyy-mm-dd] datetime2=$[hh24:mi:ss]

    說明

    您需要自訂兩個參數datetime1和datetime2,兩個參數間使用一個空格分隔。

  • 代碼引用:pt=${datetime1} ${datetime2}

  • 參數替換結果:

    • datetime1=$[yyyy-mm-dd]=2025-07-20

    • datetime2=$[hh24:mi:ss]=10:30:00

    • pt=2025-07-20 10:30:00

取時間:2025-07-20 10:29:00

不支援

  • 調度參數賦值:datetime1=$[yyyy-mm-dd] datetime2=$[hh24:mi:ss-1/24/60]

    說明

    您需要自訂兩個參數datetime1和datetime2,兩個參數間使用一個空格分隔。

  • 代碼引用:pt=${datetime1} ${datetime2}

  • 參數替換結果:

    • datetime1=$[yyyy-mm-dd]=2025-07-20

    • datetime2=$[hh24:mi:ss-1/24/60]=10:29:00

    • pt=2025-07-20 10:29:00

取時間:2025-07-20 09:30:00

不支援

  • 調度參數賦值:datetime1=$[yyyy-mm-dd] datetime2=$[hh24:mi:ss-1/24]

    說明

    您需要自訂兩個參數datetime1和datetime2,兩個參數間使用一個空格分隔。

  • 代碼引用:pt=${datetime1} ${datetime2}

  • 參數替換結果:

    • datetime1=$[yyyy-mm-dd]=2025-07-20

    • datetime2=$[hh24:mi:ss-1/24]=09:30:00

    • pt=2025-07-20 09:30:00

取前一天時間,精確到秒,且年月日與時分秒之間無空格:

2025071910:30:00

不支援

  • 調度參數賦值:datetime=$[yyyymmddhh24miss-1]

  • 代碼引用:pt=${datetime}

  • 參數替換結果:

    • datetime=$[yyyymmddhh24miss-1]=2025071910:30:00

    • pt=2025071910:30:00

取前一天時間,精確到秒,且年月日與時分秒之間有空格:

20250719 10:30:00

不支援

  • 調度參數賦值:datetime1=$[yyyymmdd-1] datetime2=$[hh24:mi:ss]

    說明

    您需要自訂兩個參數datetime1和datetime2,兩個參數間使用一個空格分隔。

  • 代碼引用:pt=${datetime1} ${datetime2}

  • 參數替換結果:

    • datetime1=$[yyyymmdd-1]=20250719

    • datetime2=$[hh24:mi:ss]=10:30:00

    • pt=20250719 10:30:00

相關文檔