工作流程(Workflow)是基於任務依賴關係實現流程自動化的管理工具。周期工作流程專註於定時迴圈的資料加工情境(如每日、每月),通過預設周期自動產生任務執行個體。它遵循“定時觸發+上遊就緒”雙重邏輯,確保複雜資料鏈路能夠穩定、有序地完成閉環運行。周期工作流程典型使用情境包括:
按固定時間周期自動執行資料處理任務:如每日、每小時、每周等頻率的資料同步、清洗或彙總等任務。
構建複雜的DAG依賴流程:通過可視化拖拽方式整合多種類型節點(如MaxCompute SQL、Hologres、EMR、Python等),並建立任務間的上下遊依賴關係,實現自動化調度。
統一調度管理多個子任務:將一組具有邏輯關聯的任務封裝在同一個工作流程中,以工作流程整體參與調度,便於維護和監控。
快速入門
本功能適用於 DataWorks 新版資料開發(Data Studio)。 如何區分新舊版,請參見常見問題與答疑。
這是一個最基礎、可直接執行的周期工作流程樣本。我們將構建一個虛擬節點(控制起點) → SQL 節點(資料加工)的簡單鏈路,並進行周期調度的例子。情境假設,每天淩晨自動計算前一天的訂單總數,並寫入結果表。
一、準備計算資源與資料
在目標工作空間中綁定MaxCompute為計算資源。
在MaxCompute中,建立一張如下結構的表,用以存放結果。
-- 建立一個簡單的結果表 CREATE TABLE IF NOT EXISTS dw_order_count_test ( order_date STRING, total_count BIGINT ) PARTITIONED BY (ds STRING); -- 以 ds 為分區,存放每天的統計結果
二、建立周期工作流程
進入DataWorks工作空間列表頁,在頂部切換至目標地區,找到目標工作空間,單擊操作列的,進入Data Studio。
若按鈕顯示為資料開發,進入的是舊版資料開發,請勿選擇。
單擊左側導覽列
,在專案目錄右側單擊,進入建立工作流程頁面。在建立工作流程對話方塊,選擇調度類型為周期調度,輸入相關資訊(例如,名稱為
minimal_daily_demo)並完成建立。
三、編排工作流程:拖拽節點與連線依賴
在開啟的工作流程畫布中,從左側組件面板拖入一個虛擬節點,命名為
start_node。虛擬節點僅用於定義業務起點,不會真正執行。
拖入一個 MaxCompute SQL 節點,命名為
count_orders。滑鼠點擊
start_node底部的圓點,拉線串連到count_orders的頂部,構建簡單的加工鏈路。
四、開發節點代碼
推薦啟用DataWorks Copilot 代碼編程助手,以獲得智能代碼補全建議,提升開發效率。
雙擊開啟
count_orders節點,進入節點代碼編輯器。編寫節點的商務邏輯代碼(此處使用類比統計資料)。
-- bizdate 是定義的調度變數,需在調度配置中指定含義 INSERT OVERWRITE TABLE dw_order_count_test PARTITION (ds='${bizdate}') SELECT '${bizdate}' as order_date, COUNT(*) as total_count FROM (SELECT 1 as id UNION ALL SELECT 2 as id) t; -- 類比資料具體節點開發,請參見MaxCompute SQL節點。
點擊節點編輯器頂部的儲存按鈕,完成儲存。
五、配置調度周期&參數
回到工作流程,在工作流程畫布的右側,點擊調度配置 > 調度時間標籤頁:
設定調度周期為日;
設定調度時間為
00:05(即每天淩晨 0 點 5 分運行)。
在
count_orders節點的編輯器右側,設定 ,添加參數名為bizdate且對應參數值為$[yyyymmdd-1](這表示“當前日期減一天”,即昨天)。
六、單節點調試 + 工作流程整體調試
count_orders節點調試:配置調試參數:單擊節點編輯頁右側的回合組態。
在計算資源中選擇步驟一準備的MaxCompute計算資源。
在指令碼參數中,填寫本次運行值,預設為當前日期的前一天。
調試運行任務:單擊工具列中的運行按鈕,此時將使用您在回合組態中的調試參數運行節點。
當運行效果符合預期之後,點擊右上方的同步至調度,將回合組態同步至調度配置。
工作流程整體調試:
返回工作流程畫布,單擊頂部工具列的
表徵圖。在彈出的對話方塊中,填寫工作流程的本次運行值(例如今天20260120,
bizdate應該被替換為20260119)。
七、發布到生產
返回工作流程,單擊頂部工具列的
按鈕。在發布面板中,系統會進行依賴和配置檢查。確認無誤後,單擊開始發布生產,選擇發布方式為全量發布。
發布成功後,前往營運中心,查看周期工作清單是否存在該工作流程。
此時您已完成一個最簡單的周期調度工作流程開發,該工作流程將在每日淩晨運行。
核心設計與配置
工作流程編排的核心邏輯是通過可視化DAG畫布,利用控制類節點(如歸併/分支節點等)和聯動類節點(如HTTP觸發器)組織任務結構,結合調度參數傳遞上下文,並通過調度依賴定義任務間的執行順序與觸發條件,以實現複雜資料處理流程的自動化與有序調度。
節點/工作流程編排
簡單流程編排
資料開發通常涵蓋從多源整合到分層建模(如 ODS、DWD 層構建)的複雜鏈路。DataWorks 通過可視化編排能力,將繁雜的邏輯拆解為功能各異的子節點,構建起標準化的處理流程。這種基於有向非循環圖(DAG)的編排模式,實現了狀態驅動的自動化流轉:上遊節點運行成功後即時觸發下遊任務,確保全鏈路加工過程線性穩定、有序閉環。此時的流程編排是最簡單的,是靜態、線性且不可回頭的DAG(有向非循環圖)。
複雜編排:流程式控制制
分支/歸併節點、for-each/do-while節點僅支援DataWorks標準版及以上版本。
流程式控制制類節點是實現資料開發從任務整合向業務編排跨越的核心組件。它突破傳統有向非循環圖(DAG)僅能表達單一線性依賴的局限,通過一系列精密的邏輯控制節點,賦予資料工作流程的邏輯表達能力。
節點名稱 | 節點描述 |
虛擬節點 | 作為空白跑節點,不執行實際計算,用於統籌管理多個子任務,作為工作流程的起始節點。例如,在商品訂單分析工作流程中,使用名為 說明 若單節點開發,則需要使用工作空間根節點作為起始依賴節點。 |
分支節點 | 根據上遊結果判斷走不同分支邏輯。例如,檢查每日訂單總額。若總額為 0,則觸發警示節點並停止後續計算;若總額大於 0,則繼續執行報表產生節點。 |
歸併節點 | 對多個分支的執行結果進行歸併,解決下遊依賴掛載問題。例如,財務結算任務依賴“正常結算”和“補賬邏輯”兩個分支,歸併節點確保無論走哪個分支,只要邏輯閉環後即觸發最後的報表歸檔。 |
遍曆節點 (for-each) | 遍曆賦值節點傳遞的結果集,對每個元素執行下遊操作。例如,針對賦值節點擷取的 31 個省份名稱,迴圈執行 31 次資料清洗任務,每次處理一個省份的資料分區。 |
迴圈節點 (do-while) | 迴圈控制,直到滿足條件之後繼續下一步。例如,每隔 10 分鐘調用一次外部介面查詢資料同步狀態。若傳回值為“處理中”,則繼續迴圈;若返回“完成”,則退出迴圈啟動後續加工。 |
更多詳情,請參見新版資料開發通用節點。
複雜編排:狀態感知與外部聯動
Check節點僅支援DataWorks專業版及以上版本;其他節點僅支援DataWorks企業版。
該類節點實現狀態感知與條件判定的核心組件。它不僅負責精準判定工作流程所依賴的實體資源或前置任務是否準備就緒,還通過與第三方系統的互動聯動,打破了資料平台與業務系統間的通訊壁壘。
節點名稱 | 節點描述 |
HTTP觸發器 | 接收外部系統HTTP請求,觸發DataWorks任務運行。例如,上遊業務系統完成日結後,調用HTTP介面觸發DataWorks的T+1資料加工流程。 |
Check節點 | 監控外部資源(如OSS檔案、MaxCompute分區)是否就緒,就緒後觸發下遊任務。例如,等待OSS中當日記錄檔上傳完成,Check節點檢測到檔案存在後,開機記錄解析任務。 |
依賴檢查節點 | 通過主動輪詢、邏輯組合與跨周期/跨空間依賴是否就緒,就緒後觸發下遊任務 ,實現對複雜調度觸發條件的精準控制。例如,日周期調度節點等待前一日全部24個小時任務完成。 |
更多詳情,請參見新版資料開發通用節點。
封裝子工作流程實現邏輯複用
周期工作流程支援通過SUB_PROCESS節點將一段穩定通用的子任務鏈路封裝成一個可複用的模組(子工作流程),供其他工作流程引用。例如,電商、廣告和IoT業務線可共用一個標準化處理流程,包括資料清洗、匯總統計、資料品質等。該流程可封裝為可被引用的子工作流程,提升開發效率。
操作路徑:
在計劃被引用的工作流程
child_workflow,將工作流程屬性設定為可被引用,此時該工作流程變成子工作流程。在主工作流程中,拖入SUB_PROCESS節點,選擇引用的工作流程為
child_workflow。
子工作流程具有以下約束:
內部性:該工作流程及其所有內部節點,不能配置任何對外部任務的依賴。
隔離性:該工作流程不能被任何外部任務直接設定為依賴。
被動觸發:發布後不會自動產生調度執行個體。它僅在被其他工作流程的
SUB_PROCESS節點調用時才會執行。更多詳情,請參見SUB_PROCESS節點。
工作流程拆分與模組化建議
為保持工作流程的可維護性和效能,建議將節點數超過 100 的大型工作流程進行拆分:
按業務域拆分:將不同業務主題(如交易、使用者、商品)的加工鏈路拆分為獨立的工作流程。
利用 SUB_PROCESS 封裝通用邏輯:將公用的、可複用的處理步驟(如資料清洗、格式化)封裝成“可被引用工作流程”。
調度依賴設定
調度依賴是保障資料加工順序性、一致性與準確性的核心機制。它通過定時時間滿足與上遊成功觸發的雙重邏輯,將孤立的任務串連成有序的資料生產線。當編排工作流程內的節點時,節點之間預設建立調度依賴。除了工作流程內節點上下遊的依賴之外,還可通過調度依賴設定更多複雜的依賴。
更多詳情,請參見調度依賴。
工作流程級依賴當整個工作流程需要作為一個整體,等待其他任務(另一個工作流程或獨立節點)完成後才能啟動時,使用工作流程級依賴。這適合將工作流程視為一個獨立的業務模組,例如銷售業務工作流程整體等待基礎資料工作流程產出後再啟動。 | 節點級依賴當工作流程中的某個特定節點需要等待一個不在此工作流程內的外部任務完成時,使用節點級依賴。這允許更精細化的跨流程編排。例如報表工作流程中的某一個匯總節點,需要等待外部財務系統的特定節點產出。推薦在上遊配置依賴檢查節點,保證依賴任務及時完成。 |
跨周期依賴任務自依賴是指一個任務的當前周期執行個體依賴其不同周期的執行個體,支援同節點自依賴或不同節點依賴。例如,使用 INSERT OVERWRITE 操作覆蓋寫入分區表的任務,或涉及存量累計計算的情境。開啟自依賴後,當天執行個體必須等前一天的執行個體成功後才能運行。 | 跨工作空間依賴當需要依賴其他 DataWorks 工作空間的任務時,可通過工作空間名和節點的輸出名/名稱/ID唯一關聯節點。適用於跨部門、跨專案的資料協作,例如營銷工作空間中的任務需要引用賬務工作空間的關鍵資料。 |
參數設計與流轉
工作空間參數僅支援 DataWorks 專業版及以上版本。
DataWorks 新版資料開發支援四種層級的參數傳遞機制,並可通過節點上下文參數實現靈活的跨節點動態資料傳遞。按範圍從低到高依次為:
節點參數在批處理任務中,當同一套 SQL 代碼需要每天處理不同的分區資料,可使用節點參數在代碼中動態定義日期。支援常量、內建變數以及自訂時間運算式等。 更多詳情,請參見調度參數來源及其運算式。 | 上下文參數通過上遊節點的輸出參數傳遞給下遊節點,實現動態值傳遞。支援常量、變數以及上遊運行結果。 更多詳情,請參見配置並使用節點上下文參數。 |
工作流程參數一個工作流程內可能有幾十個節點,它們需要共用一些特定的業務標識,手動逐個修改節點參數極易出錯。工作流程參數即可用來區分,並在工作流程內所有節點生效。 更多詳情,請參見工作流程參數。 說明 工作流程中的子工作流程支援直接引用工作流程的參數。 | 工作空間參數代碼在“開發環境”調試和“生產環境”運行時,串連的資料庫名稱、使用的資源路徑通常是不同的。此時,可通過在工作空間層級定義區分,適用於整個工作空間的所有節點。例如,定義工作參數 更多詳情,請參見使用工作空間參數。 |
調度周期設定
周期工作流程和舊版的商務程序核心區別在於,工作流程作為一個整體去設定調度周期,而商務程序僅是物理上的集合,不可整體設定調度周期。
調度周期僅支援在工作流程層級設定。工作流程內部節點只能設定順延強制時間,該時間是基於工作流程定義的定時時間進行累加計算。
維度 | 工作流程級配置 | 內部節點級表現 |
時間屬性 | 絕對時間(如 02:00) | 相對時間(基於工作流程調度時間的延遲) |
周期屬性 | 定義日/小時/分鐘/周/月/年周期 | 繼承工作流程周期,不可修改 |
觸發邏輯 | 物理時間到達 + 上遊成功 | 物理時間 + 延遲時間 + 上遊成功 |
調試與運行
完成節點和工作流程開發之後,需要進行單節點調試以及工作流程整體調試運行,以驗證是否滿足預期效果。
單節點調試
單節點調試側重於驗證單個節點內部的代碼邏輯,例如快速驗證一段 SQL 陳述式、Python 指令碼或Data Integration同步任務的正確性。該模式僅運行當前節點,不觸發上下遊依賴關係。
在節點右側回合組態中配置如下參數:
參數名稱
描述
計算資源
選擇綁定的計算資源。若無可用計算資源,可在下拉框中選擇建立計算資源。
重要需確保計算資源和資源群組網路連通,更多資訊請參見網路連通方案。
資源群組
選擇綁定計算資源時已通過測試連通性的資源群組。部分節點支援在資源群組上配置自訂鏡像,以擴充運行環境。
(可選)資料集
部分節點(例如,Shell、Python等)支援使用資料集,以訪問儲存在OSS或NAS中的非結構化資料。
(可選)指令碼參數
在配置節點內容時,通過
${參數名}的方式定義變數,需要在指令碼參數處配置參數名、參數值資訊,任務運行時會將它動態替換為真實的取值。詳情請參見調度參數來源及其運算式。(可選)關聯角色
部分節點(例如,Shell、Python等)支援配置關聯角色,以訪問其他雲產品資源。
在節點上方工具列,單擊儲存並運行節點任務。
在節點下方查看作業記錄,並查看運行結果。
工作流程調試
工作流程調試側重於驗證整個業務鏈路中多個節點間的資料依賴、參數傳遞及執行順序是否正確。當完成單節點調試後,可進行部分鏈路調試或整體工作流程調試。
在工作流程的 DAG 畫布頁面,點擊頁面頂部工具列的運行按鈕。也可選中節點,右擊選擇運行到該節點或從該節點運行,實現局部驗證。
在彈出的對話方塊中,為工作流程內所有節點變數(如
${bizdate})統一賦予本次調試的臨時值。系統將嚴格按照 DAG 圖定義的依賴關係,從上到下依次執行。在畫布上即時觀察節點狀態,並可單擊任意節點查看作業記錄。
此時,可點擊畫布左側返回按鈕,返回至工作流程開發狀態。
右側運行歷史展示工作流程的所有調試運行記錄。
所有涉及流程式控制制(迴圈、分支、歸併)的通用節點,均需置於工作流程中,並配合上下遊節點才能有效調試和執行。
管理與營運
複製工作流程
複製工作流程可快速完整地複製一個現有的工作流程,包括其內部所有節點、代碼和依賴關係,產生一個全新的、獨立的工作流程。操作入口在專案目錄,按右鍵目標工作流程,選擇複製。
複製操作極易引入潛在風險,因為它複製了幾乎所有配置。在提交和發布複製後的工作流程之前,務必逐一檢查以下配置,這被稱為“環境隔離”檢查:
產出表與目標資料來源:複製的工作流程代碼會和原工作流程寫入完全相同的目標表。必須修改代碼中的目標表名(例如,從
ods_user_table改為dev_ods_user_table),或修改節點輸出配置,以防止多個任務操作同一個表,引起資料衝突。上遊依賴:檢查工作流程的上遊依賴配置。複製後的工作流程預設仍會依賴原始的上遊任務。確認這是否符合你的預期,否則可能導致資料鏈路混亂或任務空跑。
參數配置:檢查工作流程及內部節點的自訂參數,特別是涉及日期分區(如
${bizdate})、輸入/輸出路徑等參數,確保它們在新環境下是正確的。
除了複製工作流程之外,同時支援工作流程內的節點複製,但不支援跨工作流程的節點複製。
版本管理
內部節點單獨發布,在工作流程中也會產生一個新的版本。
版本管理自動記錄工作流程的每一次變更,支援查看、對比歷史版本,並在必要時快速復原到任意一個歷史狀態,是保障任務穩定性和支援小組協作的關鍵功能。
在工作流程畫布右側,可以找到版本面板。在版本面板中,你會看到兩種記錄,理解它們的區別至關重要:
開發記錄:每次在畫布上點擊儲存時產生。它只是一個開發過程中的快照,用於防止代碼意外丟失。它不會影響線上正在啟動並執行任務。
發布記錄:當工作流程被成功發布到生產環境後產生。這才是線上調度系統實際執行的版本。線上任務出現問題時,我們主要關注發布記錄進行復原。
典型應用情境
故障快速復原:當線上任務因代碼變更而出錯時,可通過還原功能,一鍵將工作流程恢複到上一個穩定的發布版本,最大限度縮短故障時間。
變更審計與追溯:需要排查某個邏輯是什麼時候、由誰修改的時,可以通過版本列表和對比功能,清晰地追溯每一次代碼變更。
代碼找回:當不小心刪除了部分代碼邏輯且未儲存時,可以從最近的開發記錄中將其還原。
重要注意事項
還原作業會覆蓋當前開發區:執行還原操作,會用你所選的歷史版本內容,直接覆蓋掉當前畫布上的所有代碼和配置。強烈建議在執行還原前,如果當前畫布上有未提交的有效修改,請先將其手動複製到本地文字編輯器中進行備份。
還原後需要重新發布:還原操作僅僅是將代碼恢複到了開發態。這個恢複後的版本不會自動同步到線上。你必須手動發布,復原才能在生產環境中正式生效。
發布與營運
節點/工作流程發布:完成工作流程開發之後,將節點/工作流程發布至生產環境,此時開發環境的節點將產生生產環境對應的周期任務。詳情請參見節點/工作流程發布。
節點/工作流程營運:生產環境的工作流程,將根據調度配置進行周期性調度。前往營運中心查看周期工作流程的調度情況並執行相關營運操作。詳情請參見:周期任務基本營運操作、補資料執行個體營運。
任務運行機制
在調度情境下,工作流程整體是否返回成功狀態,會受到內部任務運行狀態的影響。
工作流程的整體成功與否,由其內部節點的最終狀態決定,遵循以下規則:
失敗:只要有一個關鍵節點運行失敗,整個工作流程執行個體通常會置為失敗。
凍結/暫停:工作流程內部有節點被手動凍結或暫停,且該節點是後續節點的上遊,會導致鏈路中斷,工作流程整體也會被置為失敗。
歸併(Join)節點:如果工作流程使用了歸併節點,其上遊分支中即使有節點失敗,只要歸併節點自身邏輯判斷可以成功,整個工作流程也可能返回“成功”。因此,需謹慎設計歸併節點的上遊檢查,防止“帶病運行”。
特殊情境說明:
凍結工作流程工作的補資料執行個體時,工作流程執行個體將會被置為成功狀態。
補資料情境下判斷任務無法執行時,工作流程會被置為失敗狀態。
執行個體狀態和實際失敗事件產生時間存在延遲。
配額與限制
節點數量限制:單個工作流程最多支援建立 400 個內部節點,但為保證畫布載入效能和可維護性,建議將節點數控制在 100 個以內。對於更複雜的情境,建議進行模組化拆分。
子工作流程限制:
啟用可被引用開關的工作流程,其自身及內部節點不能依賴任何外部任務,也不能被任何外部任務直接依賴。否則,發布時會報錯。
此類工作流程發布到生產環境後,預設不會自動產生調度執行個體,只有在被其他工作流程通過 SUB_PROCESS 節點引用時,才會作為子任務運行。
常見問題(FAQ)
Q:工作流程和商務程序區分?
A:工作流程是一個整體,商務程序只是一個檔案夾分類。
Q:為什麼調試能跑、周期調度失敗?
A:最常見的原因是環境不一致。請重點排查:
資源群組差異:調試時可能使用了個人或調試資源群組,而生產調度配置的是生產資源群組。請確認生產資源群組是否有效、有餘量且許可權正確。
許可權差異:生產環境運行帳號可能缺少對某些表、函數或資源的存取權限。
依賴差異:生產環境的依賴關係與開發環境不一致,或上遊依賴的產出在生產環境中不存在。
Q:為什麼執行個體一直等待/不運行?
A:執行個體運行需要依賴調度時間、調度資源、上遊依賴節點等條件完全滿足。
上遊依賴未完成:在營運中心查看執行個體的“依賴”視圖,檢查哪個上遊任務還未成功。
資源等待:計算資源群組隊列已滿,任務正在排隊等待資源。
工作流程/節點被凍結:檢查工作流程或其上遊節點是否被手動“凍結”或“暫停”。
執行個體未產生:確認目前時間是否已到達工作流程的定時調度時間點。如果任務剛發布,需要等到下一個調度周期才會產生執行個體。更多詳情,請參見執行個體產生方式:發布後即時產生。
Q:為什麼工作流程整體顯示失敗但部分節點成功?
A:這是由工作流程的狀態判定規則決定的:
關鍵路徑失敗:只要有一個下遊依賴未完成的節點失敗,整個工作流程就會被標記為失敗,即使其他平行分支已成功。
節點被凍結:內部有節點被凍結會導致工作流程整體失敗。