節點上下文參數是 DataWorks 中實現任務節點間動態資料傳遞的核心機制。它允許一個上遊節點(生產者)將其輸出值傳遞給一個或多個下遊節點,下遊節點接收到這些值後,可以在其代碼邏輯中引用,從而根據上遊的輸出動態調整自身的行為。這極大地增強了工作流程的靈活性和自動化能力。
工作原理
節點上下文參數通過在上遊節點(提供方)定義輸出參數,在下遊節點(使用方)引用該參數,實現值的傳遞。
上遊節點(提供方):負責產生一個值並將其作為輸出參數。提供值的方式有兩種:
傳遞常量或變數:在上遊節點的節點輸出參數地區,定義參數並為其賦值。值可以是常量(如
'abc')或系統上下文變數(如${status})。傳遞賦值結果:系統將節點代碼(如
SELECT 'table_A';)的最後一行查詢結果,捕獲並賦值給一個內建的輸出參數outputs,然後將這個參數的值傳遞給下遊節點。參數值取決於代碼的運行結果。賦值節點和部分 SQL 類節點支援此方式。
下遊節點(使用方):接收並使用上遊節點提供的值。
配置輸入參數:在下遊節點的節點輸入參數地區,添加輸入參數,並將其取值來源設定為上遊節點的輸出參數。
建立調度依賴:配置輸入參數後,系統會自動建立下遊節點對上遊節點的同周期調度依賴。
在代碼中引用:在下遊節點的代碼中,通過
${輸入參數名}的格式引用接收到的值。例如,若上遊節點傳遞了值table_A,下遊代碼中的SELECT * FROM ${input};在運行時會變為SELECT * FROM table_A;。
使用限制
產品版本:部分節點支援添加賦值參數功能(用於傳遞查詢結果),此功能需DataWorks為標準版及以上版本。
節點類型:支援添加賦值參數功能的節點類型有: EMR Hive、EMR Spark SQL、ODPS Script、Hologres SQL、AnalyticDB for PostgreSQL、ClickHouse SQL 和資料庫節點類型。
操作步驟
步驟一:配置上遊節點以輸出參數
登入DataWorks控制台,切換至目標地區後,單擊左側導覽列的,在下拉框中選擇對應工作空間後單擊進入Data Studio。
在資料開發面板,雙擊開啟目標上遊節點的編輯頁面。
單擊畫布右側的調度配置,在節點上下文參數地區,根據業務需求,選擇一種方式配置節點輸出參數。
方式一:傳遞常量或變數
方式二:傳遞賦值結果
使用賦值節點
賦值節點(即上遊節點)支援 MaxCompute SQL、Python 2和Shell三種語言,會自動將最後一條查詢或輸出結果賦值給節點的輸出參數(outputs),下遊節點可以通過引用該參數來擷取賦值節點的輸出結果。詳情參見:賦值節點。
使用賦值參數
在支援賦值參數的節點中執行以下操作:

在節點輸出參數地區,單擊添加賦值參數。
系統會自動添加名為
outputs的輸出參數。該參數無需配置,其值是本節點代碼的最後一行查詢結果。單擊儲存。
說明添加賦值參數後,賦值參數會將本節點查詢結果傳遞到引用該賦值參數的下遊節點。如果產生結果為空白,不會阻塞本節點運行,但下遊引用的節點可能會失敗。
具體使用方式可類比賦值節點中的MaxCompute語言使用方式。
輸出參數支援刪除操作。刪除輸出參數時,請確保下遊節點不再使用該參數,否則將影響下遊任務運行。
步驟二:配置下遊節點以使用參數
配置輸入參數
開啟下遊節點的編輯頁面,進入 配置頁面。在節點輸入參數地區,單擊添加參數。
配置輸入參數,從上遊節點的輸出參數中選擇一個作為本參數的取值來源,並為本節點定義一個參數名。
單擊工作欄的儲存完成參數添加。
建立依賴關係
綁定上遊節點的輸出參數後,系統會自動添加對該節點的同周期依賴,無需手動設定。
引用參數
在下遊節點的代碼中,通過
${輸入參數名}的格式引用參數。以下為 Shell 節點引用輸入參數
param的樣本:echo "The value from upnode is ${param}"若上遊節點使用賦值結果傳遞給下遊,參數值通常為二維數組或通過逗號分隔的一維數組,可參考以下方式擷取數組內的值:
若上遊為SQL節點(二維數組):
行:
${param[i]}。儲存格:
${param[i][j]}。
若上遊為Python/Shell (一維數組):
行:${param[i]}。
索引均從0開始。
步驟三:調試運行
上下文參數僅在工作流程觸發的周期執行個體中按調度順序傳遞。單獨運行下遊節點無法擷取上遊參數,會導致任務失敗。調試時,應從上遊節點開始,按商務程序順序執行。
返回工作流程,單擊工作流程上方工具列的運行,或按右鍵下遊節點,選擇運行到該節點。
在產生的DAG執行個體圖中,單擊節點查看作業記錄,並檢查結果是否符合預期。
系統上下文變數
系統變數 | 說明 |
${projectId} | 專案ID。 |
${projectName} | MaxCompute專案名。 |
${nodeId} | 節點ID。 |
${gmtdate} | 執行個體定時時間所在天的00:00:00,格式為yyyy-MM-dd 00:00:00。 |
${taskId} | 任務執行個體ID。 |
${seq} | 任務執行個體序號,代表該執行個體在當天同節點執行個體中的序號。 |
${cyctime} | 執行個體定時時間。 |
${status} | 執行個體的狀態:成功(SUCCESS)、失敗(FAILURE)。 |
${bizdate} | 業務日期。 |
${finishTime} | 執行個體結束時間。 |
${taskType} | 執行個體運行類型:正常(NORMAL)、手動(MANUAL)、暫停(PAUSE)、空跑(SKIP)、未選擇(UNCHOOSE)、周月空跑(SKIP_CYCLE)。 |
${nodeName} | 節點名稱。 |