All Products
Search
Document Center

DataWorks:Node do-while

Last Updated:May 27, 2026

DataWorks menyediakan node do-while, yang menerapkan logika loop "eksekusi dulu, lalu periksa". Node ini ideal ketika Anda perlu mengulang serangkaian task hingga suatu kondisi dinamis terpenuhi, seperti polling untuk memeriksa keberadaan file atau memproses data secara batch hingga sumbernya habis. Anda dapat mengatur alur task di dalam badan loop dan menggunakan node End khusus untuk mengontrol keluar dari loop.

Kasus penggunaan

Dalam pengembangan data, node do-while menyederhanakan desain workflow yang perlu mengeksekusi task berulang kali berdasarkan suatu kondisi. Kasus penggunaan umum meliputi:

  • Polling API: Panggil API berulang kali hingga mengembalikan status tertentu, seperti SUCCESS, atau hingga data respons memenuhi persyaratan Anda.

  • Pemeriksaan kesiapan data: Tunggu hingga file atau partisi data hulu selesai dibuat. Loop memeriksa keberadaan data pada setiap iterasi dan keluar begitu data tersedia, lalu memicu task hilir.

  • Pemrosesan data batch: Proses daftar item, seperti nama tabel atau partisi tanggal, yang disediakan oleh node hulu seperti assignment node. Node do-while melakukan iterasi melalui daftar tersebut, memproses satu item dalam satu waktu hingga daftarnya habis.

  • Sinkronisasi status: Periksa status layanan eksternal secara berulang. Begitu status layanan berubah menjadi keadaan yang diinginkan, seperti "Available" atau "Complete", loop berhenti dan memicu workflow sinkronisasi atau pemrosesan data berikutnya.

Persyaratan

  • Persyaratan versi: Fitur ini hanya tersedia di DataWorks Edisi Standar dan versi yang lebih baru.

  • Persyaratan izin: RAM user Anda harus menjadi anggota ruang kerja target dengan peran Development atau Workspace Manager. Untuk informasi selengkapnya, lihat Tambahkan anggota ke ruang kerja.

Cara kerja

Node do-while berfungsi sebagai kontainer loop berdasarkan mekanisme "eksekusi dulu, lalu periksa".

image node awalbadan loop (mengeksekusi tugas)image node akhir (mengevaluasi kondisi)

  1. Mulai dan eksekusi: Loop dimulai dari imageNode Start, dan semua task di dalam badan loop dieksekusi minimal satu kali.

  2. Evaluasi kondisi: Setelah badan loop selesai, imageNode End dijalankan. Anda menulis logika kondisional di node ini.

  3. Keputusan loop:

    • Jika imageNode End menghasilkan string True, iterasi baru dimulai.

    • Jika imageNode End menghasilkan string False, loop dihentikan, dan seluruh eksekusi node do-while dianggap berhasil.

Fitur utama: Badan loop selalu dieksekusi minimal satu kali, terlepas dari kondisi awal.

Komponen node

Klik ganda node do-while untuk membuka kanvas internalnya, yang terdiri dari tiga bagian utama:

  • image Node Start: Titik masuk loop. Tidak dapat diedit atau dihapus.

  • Badan loop: Kanvas yang dapat dikustomisasi untuk task Anda. Anda dapat mengklik Create Internal Node untuk menambahkan berbagai jenis node internal, seperti Shell, SQL, dan Python, guna membentuk proses bisnis yang dapat diulang.

  • image Node End: Node pengambil keputusan loop. Ini adalah assignment node yang menggunakan ODPS SQL, Shell, atau Python untuk menghasilkan string True atau False. String ini menentukan apakah loop dilanjutkan.

Variabel bawaan

Di dalam badan loop dan Node End node do-while, Anda dapat menggunakan variabel bawaan berikut untuk mengakses status loop saat ini dan data masukan:

Variabel

Deskripsi

Variabel bawaan sistem

${dag.loopTimes}

Nomor iterasi saat ini, dimulai dari 1.

${dag.offset}

Offset iterasi saat ini, dimulai dari 0. Nilainya sama dengan ${dag.loopTimes} - 1.

Digunakan bersama assignment node
(Dengan asumsi parameter input diikat ke output assignment node hulu)

${dag.input}

Mengembalikan seluruh set hasil dari node hulu, yang biasanya berupa array dua dimensi.

${dag.input.length}

Mengembalikan jumlah baris (elemen) dalam set hasil.

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

Mengambil baris data yang sedang diproses dalam iterasi saat ini dan mengembalikannya sebagai string yang dipisahkan koma, seperti "user_A,beijing".

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

Mengembalikan nilai pada baris i dan kolom j (pengindeksan berbasis nol).

Contoh: ${dag.input[0][1]} mengekstrak nilai "beijing" dari kolom kedua baris pertama.

Batasan

  • Persyaratan edisi: Fitur ini hanya tersedia di DataWorks Edisi Standar dan versi yang lebih baru.

  • Batas iterasi: Jumlah maksimum iterasi default adalah 128, dan dapat disesuaikan hingga maksimal 1.024. Melebihi batas ini menyebabkan task gagal.

  • Model eksekusi: Node ini menggunakan model eksekusi serial, artinya setiap iterasi harus selesai sebelum iterasi berikutnya dimulai.

  • Batasan debugging: Anda tidak dapat menjalankan dan menguji node do-while secara langsung di DataStudio. Anda harus terlebih dahulu mempublikasikan workflow, lalu menggunakan fitur Backfill Data di Operation Center untuk memverifikasi perilakunya.

  • Ketergantungan data: Jika loop bergantung pada assignment node hulu, pastikan Anda melakukan backfill data mulai dari node hulu untuk memastikan alur data lengkap.

  • Kontrol alur: Jika Anda menggunakan branch node di dalam badan loop, pastikan semua cabang akhirnya bertemu di merge node untuk mencegah workflow terputus.

