全部產品
Search
文件中心

DataWorks:配置do-while節點

更新時間:Jun 19, 2024

DataWorks為您提供迴圈節點(do-while節點),您可以重新編排do-while節點內部的商務程序,將需要迴圈執行的邏輯寫在節點內,再編輯end迴圈判斷節點來控制是否退出迴圈。同時您也可以結合賦值節點來迴圈遍曆賦值節點傳遞的結果集。本文通過實現簡單和複雜情境的樣本,為您介紹如何配置do-while節點。

前提條件

使用限制

  • 僅DataWorks標準版及以上版本支援使用do-while節點。詳情請參見DataWorks各版本詳解

  • do-while節點迴圈次數上限為128次。

  • 不支援並發執行。即上次迴圈完成後才可進入下一次迴圈。

建立do-while節點

  1. 進入資料開發頁面。

    登入DataWorks控制台,切換至目標地區後,單擊左側導覽列的資料建模與開發 > 資料開發,在下拉框中選擇對應工作空間後單擊進入資料開發

  2. 建立do-while節點。

    1. 資料開發頁面,滑鼠移至上方至建立表徵圖,單擊建立節點 > 通用 > do-while

      您也可以開啟相應的商務程序,按右鍵通用,選擇建立節點 > do-while

    2. 建立節點對話方塊中,輸入節點名稱及路徑。

    3. 單擊確認

應用樣本

本節為您介紹如何使用迴圈節點迴圈5次,並在每次迴圈中列印出當前的迴圈次數的端到端操作步驟。簡單樣本

編輯節點業務代碼

說明

do-while節點預設包含StartShellEnd三個節點:

  • Start節點是一個迴圈開始的標記節點,並無業務作用,不可刪除。

  • Shell節點是DataWorks提供的一個業務處理節點樣本。

  • End節點具有標記迴圈結束和判斷是否開啟下一次迴圈的功能,此處用於定義do-while節點的結束條件,不可刪除。

您也可根據業務背景自訂do-while節點內部商務程序,將中間的Shell節點替換為其他節點。

  1. 雙擊Shell節點,進入節點的編輯頁面。

  2. 輸入以下代碼。

    echo ${dag.loopTimes} ----列印迴圈的次數。
    • ${dag.loopTimes}變數是系統的保留變數,代表當前的迴圈次數,從1開始,do-while的內部節點可以直接引用該變數。更多內建變數請參見內建變數取值案例

    • Shell節點中的代碼修改後請務必儲存,提交時不會進行提示。如果未儲存,最新的代碼不能及時更新。

定義退出迴圈條件

定義當迴圈第5次時退出迴圈。

  1. 雙擊End節點,進入節點的編輯頁面。

  2. 請選擇賦值語言下拉式清單中,選中Python

  3. 輸入以下代碼,定義do-while節點的結束條件。

    if ${dag.loopTimes}<5: 
     print True; 
    else: 
     print False;
    • ${dag.loopTimes}變數是系統的保留變數,代表當前的迴圈次數,從1開始,do-while的內部節點可以直接引用該變數。更多內建變數請參見內建變數取值案例

    • 代碼中把dag.loopTimes和5進行比較,可以限制整體的迴圈次數。第一次迴圈dag.loopTimes為1、第二次為2,以此類推,第五次為5。至此運算式${dag.loopTimes}<5結果為False,退出迴圈。

提交do-while節點

  1. 單擊工具列中的儲存表徵圖,儲存節點。

  2. 單擊工具列中的提交表徵圖,提交節點。

    提交時需在提交對話方塊中輸入變更描述,並根據需要選擇是否在節點提交後執行程式碼檢閱。

    重要
    • 您需要設定節點的重跑屬性依賴的上遊節點,才可以提交節點。

    • 程式碼檢閱可對任務的代碼品質進行把控,防止由於任務代碼有誤,未經審核直接發布上線後出現任務報錯。如進行程式碼檢閱,則提交的節點代碼必須通過評審人員的審核才可發布,詳情請參見程式碼檢閱

    如您使用的是標準模式的工作空間,任務提交成功後,需單擊節點編輯頁面右上方的發布,將該任務發布至生產環境執行,操作請參見發布任務

測試並查看執行日誌

do-while節點提交發布流程與普通節點一致,線上執行流程與普通節點一致,但不支援資料開發介面測試。

說明

DataWorks為標準模式時,不支援在DataStudio介面直接測試回合do-while節點。

如果您想測實驗證do-while節點的運行結果,您需要將包含do-while節點的任務發布提交到營運中心,在營運中心頁面運行do-while節點任務。如果您在do-while節點內使用了賦值節點傳遞的值,請在營運中心測試時,同時運行賦值節點和迴圈節點。

  1. 單擊頁面右上方的營運,進入營運中心

  2. 在左側導覽列,單擊周期任務營運 > 周期任務

  3. 選中相應節點,在右側的DAG圖中,按右鍵賦值節點,選中補資料 > 當前節點及下遊節點

  4. 重新整理補資料執行個體頁面,待補資料執行個體運行成功後,單擊執行個體後的DAG圖

  5. 查看迴圈節點執行日誌。

    1. 按右鍵do-while節點,選中查看內部節點

      迴圈節點這類組合節點需要查看內部節點才能看到具體執行日誌。

      do-while節點的內部迴圈體分以下三部分:

      • 視圖左側為do-while節點的重跑歷史列表,只要do-while執行個體整體運行一次,歷史列表便會產生一條相應的記錄。

      • 視圖中部為迴圈記錄列表,會列出當前do-while節點共運行多少次迴圈,以及每次迴圈的狀態。

      • 視圖右側為每次迴圈的具體資訊,單擊迴圈記錄列表中的某次迴圈,即可展示出該迴圈每個執行個體的運行情況。

    2. 在內部節點頁面,單擊左側的次數,並按右鍵相應節點,選中查看作業記錄

    3. 查看第N次迴圈的詳細執行日誌。

      在內部節點頁面,單擊左側的第5次,查看第5次迴圈Shell節點的日誌。

      執行日誌

      由該樣本可見,do-while節點的工作流程如下:

      1. 從Start節點開始運行。

      2. 按照定義的任務依賴關係依次運行每個任務。

      3. 在End節點中定義迴圈的結束條件。

      4. 一組任務運行完畢之後,運行End的結束條件陳述式。

      5. 如果End的判斷語句在日誌中列印True,則從1開始繼續下一個迴圈。

      6. 如果End的判斷語句在日誌中列印False,則退出整個迴圈,do-while節點整體結束。

總結

  • do-while與while、for-each和do-while三種迴圈類型對比如下:

    • do-while能夠實現先迴圈再判斷的迴圈體,即do…while語句,能夠通過系統的變數dag.offset結合節點上下文間接實現foreach語句。

    • do-while不能實現先判斷再迴圈的方式,即while語句。

  • do-while運行流程:

    1. 從Start開始按任務依賴關係依次運行迴圈體中的任務。

    2. 運行使用者在End節點中定義的代碼。

      • 如果End節點輸出True,則繼續下一個迴圈。

      • 如果End節點輸出False,則終止迴圈。

  • 如何使用上下文依賴:do-while的內部節點可以通過${dag.上下文變數名}的方式引用到do-while節點定義的節點上下文。

  • 系統參數:DataWorks會為do-while內部節點自動下發兩個系統變數。

    • dag.loopTimes:從1開始標識這一次迴圈的次數。

    • dag.offset:從0開始標識該次迴圈相對於第一次迴圈的次數位移量。