Tüm Ürünler
Search
Belge Merkezi

DataWorks:Do-while düğümü

Son Güncelleme:Oct 05, 2026

DataWorks, "önce çalıştır, sonra kontrol et" döngü mantığını uygulayan do-while düğümünü sunar. Bu düğüm; bir dosyanın varlığını yoklamak veya kaynak tükenene kadar verileri toplu iş olarak işlemek gibi dinamik bir koşul karşılanana kadar bir dizi görevi yinelemeniz gerektiğinde idealdir. Döngü gövdesi içinde bir görev akışı düzenleyebilir ve döngüden çıkışı kontrol etmek için özel bir End (Son) düğümü kullanabilirsiniz.

Kullanım senaryoları

Veri geliştirmede do-while düğümü, koşula dayalı olarak görevleri tekrarlı şekilde yürütmesi gereken iş akışlarının tasarımını basitleştirir. Yaygın kullanım alanları şunlardır:

  • API yoklama: API, belirli bir durum (örneğin SUCCESS) döndürene veya yanıt verileri gereksinimlerinizi karşılayana kadar API'yi tekrar tekrar çağırma.

  • Veri hazırlık kontrolleri: Yukarı akıştaki bir dosyanın veya veri bölümünün oluşturulmasını bekleme. Döngü her yinelemede veriyi kontrol eder ve veri kullanılabilir hale geldiğinde döngüden çıkarak aşağı akış görevlerini tetikler.

  • Toplu veri işleme: Bir atama düğümü gibi yukarı akış bir düğümden sağlanan tablo adları veya tarih bölümleri gibi öğe listelerini işleme. Do-while düğümü, liste tükenene kadar her seferinde bir öğe işleyerek listede ilerler.

  • Durum senkronizasyonu: Harici bir hizmetin durumunu tekrar tekrar kontrol etme. Hizmet durumu "Available" (Kullanılabilir) veya "Complete" (Tamamlandı) gibi istenen bir duruma geçtiğinde döngü sonlanır ve sonraki veri senkronizasyonu veya işleme iş akışı tetiklenir.

Kullanım notları

  • Sürüm gereksinimleri: Yalnızca DataWorks Standard Edition ve sonraki sürümlerde kullanılabilir.

  • İzinler: RAM hesabınızın hedef workspace içine eklenmiş ve developer veya workspace administrator rolü atanmış olması gerekir. Daha fazla bilgi için bkz. Add members to a workspace.

Çalışma prensibi

Do-while düğümü, "önce çalıştır, sonra kontrol et" mekanizmasına dayalı bir döngü kapsayıcısı olarak davranır.

image Start düğümü → döngü gövdesi (görevleri yürüt) → image End düğümü (koşulu değerlendir)

  1. Başlatma ve yürütme: Döngü image düğümünden başlar. Döngü gövdesindeki tüm görevleri en az bir kez yürütür.

  2. Koşulu değerlendirme: Döngü gövdesi tamamlandıktan sonra image düğümü çalışır. Koşul mantığını bu düğümde yazın.

  3. Döngü kararı:

    • image düğümü True dizesini çıktılarssa 1. adımdan itibaren yeni bir yineleme başlar.

    • image düğümü False dizesini çıktılarssa döngü sonlanır ve do-while düğümü başarılı olur.

Temel özellik : Döngü gövdesi, ilk koşul ne olursa olsun her zaman en az bir kez yürütülür.

Düğüm bileşenleri

Bir do-while düğümüne çift tıklayarak iç tuvalini açın; bu tuval üç ana bölümden oluşur:

  • image Start: Döngünün giriş noktasını işaretler. Bu düğümü düzenleyemez veya silemezsiniz.

  • Döngü gövdesi: Görevleriniz için özelleştirilebilir bir tuval. Tekrarlanabilir iş sürecini oluşturmak üzere Shell, SQL ve Python gibi çeşitli dahili düğüm türleri eklemek için Create Internal Node seçeneğine tıklayabilirsiniz.

  • image End: Döngü koşulunu değerlendirir. Bu düğüm, ODPS SQL, Shell veya Python kodu yazabileceğiniz bir atama düğümüdür. Döngünün devam edip etmeyeceğini belirlemek için True veya False dizesini çıktılar.

Yerleşik değişkenler

