All Products
Search
Document Center

DataWorks:Memahami logika node for-each

Last Updated:Apr 23, 2026

DataWorks menyediakan node for-each yang dapat Anda gunakan untuk melakukan loop melalui result set dari node assignment dan mengorkestrasi alur bisnis. Topik ini menjelaskan komponen dan logika node for-each.

Catatan penggunaan

Tabel berikut menjelaskan cara menggunakan node for-each.

Description

References

Pelajari skenario di mana Anda dapat menggunakan node for-each.

Scenarios

Catatan

Ini hanya digunakan untuk menelusuri result set yang dikembalikan oleh node assignment.

Pelajari batasan dan catatan untuk node for-each, seperti jumlah maksimum penelusuran, cara menguji node tersebut, dan cara melihat log.

Limits, Notes

Pelajari cara menyesuaikan alur bisnis di dalam node for-each. Alur tersebut harus dimulai dengan node Start bawaan dan diakhiri dengan node End bawaan.

Node components and flow orchestration

Pelajari bahwa jumlah penelusuran untuk node for-each ditentukan oleh output dari node assignment hulu-nya.

Number of traversals

Pelajari bahwa node for-each menyediakan variabel bawaan untuk mengambil nilai terkait pada setiap penelusuran.

Built-in variables

Lihat contoh cara mengambil nilai variabel dan bagaimana jumlah penelusuran dihitung.

Examples of retrieving values when the upstream assignment node is a Shell or ODPS SQL node

Scenarios

Node for-each DataWorks terutama digunakan untuk skenario yang memerlukan loop. Node ini harus digunakan bersama dengan assignment node hulu. Node for-each menerima output dari assignment node lalu melakukan loop melalui hasil tersebut.

for-each

Limits

  • Node for-each hanya didukung di DataWorks Edisi Standar dan versi yang lebih baru. Untuk informasi selengkapnya, lihat Feature Details by Version.

  • Node for-each dapat melakukan loop maksimal 1.024 kali. Jumlah penelusuran aktual ditentukan oleh result set yang dihasilkan oleh assignment node.

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

Notes

Dimension

Category

Description

Upstream and downstream dependencies

Dependency settings

Node for-each menelusuri nilai yang diteruskan dari assignment node. Oleh karena itu, assignment node harus menjadi node hulu dari node for-each.

Traversal support

Maximum number of traversals

Node for-each mendukung maksimal 1.024 loop. Jika batas ini dilampaui, akan terjadi runtime error. Jumlah loop aktual dikendalikan oleh output dari assignment node hulu.

Number of traversals

Ditentukan oleh result set yang dihasilkan oleh assignment node.

Inner nodes

Flow orchestration

  • Anda dapat menghapus dependensi antar inner node dari node for-each dan mengorkestrasi ulang alur bisnis internal. Namun, Start node dan End node harus masing-masing menjadi node pertama dan terakhir dalam alur bisnis internal.

  • Saat Anda menggunakan branch node di dalam node for-each untuk penilaian logis atau penelusuran hasil, Anda juga harus menggunakan merge node.

Value retrieval

Variabel bawaan disediakan untuk mengambil nilai tertentu dari assignment node hulu.

Debugging and running

Task debugging

  • Dalam mode standar, DataWorks tidak mendukung pengujian dan eksekusi langsung node for-each di antarmuka DataStudio.

    Untuk menguji dan memverifikasi hasil eksekusi node for-each, Anda harus melakukan commit dan publikasi task yang berisi node for-each ke Operation Center lingkungan pengembangan. Kemudian, jalankan task node for-each tersebut di Operation Center lingkungan pengembangan.

  • Eksekusi assignment node dan node for-each secara bersamaan. Saat Anda melakukan operasi data backfill untuk auto triggered task di Operation Center, mulailah data backfill dari assignment node. Hal ini memastikan assignment node dan node for-each dieksekusi bersamaan. Jangan eksekusi node for-each secara terpisah.

View logs

Saat Anda melihat log eksekusi node for-each di Operation Center, klik kanan instans tersebut lalu klik View Inner Nodes untuk melihat log eksekusi inner node-nya.

Node components and flow orchestration

Node for-each di DataWorks merupakan jenis node khusus yang berisi inner node. Saat Anda membuat node for-each, tiga inner node dibuat secara otomatis: Start node (awal loop), Shell node (loop task), dan End node (akhir loop). Inner node ini membentuk alur internal yang melakukan loop melalui output dari assignment node hulu.for-each内部节点Seperti yang ditunjukkan pada gambar di atas:

  • Shell node

    Secara default, DataWorks membuat inner node Shell untuk menjalankan task. Anda juga dapat menghapus Shell node default dan menyesuaikan node untuk task penelusuran loop.

    • Jika task penelusuran loop adalah task Shell, Anda dapat mengklik ganda Shell node untuk membuka editor kode dan mengembangkan kode task tersebut.

    • Jika task penelusuran loop kompleks, Anda dapat membuat node task lain dalam alur internal dan membangun ulang proses eksekusi node sesuai kebutuhan.

      Catatan

      Saat Anda menyesuaikan node task loop, Anda dapat menghapus dependensi antar inner node dan mengorkestrasi ulang alur internal. Namun, Start node dan End node harus tetap menjadi node pertama dan terakhir dalam alur internal.

  • Start node dan End node

    Keduanya merupakan node awal dan akhir untuk setiap loop dalam alur internal. Node ini tidak berisi kode task tertentu.

    Catatan

    End node dari node for-each tidak mengontrol jumlah loop. Jumlah loop ditentukan oleh output dari assignment node hulu.

