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.
Start düğümü → döngü gövdesi (görevleri yürüt) →
End düğümü (koşulu değerlendir)
Başlatma ve yürütme: Döngü
düğümünden başlar. Döngü gövdesindeki tüm görevleri en az bir kez yürütür.Koşulu değerlendirme: Döngü gövdesi tamamlandıktan sonra
düğümü çalışır. Koşul mantığını bu düğümde yazın.-
Döngü kararı:
düğümü Truedizesini çıktılarssa 1. adımdan itibaren yeni bir yineleme başlar.
düğümü Falsedizesini çı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:
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.
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 TrueveyaFalsedizesini çı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:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(Yalnızca iki boyutlu diziler için) |
Ö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)
İş akışınızda bir
do-whiledüğümü oluşturun.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_timesolarak belirleyin.Düğüme sağ tıklayın ve Open Node seçeneğini belirleyin.
-
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}" Düğümü kaydetmek için kaydet simgesine tıklayın.
2. Adım: Çıkış koşulunu tanımlama
Do-while düğümünün dahili tuvaline dönün,
End düğümüne sağ tıklayın ve Open Node seçeneğini belirleyin.Dili Python olarak değiştirin.
-
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 End düğümünü kaydedin.
3. Adım: Dağıtma, çalıştırma ve doğrulama
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.
Operation Center bölümüne gidin ve
do-whiledüğümünü bulun.Düğüme sağ tıklayın ve test çalıştırması başlatmak için Backfill Data > Current Node seçeneğini belirleyin.
Örnek başarıyla çalıştıktan sonra düğüme tekrar sağ tıklayın ve View Internal Nodes seçeneğini belirleyin.
-
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
Bir atama düğümü oluşturun (örneğin adı
assign_sql_dataolabilir) ve bunudo-whiledüğümünün yukarı akışı olarak ayarlayın.-
Düğümde veri sorgulamak için ODPS SQL kullanın:
SELECT 'user_A', 'beijing' UNION ALL SELECT 'user_B', 'shanghai'; Düğümü kaydedin.
outputsparametresi 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
do-whiledüğümünün sağ tarafındaki Schedule Settings panelinde Input Parameters of This Node bölümünü bulun.-
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.outputsseçeneğini belirleyin
-
do-whiledüğü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}]}" -
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 İş 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ı
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|