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. | 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. | |
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. | |
Pelajari bahwa jumlah iterasi untuk node for-each ditentukan oleh output node penugasan. | |
Pelajari bahwa variabel bawaan yang disediakan oleh node for-each dapat digunakan untuk mendapatkan nilai terkait dari set hasil node penugasan di setiap iterasi. | |
Pelajari contoh nilai variabel dan jumlah iterasi untuk node for-each. |
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.

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 |
|
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 |
|
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.
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.
nullSaat 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.
nullJumlah 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
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 |
| Mendapatkan dataset dari node penugasan. | Setara dengan hasil kode dalam loop for. |
| Mendapatkan entri data saat ini. | Contoh kode loop for:
|
| Mendapatkan offset antara iterasi saat ini dan iterasi pertama. | |
| 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 |
| 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. |
| 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. |
| 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
nullOutput 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-282021-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
nullOutput 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,Cancer0016359814159,unknown,30–40 years old,Cancer${dag.offset}0
1
${dag.loopTimes}1
2
${dag.foreach.current[0]}00163598108210016359814159${dag.loopDataArray[1][0]}0016359814159