Do-while düğümünün döngü gövdesinde ve End düğümünde, geçerli döngü durumunu ve giriş verilerini almak için aşağıdaki yerleşik değişkenleri kullanabilirsiniz:


Yerleşik değişken


Açıklama


Sistem yerleşik değişkenleri


${dag.loopTimes}


Mevcut yineleme numarası; 1 değerinden başlar.


${dag.offset}


Mevcut yinelemenin ofseti; 0 değerinden başlar. ${dag.loopTimes} - 1 ifadesine eşdeğerdir.


Bir atama düğümüyle birlikte kullanım(Giriş parametresi input bir yukarı akış atama düğümünün çıkışına bağlıysa)


${dag.input}


Yukarı akıştan iletilen tam sonuç kümesini alır (genellikle iki boyutlu bir dizi).


${dag.input.length}


Sonuç kümesindeki satır sayısını (toplam öğe sayısını) alır.


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


Mevcut yinelemede işlenen veri satırını alır. Dönüş formatı virgülle ayrılmış bir dizedir (örneğin "user_A,beijing").


${dag.input[i][j]}

(Yalnızca iki boyutlu diziler için) i satırı, j sütunundaki tam değeri alır (dizinler 0'dan başlar).

Örnek: ${dag.input[0][1]} ifadesi, ilk satır ve ikinci sütundan "beijing" değerini çıkarır.

Notlar

  • Sürüm gereksinimi: Bu özellik yalnızca DataWorks Standard Edition ve üzeri sürümlerde kullanılabilir.

  • Döngü sınırı: Varsayılan maksimum yineleme sayısı 128'dir. Yapılandırılabilir maksimum değer 1024'tür. Bu sınırın aşılması görevin başarısız olmasına neden olur.

  • Yürütme mekanizması: Do-while düğümü seri yürütme modu kullanır ve eşzamanlı işlemeyi desteklemez. Her yineleme, bir sonraki başlamadan önce tamamlanmalıdır.

  • Hata ayıklama sınırlaması: Testi doğrudan Data Studio sayfasında çalıştıramazsınız. Önce iş akışını dağıtmanız, ardından görevi doğrulamak için Operation Center içindeki backfill data özelliğini kullanmanız gerekir.

  • Bağımlılık yayılımı: Do-while düğümü yukarı akış bir atama düğümüne bağımlıysa veri ardışık düzeninin eksiksiz olduğundan emin olmak için geri doldurmayı yukarı akış düğümünden başlattığınızdan emin olun.

  • Akış denetimi: Döngü gövdesi içinde bir Branch düğümü kullanıyorsanız iş akışının bozulmamasını sağlamak için tüm dal yollarının sonunda bir Merge düğümünde birleştiğinden emin olun.

Yordam: Basit bir döngü görevi oluşturma

Bu örnek, 5 kez dönen ve her döngüde mevcut yineleme numarasını yazdıran bir görev oluşturmanıza rehberlik eder.

1. Adım: Döngü gövdesini yapılandırma (Shell düğümü ekleme)

  1. İş akışınızda bir do-while düğümü oluşturun.

  2. Dahili tuvale girmek için düğüme çift tıklayın. Döngü gövdesi alanında Create Internal Node seçeneğine tıklayın, Shell öğesini seçin ve adını print_loop_times olarak belirleyin.

  3. Düğüme sağ tıklayın ve Open Node seçeneğini belirleyin.

  4. Kod düzenleyicisine aşağıdaki komutu girin:

    # Use the built-in variable ${dag.loopTimes} to get the current loop count
    echo "This is loop number: ${dag.loopTimes}"
  5. Düğümü kaydetmek için kaydet simgesine tıklayın.

2. Adım: Çıkış koşulunu tanımlama

  1. Do-while düğümünün dahili tuvaline dönün, image End düğümüne sağ tıklayın ve Open Node seçeneğini belirleyin.

  2. Dili Python olarak değiştirin.

  3. Aşağıdaki Python kodunu girin:

    # When the loop count is less than 5, output True and continue looping
    # When the loop count reaches 5, output False and exit the loop
    if ${dag.loopTimes} < 5:
        print True
    else:
        print False
  4. End düğümünü kaydedin.

3. Adım: Dağıtma, çalıştırma ve doğrulama

  1. Ana iş akışı tuvaline dönün ve tüm iş akışını dağıtmak için araç çubuğundaki Deploy seçeneğine tıklayın.

  2. Operation Center bölümüne gidin ve do-while düğümünü bulun.

  3. Düğüme sağ tıklayın ve test çalıştırması başlatmak için Backfill Data > Current Node seçeneğini belirleyin.

  4. Örnek başarıyla çalıştıktan sonra düğüme tekrar sağ tıklayın ve View Internal Nodes seçeneğini belirleyin.

  5. Beş döngü yinelemesini görüntüleyin. Herhangi bir yinelemeyi (örneğin 5. yinelemeyi) genişletin, içindeki print_loop_times örneğine sağ tıklayın ve View Runtime Log seçeneğini belirleyin. Aşağıdaki çıktıyı görmeniz gerekir:

    This is loop number: 5

Gelişmiş kullanım: Atama düğümü ile veri listesini işleme

Bu yaygın ve pratik bir senaryodur: Yukarı akış bir atama düğümü tarafından çıktılanan veri kümesini yinelemek ve işlemek için do-while düğümünü kullanma. Bu örnekte, yukarı akış bir ODPS SQL atama düğümü iki satır kullanıcı bilgisi sorgular ve do-while düğümü her satırı işler.

1. Adım: Yukarı akış atama düğümünü yapılandırma

  1. Bir atama düğümü oluşturun (örneğin adı assign_sql_data olabilir) ve bunu do-while düğümünün yukarı akışı olarak ayarlayın.

  2. Düğümde veri sorgulamak için ODPS SQL kullanın:

    SELECT 'user_A', 'beijing'
    UNION ALL
    SELECT 'user_B', 'shanghai';
  3. Düğümü kaydedin. outputs parametresi iki satır veri içeren iki boyutlu bir dizi çıktılar.

2. Adım: Veriyi tüketmek için do-while düğümünü yapılandırma

  1. do-while düğümünün sağ tarafındaki Schedule Settings panelinde Input Parameters of This Node bölümünü bulun.

  2. Add seçeneğine tıklayın ve aşağıdaki parametreyi yapılandırın:

    • Parameter Name: input (özelleştirilebilir)

    • Value Source: assign_sql_data.outputs seçeneğini belirleyin

  3. do-while düğümünün döngü gövdesinde bir Shell düğümü oluşturun ve mevcut satırı işlemek için aşağıdaki betiği girin:

    # Get the data row being processed in the current loop iteration
    echo "Processing data row: ${dag.input[${dag.offset}]}"
  4. image End düğümünü açın ve çıkış koşulunu tanımlamak için Python kullanın:

    # If the number of times executed is less than the total number of data rows, continue looping
    if ${dag.loopTimes} < ${dag.input.length}:
        print True
    else:
        print False
  5. İş akışını dağıtın ve Operation Center içinde verinin döngüye doğru aktığından emin olmak için geri doldurmayı **assign_sql_data düğümünden başlatın.

Başarılı bir çalıştırmadan sonra günlüklerde iki yinelemenin sırasıyla "user_A,beijing" ve "user_B,shanghai" verilerini işlediğini görebilirsiniz.

Ek: Do-while ve for-each düğümlerinin karşılaştırılması


Özellik


Do-while düğümü


For-each düğümü


Temel mantık


Koşul odaklı: Bir koşul artık karşılanmayana kadar yürütmeyi tekrarlar.


Veri odaklı: Giriş listesindeki her öğe için bir kez yürütür.


Yineleme sayısı


Belirsiz; koşulun ne zaman karşılandığına bağlıdır.


Kesin; giriş listesindeki öğe sayısına eşittir.


Yürütme garantisi


En az bir kez yürütür (ilk koşul zaten karşılanmamış olsa bile).


Giriş boşsa hiçbir yürütme gerçekleşmez.


Kullanım senaryoları


Yoklama, bekleme, durum kontrolleri ve kaynak tükenene kadar toplu işleme.


Bilinen bir listenin toplu işlenmesi (örneğin bir tablo kümesini senkronize etme veya birden çok bölümü işleme).


Denetim yöntemi


Döngünün devam edip etmeyeceğini belirlemek için End düğümünün True / False çıktısı ile denetlenir.


Tüm öğeler tarandıktan sonra otomatik olarak sonlanır.