全部产品
Search
文档中心

DataWorks:Logika Node For-Each

更新时间:Jun 23, 2025

DataWorks menyediakan node for-each yang dapat digunakan untuk melakukan iterasi melalui set hasil yang diteruskan oleh node penugasan. Anda juga dapat menyesuaikan alur kerja dalam node for-each sesuai kebutuhan bisnis. Artikel ini menjelaskan komposisi dan logika aplikasi dari node for-each.

Catatan Penggunaan

Tabel berikut menguraikan catatan penggunaan untuk node for-each:

Item

Referensi

Pelajari skenario penggunaan node for-each.

Skenario

null

Node for-each hanya digunakan untuk melakukan iterasi melalui set hasil yang diteruskan oleh node penugasan.

Pelajari batasan dan tindakan pencegahan untuk node for-each, seperti jumlah maksimum iterasi, metode pengujian node for-each, serta cara melihat log node for-each.

Batasan dan Tindakan Pencegahan

Pelajari bahwa Anda dapat mengonfigurasi alur kerja dalam untuk node for-each sesuai kebutuhan bisnis. Saat mengonfigurasi alur kerja dalam, pastikan dimulai dengan node awal dan diakhiri dengan node akhir.

Komposisi dan Orkestrasi Alur Kerja Node For-Each

Pelajari bahwa jumlah iterasi untuk node for-each ditentukan oleh output node penugasan.

Jumlah Iterasi

Pelajari bahwa variabel bawaan yang disediakan oleh node for-each dapat digunakan untuk mendapatkan nilai terkait dari set hasil node penugasan di setiap iterasi.

Variabel Bawaan

Pelajari contoh nilai variabel dan jumlah iterasi untuk node for-each.

Contoh Nilai Variabel dan Jumlah Iterasi untuk Node For-Each Jika Menggunakan Node Shell atau ODPS SQL sebagai Node Penugasan

Skenario

Node for-each di DataWorks digunakan untuk skenario iterasi loop dan harus digunakan bersama dengan node penugasan. Node penugasan harus dikonfigurasi sebagai node leluhur dari node for-each. Setelah node penugasan meneruskan outputnya ke node for-each, node for-each akan melakukan iterasi melalui output tersebut.

for-each

Batasan

  • Hanya Edisi Standar DataWorks dan edisi yang lebih canggih yang mendukung node for-each. Untuk informasi tentang perbedaan antara edisi DataWorks, lihat Perbedaan antara Edisi DataWorks.

  • Jumlah maksimum iterasi untuk node for-each adalah 1.024. Jumlah sebenarnya dari iterasi untuk node for-each ditentukan oleh set hasil yang diteruskan oleh node penugasan.

  • Eksekusi paralel tidak didukung. Iterasi baru hanya dapat dimulai jika iterasi sebelumnya telah selesai.

Tindakan Pencegahan

Dimensi

Item

Deskripsi

Ketergantungan

Pengaturan ketergantungan

Node for-each perlu melakukan iterasi melalui nilai yang diteruskan oleh node penugasan. Oleh karena itu, node penugasan harus dikonfigurasi sebagai node leluhur dari node for-each. Node for-each harus bergantung pada node penugasan.

Dukungan traversal

Batas atas jumlah iterasi

Jumlah maksimum iterasi untuk node for-each adalah 1024. Jika jumlah iterasi untuk node for-each melebihi 1024, kesalahan akan dilaporkan. Jumlah sebenarnya dari iterasi untuk node for-each ditentukan oleh output node penugasan.

Jumlah iterasi

Jumlah iterasi untuk node for-each ditentukan oleh set hasil yang diteruskan oleh node penugasan.

Node dalam

Orkestrasi alur kerja

  • Anda dapat menghapus dependensi yang ada antara node dalam dari node for-each dan mengonfigurasi alur kerja dalam untuk node for-each berdasarkan kebutuhan bisnis Anda. Saat mengonfigurasi alur kerja dalam untuk node for-each, pastikan alur kerja dalam dimulai dengan start node dan diakhiri dengan end node.

  • Jika kode dalam dari node for-each menggunakan node cabang untuk melakukan penilaian logis atau melakukan iterasi melalui hasil node penugasan, node penggabungan juga diperlukan.

Pengambilan nilai

