博客 / 詳情

返回

實戰乾貨:Apache DolphinScheduler 參數使用與優化總結

在使用 DolphinScheduler 進行數據調度開發的過程中,參數的靈活運用是提升任務複用性、動態化執行邏輯的關鍵。無論是日常跑批任務中的日期處理,還是複雜工作流中的上下游傳參,掌握參數的正確使用方式,能極大提高開發效率與任務健壯性。本文基於海豚調度3.1.9版本將系統梳理 DolphinScheduler 中各類參數的使用方法,涵蓋內置參數、衍生函數、日期計算、全局變量設置以及跨任務參數傳遞等核心場景,助你徹底掌握參數使用的“正確姿勢”。

內置參數

DolphinScheduler 提供了幾個常用的系統級內置參數,主要用於獲取調度實例的執行時間。這些參數無需定義,直接引用即可。

基礎參數

  • SHELL 案例

d8f093fdbda77c78ec551a42fb0bc5fd

但是這種方式在SQL節點下 不適用,SQL下使用衍生內置函數會比較方便

衍生內置參數

為解決 SQL 節點無法使用 ${} 參數的問題,DolphinScheduler 提供了強大的 $[...] 衍生函數語法,支持任意格式的日期拼接與運算,推薦在所有場景中優先使用。

簡單案例

  • shell案例

  • SQL案例

aa1b5297c428957afe4ab2abd14b2e0e
結果如下:

47a5b0f03689bbe97cc2e01ed0ff7cdc

日期月份增減變化

若需按月計算(考慮大小月、閏年),可使用 add_months() 函數

  • shell 案例,獲取前一個月日期

7a77e5d4aab26156a4c5ddac8a1abefe

執行結果如下

a87f114a006d47b88baf019e3e68599f

  • PG案例,下一個月

a887fc6a5541c34837d0f156f51143ab

執行結果如下

d6fc84bc43b500fc9129a262a6f68f4e

其他時期增減

直接加減數字 在自定義格式後直接“+/-”數字

後 N 周:$[yyyyMMdd+7*N]
前 N 周:$[yyyyMMdd-7*N]
後 N 天:$[yyyyMMdd+N]
前 N 天:$[yyyyMMdd-N]
後 N 小時:$[HHmmss+N/24]
前 N 小時:$[HHmmss-N/24]
後 N 分鐘:$[HHmmss+N/24/60]
前 N 分鐘:$[HHmmss-N/24/60]
  • shell案例

6961f42480a4f6de9058a85ecc0b18cf

執行結果如下

4244d6fcb9ca757ae10234d0720310e1

  • SQL案例

f0a4892e7d30bbd09993eb7c47d24150

執行結果如下:

fd0c3b4b0cc1d2a3aa2d30e1f909383a

TIPS :一般建議使用衍生內置函數,即$[]的方式,比較直觀且通用。

單個任務節點中使用參數

b26ad39efd173ed70160e47dc364f671

TIPS: 不要在別名的地方使用自定義參數,會觸發BUG

例如 下圖,

9603f3f2ba7128d4c10f012ac38219fb

工作流全局參數

當多個任務需要使用相同的自定義變量(如環境標識、項目編號等),可通過工作流全局參數統一管理。

  • 案例
    下面三個節點用一個參數

shell案例

echo ${my_param}

SQL案例

SELECT name  
FROM test_datax_hive 
WHERE 
dt = DATE_FORMAT('$[yyyy-MM-dd-1]', 'yyyy-MM-dd')  
and name = ${my_param}

python案例

print('${my_param}')

在每個節點的地方不需要設置參數,只需要在工作流保存的時候設置參數即可。如下圖。

10d49b1775af3cf38c5bd57f6a2a2db5

工作流參數傳遞

DolphinScheduler 支持在任務之間傳遞運行時生成的參數,適用於“上游查詢結果 → 下游處理”的場景。

只有SQL和SHELL任務可以往下傳遞參數。

SQL SHELL PYTHON可以接受上一個節點傳遞的參數。

下面通過案例來演示實際操作。

  1. SQL向下傳遞參數

在工作流中新建一個SQL節點。如下圖。

a7560386863314f05fae4cc8d674cd78

  1. 參數名要始終保持相同,這裏使用my_name作為參
  2. 自定義參數中也使用my_name作為參數,選擇OUT類型,用於往下傳遞

然後建SHELL類型任務,如下圖

abfb9cc8a333e8a5546db2fe51461320

參數名保持相同,依舊是OUT類型。

再建一個PYTHON類型任務。如下圖

2d6a4d7ac630785c006c5bf194007fef

參數名保持相同。

最後,把工作流連起來,如下圖

22f3ae410ce5273ecd7bc5b55bd00438

最後看運行日誌,來驗證。

SQL執行結果

1c524169cb7dc70bed38acc2849bc454

SHELL 運行結果,參數被成功賦值

f2359c19d65761dbed67529b1f6eb3ab

PYTHON運行結果,參數被成功賦值

  1. SHELL向下傳遞參數

創建shell腳本,參數名要一致。

0903d5d08c5bf5718cd5672d538f4ab2

${setValue(key=value)} 的語句,key 為對應參數的 prop,value 為該參數的值。

在SQL節點接收參數

3d17d769d9d5330b446525d601d9da35

參數名保持一致。

PYTHON任務中接收參數

e1706743faf2fc12e20ebf5531c7aa8e

執行結果:

  • SHELL

59cc46a61d4248724463fe9c63b552dc

  • SQL

a3412ee294f0e29b624770aae59f16fc

  • PYTHON

702e7a2e296add044c12014a9f46dd29

參數使用總結

  1. IN 表示局部參數僅能在當前節點使用
  2. OUT 表示局部參數可以向下遊傳遞。參數優先級:DolphinScheduler
  3. 參數的優先級從高到低為:本地參數 > 上游任務傳遞的參數 > 全局參數
user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.