1. 概述
本文講述如何在定時任務中配置並使用參數。

2. 步驟一:定義參數(必做)
FDL 中參數分為三類:任務內參數、全局參數、內建參數。如下圖所示:
注:「參數列表」介面展示的參數為該任務可使用的參數。

2.1 任務內參數
2.1.1 任務參數(自訂參數)
該參數詳細介紹請參見:自訂參數(靜態參數);設定的參數可以被當前任務內的所有節點引用。適用於參數值個數較少、參數值已明確不需要計算的場景。
參數生成位置:

參數生成說明:
1)自訂時間參數:
自訂時間參數需要基於系統內建參數 ${cyctime},透過對 ${cyctime} 加減實現時間的自訂,自訂的格式為:${時間格式+N} 或${時間格式-N}。
「時間格式」可以透過 yyyy、yy、mm、dd、hh、mi、ss 自由組合成 yyyy、mm、dd、yyyymm、mmdd、yyyymmdd、yyyy-mm-dd、yyyy-mm-dd hh:mi:ss 等,其中:
注:參數格式不支援:mi:ss、mi、ss
2)自訂常數參數
常數參數支援設定的類型有:「正文」、「數值」、「布爾」。範例如下:

2.1.2 指派參數
參數作用範圍:下游分支的所有節點;適用於參數值較多,且參數值儲存在資料庫表、API、檔案等位置中,需要將參數值取出、計算(該操作可不做)的場景。
在 FDL 中對資料經過複雜處理後,支援使用 參數指派節點、參數匯出 將處理後的結果匯出為參數。如下圖所示:

參數指派節點與參數匯出算子差別:
| 區分項 | 參數指派 | 參數匯出 |
|---|---|---|
| 位置 | 與「資料轉換」節點平級 | 資料轉換節點內使用 |
| 使用方法 | 可生成參數的值,並匯出參數,適用於參數值不需要經過複雜計算的場景
| 只能將其他算子處理的結果,匯出為參數,自己無法生成參數的值 若參數值需要複雜計算才能得出,可使用參數匯出算子
|
2.2 全局參數
參數作用範圍:可被當前工程所有定時任務使用;適用於參數值不需要經過複雜計算的場景。
參數類型支援:日期、正文、數值、布爾;設定內容與本文 2.1.1 節任務參數(自訂參數)相同。

可設定全局動態參數。如下圖所示:

2.3 內建參數
FDL內建參數,無需定義即可使用。如下圖所示:

3. 步驟二:設定參數預設值(建議做)
3.1 說明
本文 2.1.2 節 參數指派節點、參數匯出 的參數、2.2 節中的全局參數-指派參數,建議設定參數預設值,且參數預設值為有效的,即為參數預覽出的結果。如下圖所示:
注1:參數預設值只是為了便於下游節點預覽資料,不參與實際運作。
注2:若開啟閉包符,參數值將被單引號框起來,若後續節點引用參數時,需注意單引號/雙引號的使用,若再帶層單引號或雙引號,可能導致取數失敗;例如參數 a 值為 '北京' ,後續引用該參數時又帶了一層單引號('${a}'),則參數值會變為 ''北京''

便於後續節點使用參數,查看參數引用效果,確認任務設定是否正確。如下圖所示:

3.2 注意事項
3.2.1 參數值需為最新
若參數的值為動態變化的,建議更新參數預設值後,再預覽使用參數後的結果,保證預覽結果為最新資料。例如參數值為access_token(動態變化且過段時間失效),除錯任務時需要更新參數預設值。否則,下游節點預覽失敗。如下圖所示:

3.2.2 循環容器節點引用參數,參數預設值為多個
參數預設值可以填寫多個,如下圖所示:

「循環容器」節點中,若引用該參數,會將參數預設值原樣填入參數值中顯示預覽結果(若預設值為 5 個,後續節點引用時參數值為這 5 個),不會將參數預設值進行切分。如下圖所示:

任務實際運作時,會將參數一個個傳遞給「循環容器」節點,即不影響任務實際運作,只影響預覽結果。
所以,建議使用者填寫有效參數預設值,後續節點引用該參數後才能正常預覽結果。
4. 使用參數(必做)
4.1 節點使用參數
參數定義好後,可在節點、算子中使用參數查詢資料。
對於定義好的參數,引用方式有一些差異:
1)參數指派節點、參數匯出算子、全局參數-動態參數
此類參數如果定義的閉包符是正確的,那麼使用時直接用${參數名}即可。閉包符定義相關詳情參見:參數指派功能說明

範例說明:
此類參數在設定時,可設定閉包符:

若閉包符開關開啟,會自動給參數匯出的值加引號:
數值類型分隔:單個值範例:1;多個值範例:1,2,3
正文型分隔:單個值範例:'text';多個值範例:'text1','text2'
若匯出的資料是多個值,且值不是數值時,需要開啟閉包符。下游節點/算子引用該參數時,無需再加引號,直接用${參數名}即可。
若匯出的資料是多個值,且值不是數值時,沒有開啟閉包符,下游節點/算子引用該參數時,需要加上引號,為'${參數名}'
2)任務參數(自訂參數)、內建參數、全局參數-靜態參數
若參數為整數型態、雙精度型、布林型,直接用${參數名}的方式引用參數;
若參數值為字元類型、日期類型,需要加上單引號引用參數:'${參數名}'
3)特別情況說明
4.1.0 之前版本中,「循環容器」節點中引用參數時,會自動去掉參數的單引號,所以「循環容器」節點在使用正文型(分隔符選擇正文型分隔)參數需要手動加上單引號。
4.1.0 及之後版本,「循環容器」節點中引用參數時,不再自動去掉參數的單引號,所以「循環容器」節點在使用正文型(開啟閉包符)參數時無需手動加上單引號。
「參數指派節點+循環容器」場景中,若「參數指派」節點匯出參數的分隔符選擇「正文型分隔」,在循環容器內使用參數時加了單引號,升級到 4.1.0 及之後版本時,需要手動去掉單引號。
4.2 參數引用優先
當「參數指派」設定的參數與「自訂參數」和「內建參數」存在同名時,引用順序將採用如下優先:
整體優先:「參數指派」設定的參數>呼叫任務中父任務參數>「自訂參數」>「全局參數」>「內建參數」
區域性優先:由於一個任務中可建立多個「參數指派」,可能存在兩個及以上的同名參數可被下游節點引用,此時距離節點越近的「參數指派」參數優先越高。
注:循環容器內參數規則詳情參見:容器內參數規則
4.3 跨層級傳遞參數
可以選擇性地將任務參數和動態參數傳遞給子任務使用。
詳情請參見:呼叫任務
4.4 查看參數
全局參數:
設定全局參數的地方可查看所有建立的全局參數。如下圖所示:

任務內參數:
自訂參數(靜態參數)、參數指派節點、參數匯出設定的參數,開啟定時任務,點選「參數列表」,可查看該任務設定的這些參數:

5. 知識擴展
1)使用者有時需要時間類型的參數,自訂時間參數 不能滿足實際需要。例如,使用者需要獲取當月第一天、當月最後一天,並匯出為參數。此類複雜的時間參數獲取方法可參見:
注:使用者可使用其他算子、節點,處理資料,得到想要的參數值,再將參數匯出。
「參數指派」節點實現:「參數指派」節點中使用SQL語句獲取參數值,再將參數匯出:

使用Spark SQL 獲取參數值,再使用「參數匯出」算子將參數匯出,詳情請參見:使用SparkSQL构建日期列并循环取数、获取上月末、上年末等作为参数使用
2)參數支援加密後進行取數,詳情請參見:API采集数据专题