Variabel bawaan yang disediakan oleh node for-each dapat digunakan untuk mendapatkan nilai tertentu yang diteruskan oleh node penugasan yang dikonfigurasi sebagai node leluhur dari node for-each.

Debugging

Debugging node

  • Jika Anda menggunakan ruang kerja dalam mode standar, Anda tidak dapat langsung melakukan tes untuk menjalankan node for-each di DataStudio.

    Jika Anda ingin melakukan tes untuk memverifikasi hasil jalannya node for-each, Anda harus mengirimkan dan menerapkan node yang berisi node for-each ke Pusat Operasi di lingkungan pengembangan dan menjalankan node for-each.

  • Anda perlu menjalankan node penugasan dan node for-each secara bersamaan. Jika Anda ingin memeriksa apakah node penugasan meneruskan outputnya ke node for-each di Pusat Operasi, Anda dapat menggunakan fitur pengisian ulang data untuk mengisi ulang data untuk node penugasan dan node for-each. Anda tidak dapat memperoleh output dari node penugasan jika Anda hanya menjalankan node for-each.

Melihat log

Untuk melihat log operasional dari node for-each di Pusat Operasi, lakukan langkah-langkah berikut: temukan node for-each di halaman Tugas Siklus dan buka grafik asiklik terarah (DAG) dari node tersebut. Di DAG, klik kanan nama node dan pilih View Internal Nodes untuk melihat log operasional dari node dalam.

Komposisi dan Orkestrasi Alur Kerja Node For-Each

Node for-each adalah jenis node khusus yang berisi node dalam. Saat Anda membuat node for-each, tiga node dalam berikut dibuat secara otomatis: start node (node awal loop), Shell node (node tugas loop), dan end node (node akhir loop). Node dalam diorganisasikan ke dalam alur kerja dalam untuk melakukan iterasi melalui output node penugasan.for-each内部节点Gambar di atas menunjukkan informasi berikut:

  • Shell node

    DataWorks secara otomatis membuat node tugas Shell dalam. Anda dapat menghapus node Shell default dan mengonfigurasi node tugas loop dalam sesuai kebutuhan bisnis Anda.

    • Jika Anda menggunakan node Shell sebagai node tugas loop dalam, klik dua kali Shell node dan edit kode node di tab konfigurasi node.

    • Jika tugas loop Anda rumit, Anda dapat menambahkan lebih banyak node dalam alur kerja dalam untuk memproses tugas loop dan menghubungkan node dalam sesuai kebutuhan bisnis Anda.

      null

      Saat menyesuaikan node tugas loop dalam dari node for-each, Anda dapat menghapus dependensi antara node dalam yang ada dari node for-each, dan mengonfigurasi alur kerja dalam sesuai kebutuhan bisnis Anda. Pastikan alur kerja dalam dimulai dengan start node dan diakhiri dengan end node.

  • start dan end nodes

    Node start menandai dimulainya loop, sedangkan node end menandai berakhirnya loop. Kedua node tersebut tidak digunakan untuk memproses tugas loop.

    null

    Jumlah iterasi untuk node for-each ditentukan oleh output node penugasan, bukan oleh node akhir dari node for-each. Node penugasan dikonfigurasi sebagai node leluhur dari node for-each.

Jumlah Iterasi

null

Jumlah maksimum iterasi untuk node for-each adalah 1.024. Jumlah sebenarnya dari iterasi untuk node for-each ditentukan oleh set hasil yang diteruskan oleh node penugasan.

Jumlah iterasi untuk node for-each ditentukan oleh set hasil yang diteruskan oleh node penugasan:

  • Jika node penugasan yang dikonfigurasikan sebagai node leluhur dari node for-each menggunakan Shell atau Python, jumlah iterasi untuk node for-each ditentukan oleh array satu dimensi yang dihasilkan. Jumlah iterasi sama dengan jumlah elemen dalam array satu dimensi. Elemen dipisahkan oleh koma (,).

    Sebagai contoh, jika node penugasan menggunakan Shell atau Python (Python 2), output dari node penugasan adalah array satu dimensi seperti 2021-03-28,2021-03-29,2021-03-30,2021-03-31,2021-04-01. Node for-each melakukan iterasi melalui output dari node penugasan sebanyak lima kali.

  • Jika Anda menggunakan node SQL sebagai node tugas loop dalam dari node for-each, jumlah iterasi untuk node for-each ditentukan oleh array dua dimensi yang dihasilkan. Jumlah iterasi sama dengan jumlah baris dalam array dua dimensi.

    Sebagai contoh, jika ODPS SQL digunakan oleh node penugasan, output dari node penugasan adalah array dua dimensi:

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

    Output tersebut menunjukkan bahwa node for-each melakukan iterasi melalui output dari node penugasan sebanyak dua kali.