Prosedur: Membuat task loop sederhana

Contoh ini menunjukkan cara membuat task yang melakukan loop lima kali. Pada setiap iterasi, task mencetak nomor loop saat ini.

Langkah 1: Konfigurasikan badan loop

  1. Buat node do-while di workflow Anda.

  2. Klik ganda node tersebut untuk membuka kanvas internalnya. Di area badan loop, klik Create Internal Node, pilih Shell, dan beri nama node tersebut print_loop_times.

  3. Klik kanan node Shell dan pilih Open Node.

  4. Di editor kode, masukkan perintah berikut:

    # Gunakan variabel bawaan ${dag.loopTimes} untuk mendapatkan nomor loop saat ini
    echo "This is loop number: ${dag.loopTimes}"
  5. Klik ikon simpan untuk menyimpan perubahan Anda.

Langkah 2: Tentukan kondisi keluar

  1. Kembali ke kanvas internal do-while. Klik kanan image End node, lalu pilih Open Node.

  2. Ubah bahasa ke Python.

  3. Masukkan kode Python berikut:

    # Jika jumlah loop kurang dari 5, lanjutkan loop; jika tidak, keluar.
    if ${dag.loopTimes} < 5:
        print True
    else:
        print False
  4. Simpan Node End.

Langkah 3: Publikasikan, jalankan, dan verifikasi

  1. Kembali ke kanvas workflow utama dan klik tombol Publish di bilah alat untuk mempublikasikan seluruh workflow.

  2. Buka Operation Center dan temukan node do-while.

  3. Klik kanan node tersebut dan pilih Backfill Data > Current Node untuk memulai uji coba.

  4. Setelah instans berhasil dijalankan, klik kanan lagi dan pilih View Internal Nodes.

  5. Tinjau catatan lima iterasi. Buka salah satu iterasi, misalnya iterasi kelima. Klik kanan instans internal print_loop_times dan pilih View Runtime Log. Anda akan melihat output berikut:

    This is loop number: 5

Kasus penggunaan lanjutan: Memproses daftar data

Pola umum dan praktis adalah menggunakan node do-while untuk melakukan iterasi dan memproses set data yang dihasilkan oleh assignment node hulu. Dalam skenario ini, assignment node ODPS SQL hulu mengambil dua baris informasi pengguna, dan node do-while memproses setiap baris.

Langkah 1: Konfigurasikan assignment node

  1. Buat assignment node (misalnya, bernama assign_sql_data) dan tetapkan sebagai dependensi hulu node do-while.

  2. Di node tersebut, gunakan ODPS SQL untuk mengambil data:

    SELECT 'user_A', 'beijing'
    UNION ALL
    SELECT 'user_B', 'shanghai';
  3. Simpan node tersebut. Parameter outputs akan berisi array dua dimensi dengan dua baris data.

Langkah 2: Konfigurasikan node do-while

  1. Di panel Scheduling Configurations di sisi kanan node do-while, temukan bagian Input Parameters.

  2. Klik Add dan konfigurasikan parameter berikut:

    • Name: input (dapat dikustomisasi)

    • Value Source: Pilih assign_sql_data.outputs

  3. Buat node Shell baru di badan loop node do-while dan masukkan skrip berikut untuk memproses baris saat ini:

    # Ambil baris data yang sedang diproses dalam iterasi saat ini
    echo "Processing data row: ${dag.input[${dag.offset}]}"
  4. Buka image End node dan gunakan Python untuk mengatur kondisi keluar:

    # Lanjutkan loop jika masih ada baris data yang perlu diproses.
    if ${dag.loopTimes} < ${dag.input.length}:
        print True
    else:
        print False
  5. Publish workflow dan, di Operation Center, lakukan backfill data mulai dari node assign_sql_data untuk memastikan data mengalir dengan benar ke dalam loop.

Setelah eksekusi berhasil, Anda dapat memeriksa log waktu proses untuk melihat bahwa dua iterasi tersebut masing-masing memproses "user_A,beijing" dan "user_B,shanghai".

Lampiran: Perbandingan node do-while dan for-each

Fitur

Node do-while

For-each node

Logika inti

Berdasarkan kondisi: Mengulang eksekusi hingga kondisi tidak lagi terpenuhi.

Berdasarkan data: Dieksekusi sekali untuk setiap elemen dalam daftar input.

Jumlah iterasi

Tidak pasti, tergantung kapan kondisi terpenuhi.

Pasti, sama dengan jumlah elemen dalam daftar input.

Jaminan eksekusi

Dieksekusi minimal satu kali, bahkan jika kondisi awal tidak terpenuhi.

Jika daftar input kosong, sama sekali tidak dieksekusi.

Kasus penggunaan

Polling, menunggu, pemeriksaan status, dan pemrosesan batch hingga sumber habis.

Pemrosesan batch daftar yang diketahui, seperti sinkronisasi kumpulan tabel atau memproses beberapa partisi.

Metode kontrol

Node End menghasilkan True atau False untuk mengontrol apakah loop dilanjutkan.

Otomatis berakhir setelah melakukan iterasi melalui semua elemen.