All Products
Search
Document Center

DataWorks:Cara kerja node do-while

Last Updated:Jun 22, 2026

DataWorks menyediakan node do-while untuk menjalankan serangkaian task dalam bentuk loop. Anda dapat mengatur logika bisnis di dalam node do-while dan menggunakan node akhir internalnya untuk menentukan kondisi keluar dari loop. Node do-while dapat digunakan secara mandiri atau bersama dengan node assignment untuk melakukan iterasi terhadap dataset yang diteruskan dari node assignment. Topik ini menjelaskan komponen dan logika penerapan node do-while.

Latar Belakang

Tabel berikut memberikan ikhtisar topik ini.

Description

References

Batasan dan tindakan pencegahan untuk node do-while, termasuk jumlah maksimum loop, metode pengujian, dan cara melihat log.

Batasan, Tindakan Pencegahan

Menyesuaikan alur kerja internal, yang harus dimulai dengan node start bawaan dan diakhiri dengan node end bawaan.

Komponen dan orkestrasi alur kerja

Menggunakan variabel bawaan untuk mendapatkan parameter loop, disertai contoh pengambilan nilai.

Variabel bawaan, Contoh pengambilan nilai

Cara node end mengontrol keluar dari loop, disertai contoh kode.

Contoh kode: Keluar dari loop menggunakan node end

Tinjau kasus penggunaan khas untuk node do-while.

Kasus penggunaan 1: Gunakan dengan node assignment dan Kasus penggunaan 2: Gunakan dengan node branch dan merge

Batasan

  • Node do-while hanya tersedia di DataWorks Edisi Standar dan versi setelahnya. Untuk informasi lebih lanjut, lihat Edisi dan fitur DataWorks.

  • Node do-while dapat melakukan loop hingga maksimal 1.024 kali.

  • Eksekusi paralel tidak didukung. Loop baru hanya dapat dimulai setelah loop sebelumnya selesai.

Tindakan Pencegahan

Dimension

Item

Description

Loop support

Maximum number of loops

Node do-while dapat melakukan loop maksimal sebanyak 1.024 kali. Jika jumlah loop yang dikendalikan oleh end node melebihi 1.024, node tersebut akan melaporkan error.

Internal nodes

Workflow orchestration

  • Saat Anda menyesuaikan task loop, Anda dapat menghapus dependensi antar node internal dan mengatur ulang alur kerja. Namun, alur kerja tersebut harus dimulai dengan start node dan diakhiri dengan end node.

  • Jika Anda menggunakan node branch untuk penilaian logika atau iterasi hasil di dalam node do-while, Anda juga harus menggunakan merge node.

  • Anda tidak dapat menambahkan komentar pada kode end node.

Value retrieval

Node ini menyediakan variabel bawaan untuk mengambil nilai tertentu dari node assignment hulu.

Debugging

Task debugging

Di ruang kerja mode standar, Anda tidak dapat menguji node do-while secara langsung di DataStudio.

Sebagai gantinya, Anda harus meng-commit task yang berisi node tersebut ke lingkungan pengembangan dan menjalankannya di Operation Center.

Log viewing

Untuk melihat log eksekusi node do-while di Operation Center, klik kanan instans tersebut dan pilih View Inner Nodes.

Dependencies

Dependency settings

Node do-while dapat digunakan sendiri atau bersama dengan node assignment. Namun, saat melakukan pengisian ulang data di Operation Center, Anda harus memilih kedua node tersebut untuk dieksekusi. Menjalankan hanya node do-while akan mencegahnya menerima nilai dari node assignment.

Komponen dan orkestrasi alur kerja