Variabel Bawaan

Anda dapat menggunakan variabel bawaan yang disediakan oleh node for-each untuk mendapatkan set hasil yang diteruskan oleh node penugasan yang dikonfigurasi sebagai node leluhur dari node for-each. Jika alur kerja dalam untuk node for-each berisi node penugasan, Anda dapat memperoleh output dari node penugasan menggunakan metode default. Untuk informasi lebih lanjut tentang metode default, lihat Konfigurasi Node Penugasan.

Anda dapat menggunakan variabel bawaan yang disediakan oleh node for-each di DataWorks untuk mendapatkan jumlah iterasi yang telah selesai dan offset antara iterasi saat ini dan iterasi pertama saat node for-each digunakan untuk melakukan iterasi melalui output dari node penugasan.

Variabel bawaan

Deskripsi

Bandingkan dengan loop for

${dag.loopDataArray}

Mendapatkan dataset dari node penugasan.

Setara dengan hasil kode dalam loop for.

data=[]

${dag.foreach.current}

Mendapatkan entri data saat ini.

Contoh kode loop for:

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

  • i setara dengan ${dag.offset}.

${dag.offset}

Mendapatkan offset antara iterasi saat ini dan iterasi pertama.

${dag.loopTimes}

Mendapatkan jumlah iterasi yang telah selesai.

-

Jika Anda sudah familiar dengan skema tabel output, Anda juga dapat menggunakan variabel dalam tabel berikut untuk mendapatkan nilai terkait di setiap iterasi.

Variabel lain

Deskripsi

${dag.foreach.current[n]}

Jika output dari node penugasan yang dikonfigurasi sebagai node leluhur dari node for-each adalah array dua dimensi, variabel digunakan untuk mendapatkan data kolom tertentu untuk entri data saat ini saat node for-each melakukan iterasi melalui output dari node penugasan.

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

Jika output dari node penugasan yang dikonfigurasi sebagai node leluhur dari node for-each adalah array dua dimensi, variabel digunakan untuk mendapatkan data Baris i dan Kolom j dalam dataset dari node penugasan.

${dag.foreach.current[n]}

Jika output dari node penugasan yang dikonfigurasi sebagai node leluhur dari node for-each adalah array satu dimensi, variabel digunakan untuk mendapatkan data kolom tertentu.

Contoh Nilai Variabel

Contoh 1: Node Shell digunakan sebagai node penugasan

  • Output dari node penugasan

    Node Shell digunakan sebagai node penugasan, dan output terakhir dari node penugasan adalah 2021-03-28,2021-03-29,2021-03-30,2021-03-31,2021-04-01.

  • Nilai variabel untuk node for-each

    null

    Output dari node penugasan adalah array satu dimensi, dan lima elemen dalam array dipisahkan oleh koma (,). Oleh karena itu, jumlah iterasi untuk node for-each adalah 5.

    Variabel bawaan

    Nilai untuk iterasi pertama

    Nilai untuk iterasi kedua

    ${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

Contoh 2: Node ODPS SQL digunakan sebagai node penugasan

  • Output dari node penugasan

    Node ODPS SQL digunakan sebagai node penugasan, dan pernyataan SELECT terakhir mengembalikan dua data berikut:

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

    null

    Output dari node penugasan adalah array dua dimensi dan dua baris data terkandung dalam array. Oleh karena itu, jumlah iterasi untuk node for-each adalah 2.

    Variabel bawaan

    Nilai untuk iterasi pertama

    Nilai untuk iterasi kedua

    ${dag.loopDataArray}

    +----------------------------------------------+
    | uid            | region | age_range | zodiac |
    +----------------------------------------------+
    | 0016359810821  | Hubei Province | 30 to 40 years old   | Cancer |
    | 0016359814159  | Unknown   | 30 to 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