DataWorks為您提供迴圈節點(do-while節點),您可以重新編排do-while節點內部的商務程序,將需要迴圈執行的邏輯寫在節點內,再編輯end迴圈判斷節點來控制是否退出迴圈。同時您也可以結合賦值節點來迴圈遍曆賦值節點傳遞的結果集。本文通過實現簡單和複雜情境的樣本,為您介紹如何配置do-while節點。
前提條件
已瞭解迴圈節點內部可根據業務需要自訂待迴圈的商務程序。節點群組成與流程編排。
已瞭解迴圈節點內部可通過變數擷取迴圈相關參數。詳情請參見內建變數。
已瞭解迴圈節點的內部節點中Start節點代表迴圈開始,End節點用於自行定義迴圈退出邏輯。詳情請參見退出迴圈樣本:End節點代碼範例。
已瞭解迴圈節點測試與日誌查看注意事項。詳情請參見注意事項。
使用限制
僅DataWorks標準版及以上版本支援使用do-while節點。詳情請參見DataWorks各版本詳解。
do-while節點迴圈次數上限為128次。
不支援並發執行。即上次迴圈完成後才可進入下一次迴圈。
建立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開始標識該次迴圈相對於第一次迴圈的次數位移量。