調度參數是DataWorks的核心功能,用於在任務自動調度時動態替換代碼中的時間參數。它解決了在週期性任務中寫入程式碼日期的維護難題,使商務程序能自動適配不同的業務日期和執行時間。本文為您介紹調度參數的參數值支援的格式及相關使用。
閱讀此文檔前,請先閱讀並理解調度參數的配置方式,參見: 配置並使用調度參數。
參數運算式
調度參數通過定義參數名和參數值來定義賦值邏輯,其中參數值支援時間參數、系統內建參數、常量等多種形式。定義完成後即可在代碼中,通過${參數名}的方式來引用。
自訂時間參數:如
${...}和$[...],可在兩種時間基準值(業務日期和定時時間)的基礎上進行變換,詳見:自訂時間參數。系統內建參數:如
$bizdate、$bizmonth、$jobid,可用於擷取業務日期、業務月份、商務程序ID等,不局限於時間類型。詳見:系統內建參數。常量:如
'123','abc'等。
其中時間參數是調度參數的主要應用情境,用於在任務運行時動態替換各種時間字串。
特殊字元限制:參數運算式不支援空格和=。核心概念:時間基準
DataWorks的所有動態時間參數都基於以下兩種核心的時間基準。
概念 | 定義 | 參數值 | 自訂格式 | 時間精度 |
業務日期 | 通常指任務定時運行日期的前一天。在T+1的離線計算情境中,它代表需要處理的業務資料的發生日期。例如,今天統計前一天的營業額,此處的前一天,指交易發生的日期,也就是業務日期。 |
|
| 年月日 |
定時時間 | 指任務在調度配置中設定調度時間,在任務運行時會被系統替換為任務執行個體啟動並執行當天。它精確到秒,並獨立於任務的實際已耗用時間。 引用該時間為任務預期執行時間,與實際開始執行時間並非完全一致。任務實際開始執行時間受多方因素影響。 |
|
| 年月日時分秒 |
概念等價總結:
業務日期 ≈ 昨天 (資料的日期)=
$bizdate=${yyyymmdd}定時時間 ≈ 今天 (任務啟動並執行時間)=
$cyctime=$[yyyymmddhh24miss]
一個典型的T+1任務就是:在今天(定時時間)的淩晨,啟動一個任務,去處理昨天(業務日期)的資料。
以下為$bizdate與${yyyymmdd}、$cyctime與$[yyyymmddhh24miss]的參數定義和業務日期為2025-10-16時的預覽結果。
|
|
若基準時間的參數傳回值不滿足要求,也可以通過${...}和$[...]進行自訂時間參數,自訂時間參數是在兩種基準時間的基礎上進行變換,支援以下幾種方式:
通過自訂方式對調度參數進行賦值時,需注意區分兩種括弧的格式{...}和[...],兩種模式的基準值不同,返回的參數值也截然不同,避免造成生產資料錯誤。
自訂時間參數
DataWorks支援通過${...}和$[...]來擷取業務時間和定時時間,並支援通過以下幾種類型,對時間進行靈活變換,以符合業務需要。以節點配置的調度時間為天調度,調度時間02:30:45為例。假設業務日期為20251031,以下是基準時間:
業務日期:${yyyymmdd}的取值為20251031。
定時時間:$[yyyymmddhh24miss]的取值為20251101023045。
重要定時時間為預設的調度時間,在任務執行個體化時已固定。如任務執行個體因資源受限或上遊節點狀態等原因延遲運行,定時時間不會隨著執行個體實際已耗用時間而改變。
${...} 與 $[...] 核心區別
首先瞭解兩者的核心區別。${...} 和 $[...] 兩種格式在時間基準和計算能力上存在本質區別,混用這兩種格式可能導致資料錯誤。
對比維度 |
|
|
時間基準 | 業務日期(T-1) | 定時時間(T) |
時間精度 | 天 (年月日) | 秒 (年月日時分秒) |
位移計算能力 | 支援對 年、月、周、天 進行位移計算。 | 支援對 天、小時、分鐘 進行位移計算。 |
核心限制 | 不支援時、分、秒等更小時間單位的格式化與位移計算。 | 不支援通過 |
預設等價 |
|
|
時間格式化
使用大括弧${...}或$[...],結合yyyy、yy、mm及dd自訂群組合產生時間參數,擷取業務日期前後多少年、月、天。
代碼 | 描述 |
|
| ||
賦值方式 | 結果 | 賦值方式 | 結果 | ||
| 4位年份 |
|
|
|
|
| 2位月份 |
|
|
|
|
| 2位日期 |
|
|
|
|
| 24小時制小時 | 不支援(精度為天) | - |
|
|
| 12小時制小時 | - |
|
| |
| 分鐘 | - |
|
| |
| 秒 | - |
|
| |
| 取年月 |
|
|
|
|
| 格式化為用“-”拼接 |
|
|
|
|
| 格式化為用“-”拼接,並帶時分秒 | 不支援(精度為天) | - | 支援方式見字串拼接:方案2。 | |
位移計算
位移計算是動態參數的核心,可基於業務日期或定時時間進行前後加減。如在時間基準的基礎上實現擷取前後N年、月、日,或N小時、分鐘(小時分鐘僅支援定時時間)的時間計算。${...}和$[...]由於時間基準的精度不同,可支援的範圍也不一樣。
${...}模式的位移計算核心能力:支援對年、月、周、天進行整數位移。
重要不支援時、分的位移計算。即不支援${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}
$[...]模式的位移計算核心能力:支援對天、小時、分鐘進行分數位移。
重要$[...]無法根據$[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。實現:
提取年月部分:使用
${yyyymm}擷取當前業務日期的年月部分(例如,如果業務日期是20231027,則結果為202310)。拼接常量:將提取出的年月與字串
'01'進行拼接。參數調用:
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。實現:
設定兩個參數:分別為
datetime1和datetime2,並且分別賦值為datetime1=$[yyyy-mm-dd],datetime2=$[hh24:mi:ss-1/24/60]。拼接參數:將
datetime1和datetime2通過空格拼接。參數調用:pt=
${datetime1}${datetime2}。
結果:當任務運行時,
${datetime1}${datetime2}將被替換為:2023-11-01 02:30:45。
系統內建參數
DataWorks支援下表的系統參數,可用於設定調度參數的取值。但該方式靈活性差,時間格式固定,建議優先使用支援靈活變換的自訂時間參數。
內建參數 | 定義 |
$bizdate | 業務日期,格式為 該參數的應用較為廣泛,日常調度中預設任務預期已耗用時間的前一天為業務日期。 |
$cyctime | 任務的定時時間,格式為 |
$gmtdate | 當前日期,格式為 該參數預設取當天日期,執行補資料操作時輸入的日期為 |
$bizmonth | 業務月份,格式為
|
$jobid | 任務所屬的商務程序ID。 |
$nodeid | 節點ID。 |
$taskid | 節點產生的執行個體ID。 |
附錄
補資料時的參數替換
任務提交至營運中心後,可以通過執行補資料操作批量產生並執行指定日期範圍內的歷史任務執行個體,以完成資料的修複、回補或回溯分析。
業務日期($bizdate):補資料時選擇的業務日期和$bizdate的替換結果保持一致。若調度參數使用
${...}自訂格式,其基準時間即為選中的日期,隨後根據指定的時間運算式進行變換。定時時間($cyctime):執行補資料時,$cyctime替換結果為
選擇的業務日期+1天。例如,補資料選擇的業務日期為
20250315,則執行補資料時,$cyctime參數的替換結果為20250316000000。若調度參數使用$[...]格式,其基準時間為選中的業務日期+1,隨後根據指定的時間運算式進行變換。
調度參數與業務日期、定時時間、實際已耗用時間的關係
關係類別 | 說明及樣本 |
調度參數與實際已耗用時間的關係。 | 調度參數替換值在執行個體產生時已確定,因此,調度參數的替換值不會隨著執行個體實際已耗用時間的改變而發生變化。 |
調度參數與任務定時時間的關係。 | 當調度參數設定為 例如,當前節點為小時調度節點,並且設定定時調度時間為
|
調度參數與業務日期、定時時間的關係。 |
關於夏令時說明
DataWorks可保障在進入和退出夏令時當天,任務能夠正確運行。進入與退出夏令時切換產品側的解決方案詳情,請參見相關文檔情境:夏令時切換對調度任務啟動並執行影響。為避免夏令時切換對您任務執行造成額外理解成本,建議實施夏令時的地區優先查看此文檔。
常見問題
使用調度參數的常見問題參見:調度參數常見問題。