Number of traversals

Catatan

Node for-each dapat melakukan loop maksimal 1.024 kali. Jumlah penelusuran aktual ditentukan oleh result set yang dihasilkan oleh assignment node.

Jumlah penelusuran ditentukan oleh result set yang dihasilkan oleh assignment node:

  • Penelusuran Shell dan Python: Output berupa array satu dimensi. Jumlah loop sama dengan jumlah elemen dalam array tersebut. Elemen-elemennya dipisahkan oleh koma.

    Sebagai contoh, jika bahasa assignment dari assignment node adalah Shell atau Python (Python 2) dan output-nya adalah array satu dimensi 2021-03-28,2021-03-29,2021-03-30,2021-03-31,2021-04-01, maka node for-each akan melakukan loop lima kali.

  • Penelusuran SQL: Output berupa array dua dimensi. Jumlah loop sama dengan jumlah baris dalam array tersebut.

    Sebagai contoh, jika bahasa assignment dari assignment node adalah ODPS SQL dan output-nya adalah array dua dimensi:

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

    Maka node for-each akan melakukan loop dua kali.

Built-in variables

Anda dapat menggunakan metode berikut dalam inner node node for-each untuk mengambil result set dari assignment node hulu. Jika terdapat assignment node dalam alur internal node for-each, Anda dapat mengambil nilai menggunakan metode pengambilan nilai default untuk node hilir. Untuk informasi selengkapnya tentang metode pengambilan nilai, lihat Assignment node.

Saat node for-each DataWorks melakukan loop melalui output assignment node, Anda dapat menggunakan variabel bawaan untuk mengambil nomor loop saat ini dan offset-nya.

Built-in variable

Description

Comparison with a for loop

${dag.loopDataArray}

Mengambil dataset dari assignment node.

Ekuivalen dengan kode berikut dalam for loop:

data=[]

${dag.foreach.current}

Mengambil nilai penelusuran saat ini.

Ambil contoh for loop berikut:

for(int i=0;i<data.length;i++) {
   print(data[i]);
}
  • data[i] ekuivalen dengan ${dag.foreach.current}.

  • i ekuivalen dengan ${dag.offset}.

${dag.offset}

Offset saat ini (offset setiap penelusuran relatif terhadap penelusuran pertama).

${dag.loopTimes}

Mengambil jumlah penelusuran saat ini.

-

Jika Anda mengetahui skema tabel dari output Anda, Anda dapat menggunakan variabel berikut untuk mengambil nilai lainnya.

Other variable

Description

${dag.foreach.current[n]}

Saat output assignment node hulu berupa array dua dimensi, variabel ini mengambil data kolom tertentu pada baris data saat ini selama setiap penelusuran.

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

Saat output assignment node hulu berupa array dua dimensi, variabel ini mengambil data pada baris i dan kolom j dari dataset.

${dag.foreach.current[n]}

Saat output assignment node hulu berupa array satu dimensi, variabel ini mengambil data pada indeks tertentu.

Examples of using built-in variables

Example 1: The upstream assignment node is a Shell node

  • Assignment node output

    Assignment node hulu adalah node Shell. Output akhirnya adalah 2021-03-28,2021-03-29,2021-03-30,2021-03-31,2021-04-01.

  • Value retrieval in the for-each node

    Catatan

    Karena output berupa array satu dimensi dengan lima elemen yang dipisahkan koma, node for-each melakukan loop lima kali.

    Built-in variable

    Value in the 1st loop

    Value in the 2nd loop

    ${dag.loopDataArray}

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

    ${dag.foreach.current}

    2021-03-28

    2021-03-29

    ${dag.offset}

    0

    1

    ${dag.loopTimes}

    1

    2

    ${dag.foreach.current[3]}

    2021-03-30

Example 2: The upstream assignment node is an ODPS SQL node

  • Output from the assignment node

    Assignment node hulu adalah node ODPS SQL. Pernyataan select terakhir mengembalikan dua catatan:

    +----------------------------------------------+
    | uid            | region         | age_range       | zodiac |
    +----------------------------------------------+
    | 0016359810821  | Hubei Province | 30-40 years old | Cancer |
    | 0016359814159  | Unknown        | 30-40 years old | Cancer |
    +----------------------------------------------+
  • Retrieving values in the for-each node

    Catatan

    Karena output berupa array dua dimensi dengan dua baris, node for-each melakukan penelusuran dua kali.

    Built-in variable

    Value in the 1st loop

    Value in the 2nd loop

    ${dag.loopDataArray}

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

    ${dag.foreach.current}

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

    0016359814159,Unknown,30-40 years old,Cancer

    ${dag.offset}

    0

    1

    ${dag.loopTimes}

    1

    2

    ${dag.foreach.current[0]}

    0016359810821

    0016359814159

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

    0016359814159