DataWorks為您提供循環節點(do-while節點),您可以重新編排do-while節點內部的業務流程,將需要循環執行的邏輯寫在節點內,再編輯end循環判斷節點來控制是否退出循環。同時您也可以結合賦值節點來循環遍歷賦值節點傳遞的結果集。本文通過實現簡單和復雜場景的示例,為您介紹如何配置do-while節點。
前提條件
已了解循環節點內部可根據業務需要自定義待循環的業務流程。節點組成與流程編排。
已了解循環節點內部可通過變量獲取循環相關參數。詳情請參見內置變量。
已了解循環節點的內部節點中Start節點代表循環開始,End節點用于自行定義循環退出邏輯。詳情請參見退出循環示例:End節點代碼樣例。
已了解循環節點測試與日志查看注意事項。詳情請參見注意事項。
使用限制
僅DataWorks標準版及以上版本支持使用do-while節點。詳情請參見DataWorks各版本詳解。
do-while節點循環次數上限為1024次。
不支持并發執行。即上次循環完成后才可進入下一次循環。
創建do-while節點
進入數據開發頁面。
登錄DataWorks控制臺,切換至目標地域后,單擊左側導航欄的 ,在下拉框中選擇對應工作空間后單擊進入數據開發。
創建do-while節點。
在數據開發頁面,鼠標懸停至圖標,單擊
。您也可以打開相應的業務流程,右鍵單擊通用,選擇
。在新建節點對話框中,輸入節點名稱及路徑。
單擊確認。
應用示例
本節為您介紹如何使用循環節點循環5次,并在每次循環中打印出當前的循環次數的端到端操作步驟。
編輯節點業務代碼
do-while節點默認包含Start、Shell和End三個節點:
Start節點是一個循環開始的標記節點,并無業務作用,不可刪除。
Shell節點是DataWorks提供的一個業務處理節點示例。
End節點具有標記循環結束和判斷是否開啟下一次循環的功能,此處用于定義do-while節點的結束條件,不可刪除。
您也可根據業務背景自定義do-while節點內部業務流程,將中間的Shell節點替換為其他節點。
雙擊Shell節點,進入節點的編輯頁面。
輸入以下代碼。
定義退出循環條件
定義當循環第5次時退出循環。
雙擊End節點,進入節點的編輯頁面。
在請選擇賦值語言下拉列表中,選中Python。
輸入以下代碼,定義do-while節點的結束條件。
提交do-while節點
單擊工具欄中的圖標,保存節點。
單擊工具欄中的圖標,提交節點。
提交時需在提交對話框中輸入變更描述,并根據需要選擇是否在節點提交后執行代碼評審。
重要您需要設置節點的重跑屬性和依賴的上游節點,才可以提交節點。
代碼評審可對任務的代碼質量進行把控,防止由于任務代碼有誤,未經審核直接發布上線后出現任務報錯。如進行代碼評審,則提交的節點代碼必須通過評審人員的審核才可發布,詳情請參見代碼評審。
如您使用的是標準模式的工作空間,任務提交成功后,需單擊節點編輯頁面右上方的發布,將該任務發布至生產環境執行,操作請參見發布任務。
測試并查看執行日志
do-while節點提交發布流程與普通節點一致,線上執行流程與普通節點一致,但不支持數據開發界面測試。
DataWorks為標準模式時,不支持在DataStudio界面直接測試運行do-while節點。
如果您想測試驗證do-while節點的運行結果,您需要將包含do-while節點的任務發布提交到運維中心,在運維中心頁面運行do-while節點任務。如果您在do-while節點內使用了賦值節點傳遞的值,請在運維中心測試時,同時運行賦值節點和循環節點。
單擊頁面右上方的運維,進入運維中心。
在左側導航欄,單擊
。選中相應節點,在右側的DAG圖中,右鍵單擊賦值節點,選中
。刷新補數據實例頁面,待補數據實例運行成功后,單擊實例后的DAG圖。
查看循環節點執行日志。
右鍵單擊do-while節點,選中查看內部節點。
循環節點這類組合節點需要查看內部節點才能看到具體執行日志。
do-while節點的內部循環體分以下三部分:
視圖左側為do-while節點的重跑歷史列表,只要do-while實例整體運行一次,歷史列表便會產生一條相應的記錄。
視圖中部為循環記錄列表,會列出當前do-while節點共運行多少次循環,以及每次循環的狀態。
視圖右側為每次循環的具體信息,單擊循環記錄列表中的某次循環,即可展示出該循環每個實例的運行情況。
在內部節點頁面,單擊左側的次數,并右鍵單擊相應節點,選中查看運行日志。
查看第N次循環的詳細執行日志。
在內部節點頁面,單擊左側的第5次,查看第5次循環Shell節點的日志。
由該示例可見,do-while節點的工作流程如下:
從Start節點開始運行。
按照定義的任務依賴關系依次運行每個任務。
在End節點中定義循環的結束條件。
一組任務運行完畢之后,運行End的結束條件語句。
如果End的判斷語句在日志中打印True,則從1開始繼續下一個循環。
如果End的判斷語句在日志中打印False,則退出整個循環,do-while節點整體結束。
總結
do-while與while、for-each和do-while三種循環類型對比如下:
do-while能夠實現先循環再判斷的循環體,即do…while語句,能夠通過系統的變量dag.offset結合節點上下文間接實現foreach語句。
do-while不能實現先判斷再循環的方式,即while語句。
do-while運行流程:
從Start開始按任務依賴關系依次運行循環體中的任務。
運行用戶在End節點中定義的代碼。
如果End節點輸出True,則繼續下一個循環。
如果End節點輸出False,則終止循環。
如何使用上下文依賴:do-while的內部節點可以通過${dag.上下文變量名}的方式引用到do-while節點定義的節點上下文。
系統參數:DataWorks會為do-while內部節點自動下發兩個系統變量。
dag.loopTimes:從1開始標識這一次循環的次數。
dag.offset:從0開始標識該次循環相對于第一次循環的次數偏移量。