Node do-while adalah node kontainer khusus yang berisi alur kerja internal. Saat Anda membuat node do-while, tiga node internal dibuat secara otomatis: start node (awal loop), shell node (task loop), dan end node (kondisi akhir loop). Node-node internal ini diatur menjadi sebuah alur kerja untuk eksekusi task berulang.循环节点

  • start node

    Menandai awal loop. Tidak berisi kode task dan tidak dapat dihapus. Semua node lain dalam loop harus bergantung pada start node, baik secara langsung maupun tidak langsung.

  • Loop logic

    Secara default, DataWorks membuat node shell internal untuk task loop. Anda dapat menghapus shell node default dan membangun alur kerja bisnis kustom di dalam loop.

    Umumnya, alur kerja loop digunakan bersama dengan node assignment, node branch, atau node merge. Saat menyesuaikan task loop, Anda dapat menghapus dependensi antar node internal dan mengatur ulang alur kerja. Namun, alur kerja tersebut harus dimulai dengan start node dan diakhiri dengan end node.

  • end node

    • End node menentukan kondisi loop untuk node do-while. Fungsinya mirip dengan node assignment, menghasilkan true untuk melanjutkan loop berikutnya atau false untuk menghentikannya.

    • Anda dapat menulis kode kondisi loop untuk end node menggunakan ODPS SQL, Shell, atau Python 2. Node do-while menyediakan variabel bawaan untuk menyederhanakan kode ini. Untuk informasi lebih lanjut tentang variabel bawaan, lihat Variabel bawaan dan Contoh pengambilan nilai. Untuk contoh kode dalam berbagai bahasa, lihat Contoh kode: Keluar dari loop menggunakan node end.

    • Semua node di dalam loop harus berada hulu dari end node, yang tidak dapat dihapus.

Variabel bawaan

Node do-while menggunakan format ${dag.variable_name} untuk mengambil variabel. DataWorks menyediakan dua variabel sistem bawaan: ${dag.loopTimes} dan ${dag.offset}. Anda juga dapat menggunakan node do-while bersama dengan node assignment dan menggunakan format ${dag.variable_name} untuk mengambil nilai dari parameter assignment.

  • Variabel bawaan sistem

    Pada setiap iterasi loop, Anda dapat menggunakan variabel bawaan untuk mendapatkan nomor loop saat ini dan offset-nya.

    Built-in variable

    Description

    Value

    ${dag.loopTimes}

    Nomor loop saat ini.

    Nilainya adalah 1 untuk loop pertama, 2 untuk loop kedua, 3 untuk loop ketiga, dan seterusnya hingga n untuk loop ke-n.

    ${dag.offset}

    Offset.

    Nilainya adalah 0 untuk loop pertama, 1 untuk loop kedua, 2 untuk loop ketiga, dan seterusnya hingga n-1 untuk loop ke-n.

  • Ambil hasil dari node assignment

    Jika Anda menggunakan node do-while dengan node assignment, Anda juga dapat mengambil nilai parameter assignment tersebut.

    Catatan

    Saat node do-while bergantung pada node assignment, Anda dapat mengatur output parameters dari node assignment sebagai Input Parameters dari node do-while. Hal ini memungkinkan node do-while untuk mengambil set hasil dari node assignment dan elemen tertentu dalam set hasil tersebut. Formatnya adalah ${dag.variable_name}, di mana variable_name harus dikonfigurasi sebagai Input Parameters dari node do-while. Contoh dalam topik ini mendefinisikan parameter input (sebagai Input Parameters) di node do-while untuk menerima set hasil dari node assignment. Dalam praktiknya, Anda harus mengganti ini dengan nama parameter aktual Anda.

    Built-in variable

    Description

    ${dag.input}

    Dataset yang diteruskan dari node assignment hulu.

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

    Mengambil baris data untuk loop saat ini.

    ${dag.input.length}

    Mengambil panjang dataset.

Contoh pengambilan nilai

Format set hasil dari node assignment bergantung pada bahasa yang digunakan. Untuk mengambil hasil dari node assignment berbasis Shell, gunakan array satu dimensi. Untuk node assignment berbasis ODPS SQL, gunakan array dua dimensi. Untuk informasi lebih lanjut, lihat node assignment.

Contoh 1: Node assignment Shell

  • Keluaran Node

    Node assignment hulu menggunakan sintaks Shell, dan output terakhirnya adalah 2021-03-28,2021-03-29,2021-03-30,2021-03-31,2021-04-01.

  • Nilai variabel

    Built-in variable

    Loop 1 value

    Loop 2 value

    ${dag.input}

    2021-03-28,2021-03-29,2021-03-30,2021-03-31,2021-04-01

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

    2021-03-28

    2021-03-29

    ${dag.input.length}

    5

    ${dag.loopTimes}

    1

    2

    ${dag.offset}

    0

    1

