全部產品
Search
文件中心

DataWorks:do-while節點

更新時間:Oct 28, 2025

DataWorks為您提供迴圈節點(do-while節點),您可以重新編排do-while節點內部的商務程序,將需要迴圈執行的邏輯寫在節點內,再編輯結束迴圈判斷節點來控制是否退出迴圈。同時您也可以結合賦值節點來迴圈遍曆賦值節點傳遞的結果集。

節點介紹

在do-while節點中,您可根據業務需要重新編排迴圈節點內部商務程序,將需要迴圈執行的商務邏輯放入迴圈節點內部,並通過迴圈節點內部的End節點來定義迴圈條件,即確認不滿足何種條件的情況下退出迴圈。迴圈節點可單獨使用,也可結合賦值節點來迴圈遍曆賦值節點傳遞的結果集。

前提條件

  • RAM帳號添加至對應空間(可選)。

    進行任務開發的RAM帳號已被添加至對應工作空間中,並具有開發空間管理員(許可權較大,謹慎添加)角色許可權。新增成員並授權,詳情請參見為工作空間增加空間成員

  • 對應空間已綁定Serverless資源群組。詳情請參見:使用Serverless資源群組

  • 進行do-while節點開發前,需建立對應的do-while節點,詳情請參見:建立調度工作流程的節點

使用限制

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

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

注意事項

維度

分類

說明

迴圈支援

迴圈次數上限

do-while節點最多支援迴圈128次,End節點控制迴圈次數時,如果超過了128次,則運行會報錯。

內部節點

流程編排

  • 自訂迴圈任務節點時,您可以刪除內部節點間的依賴關係,重新編排迴圈節點內部商務程序,但需要分別將Start節點End節點作為do-while節點內部商務程序的首末節點。

  • 在do-while節點的內部節點使用分支節點進行邏輯判斷或者結果遍曆時,需要同時使用歸併節點

  • do-while節點的內部節點End節點在代碼開發時,不支援添加註釋。

取值

提供內建變數擷取上遊賦值節點的輸出值。

調試運行

任務調試

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

如果您想測實驗證do-while節點的運行結果,您需要將包含do-while節點的任務發布提交到開發環境營運中心,在開發環境營運中心頁面運行do-while節點任務。

查看日誌

在營運中心查看do-while節點的執行日誌時,您需要按右鍵執行個體,選擇查看內部節點來查看內部節點的執行日誌。

上下遊依賴

依賴設定

迴圈節點可單獨使用,也可結合賦值節點使用,在營運中心執行任務時,選擇補資料功能,並同時選中執行賦值節點與迴圈節點,單獨運行迴圈節點將無法擷取到賦值節點傳遞的值。

內建變數

通常,do-while節點使用${dag.變數名}格式來擷取變數。DataWorks為您提供了兩個系統內建變數${dag.loopTimes}、${dag.offset};同時,您也可以結合賦值節點,通過${dag.變數名}格式擷取賦值參數值。

  • 系統內建變數

    每次任務迴圈運行時,您可以通過一些內建的變數來擷取當前已迴圈次數和位移量。

    內建變數

    含義

    取值

    ${dag.loopTimes}

    當前已迴圈次數。

    第一次迴圈為1、第二次為2、第三次為3…第n次為n。

    ${dag.offset}

    位移量。

    第一次迴圈為0、第二次為1、第三次為2…第n次為n-1。

  • 擷取賦值節點結果

    如果您聯合使用了賦值節點,則還可以通過以下方式來擷取賦值參數值和迴圈變數參數。

    說明

    當do-while節點依賴賦值節點時,您可將賦值節點的本節點輸出參數設定為do-while節點的本節點輸入參數,在do-while節點中擷取賦值節點的結果集與結果集中的指定節點。格式為${dag.變數名},其中,變數名需配置為do-while節點的本節點輸入參數。本文樣本定義do-while節點中的input參數(即本節點輸入參數)來接收賦值節點結果集,實際使用時,需替換為您真實的參數名稱。

    內建變數

    含義

    ${dag.input}

    上遊賦值節點傳遞的資料集。

    ${dag.input[${dag.offset}]}

    迴圈節點內部擷取當前迴圈的資料行。

    ${dag.input.length}

    迴圈節點內部擷取資料集長度。

步驟一:do-while節點開發

do-while節點開發說明

do-while節點預設包含image開始、image結束,以及do-while迴圈體三部分組成

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

  • do-while迴圈體:可添加不同節點進行業務處理

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

說明

您也可根據業務背景自訂do-while節點內部商務程序,將中間的do-while迴圈體添加更多節點。

配置do-while節點

進入do-while節點,預設包含image開始、image結束,以及do-while迴圈體三部分,配置do-while節點。

  1. 單擊迴圈體的建立內部節點,在下拉框裡選擇Shell節點,並對Shell節點進行命名。

    重要

    此處僅示範Shell節點,您可按需建立多個節點編排成流。

  2. 編輯Shell節點。

    1. 按一下滑鼠迴圈體內建立的Shell節點,右鍵選擇開啟節點,進入Shell節點編輯頁面。

    2. Shell節點開發:

      echo ${dag.loopTimes} ----列印迴圈的次數。
      說明
      • do-while節點的image開始的邏輯是固定的,不可以編輯。

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

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

  3. 單擊工具列的image表徵圖,儲存Shell節點。

定義退出迴圈條件

進入do-while節點,預設包含image開始、image結束,以及do-while迴圈體三部分,配置image結束部分,定義該迴圈第5次時退出迴圈。

  1. 滑鼠右鍵單擊image選擇開啟節點,點擊右下角工具列image將語言切換成Python

  2. 編輯以下代碼,定義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,退出迴圈。

  3. 單擊工具列的image表徵圖,儲存image結束節點。

儲存並發布do-while流程

配置完成do-while迴圈體Shell節點後退出迴圈條件後,返回至工作流程中,單鍵發行,將上遊賦值節點與do-while進行發布,詳情請參見:節點/工作流程發布

測試並查看測試結果

  1. 發布完成的任務,將按照您配置的任務調度進行周期運行,可在營運中心 > 任務營運 > 周期任務營運 > 周期任務中查看發行的周期任務,並對任務進行營運操作。

  2. 在周期任務頁面,對do-while節點和遊的賦值節點進行補資料 > 當前節點及下遊節點,詳情請參見執行補資料並查看補資料執行個體(新版)

附錄: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開始標識該次迴圈相對於第一次迴圈的次數位移量。