Contoh 2: Node assignment ODPS SQL

  • Output node

    Node assignment hulu menggunakan sintaks ODPS SQL, dan pernyataan SELECT terakhir mengembalikan dua baris:

    +----------------------------------------------+
    | uid            | region         | age_range      | zodiac |
    +----------------------------------------------+
    | 0016359810821  | Hubei Province | 30-40 years old| Cancer |
    | 0016359814159  | Unknown        | 30-40 years old| Cancer |
    +----------------------------------------------+
  • Nilai variabel

    Built-in variable

    Loop 1 value

    Loop 2 value

    ${dag.input}

    +----------------------------------------------+
    | uid            | region         | age_range      | zodiac |
    +----------------------------------------------+
    | 0016359810821  | Hubei Province | 30-40 years old| Cancer |
    | 0016359814159  | Unknown        | 30-40 years old| Cancer |
    +----------------------------------------------+

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

    0016359810821,Hubei Province,30-40 years old,Cancer

    0016359814159,Unknown,30-40 years old,Cancer

    ${dag.input.length}

    2

    Catatan

    Panjang dataset adalah jumlah baris dalam array dua dimensi.

    ${dag.input[0][1]}

    Catatan

    Nilai pada baris pertama dan kolom kedua dari array dua dimensi.

    Hubei Province

    ${dag.loopTimes}

    1

    2

    ${dag.offset}

    0

    1

Contoh kode node end

Anda dapat menulis kode untuk end node dalam ODPS SQL, Shell, atau Python 2. Bagian ini menyediakan contoh kode untuk setiap bahasa.

ODPS SQL

SELECT  CASE 
 WHEN COUNT(1) > 0 AND ${dag.offset}<= 9 
  THEN true 
  ELSE false 
 END 
FROM  xc_dpe_e2.xc_rpt_user_info_d  where dt='20200101';

Dalam contoh ini, kode node end membatasi jumlah total loop dengan membandingkan jumlah baris tabel dan offset loop terhadap nilai tetap.

Shell

if [ ${dag.loopTimes} -lt 5 ];
then
     echo "True"
else
     echo "False"
fi

Kode ini membandingkan nomor loop saat ini, ${dag.loopTimes}, dengan angka 5 untuk membatasi jumlah total loop.

Sebagai contoh, ${dag.loopTimes} bernilai 1 untuk loop pertama dan 2 untuk loop kedua. Ketika nilainya mencapai 5 pada loop kelima, kondisi menjadi false, node end menghasilkan False, dan loop dihentikan.

Python 2

if ${dag.loopTimes}<${dag.input.length}:
   print True;
else
   print False;
# If the end node outputs True, the next loop starts.
# If the end node outputs False, the loop terminates.

Kode ini membatasi jumlah loop dengan membandingkan nomor loop saat ini (${dag.loopTimes}) dengan panjang dataset dari node assignment.

Kasus penggunaan

Node assignment

Tabel berikut menjelaskan skenario khas dan tindakan pencegahan saat menggunakan node do-while dengan node assignment.

Scenario

Configuration

Parameter passing

Jika node internal di dalam do-while node perlu mengambil output dari node hulu (seperti node up_node) pada setiap iterasi, gunakan node assignment (seperti node assign_node) untuk meneruskan parameter.

  • Dependencies

    Node do-while harus bergantung pada node assignment hulu (assign_node).

    Catatan

    Atur dependensi ini pada node do-while itu sendiri, bukan pada salah satu node internalnya (seperti shell node).

  • Context parameters

    • Anda harus mendefinisikan parameter output di bagian Output Parameters dari node assignment (assign_node).

    • Anda harus menambahkan parameter output dari node assignment ke bagian Input Parameters dari node task loop internal (shell node) dari node do-while.

      Catatan

      Pemetaan parameter ini dikonfigurasi pada node task loop internal, bukan pada node do-while itu sendiri.

Di bagian Output Parameters node assignment, parameter bernama outputs dengan nilai ${outputs} ditambahkan secara default. Di konteks node task loop internal (shell node), tambahkan parameter ini sebagai salah satu Input Parameters (misalnya, dengan nama parameter input). Di skrip shell, Anda dapat menggunakan variabel seperti ${dag.input} dan ${dag.offset} untuk mereferensikan nilai output yang diteruskan dari node assignment.

Node branch dan merge

Tabel berikut menjelaskan skenario khas dan tindakan pencegahan saat menggunakan node do-while dengan node branch dan node merge.典型应用

Use case

Precaution

Untuk melakukan penilaian logika atau iterasi hasil di dalam node do-while, gunakan node branch (seperti branch_node) dan node merge (seperti merge_node) untuk menyesuaikan alur kerja internal.

Di dalam node do-while, node branch (seperti branch_node) harus dipasangkan dengan node merge (seperti merge_node).