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. | |
Menyesuaikan alur kerja internal, yang harus dimulai dengan node start bawaan dan diakhiri dengan node end bawaan. | |
Menggunakan variabel bawaan untuk mendapatkan parameter loop, disertai contoh pengambilan nilai. | |
Cara node end mengontrol keluar dari loop, disertai contoh kode. | |
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 |
|
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
trueuntuk melanjutkan loop berikutnya ataufalseuntuk 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.
CatatanSaat 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-282021-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,Cancer0016359814159,Unknown,30-40 years old,Cancer${dag.input.length}2
CatatanPanjang dataset adalah jumlah baris dalam array dua dimensi.
${dag.input[0][1]}CatatanNilai 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"
fiKode 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 |
| Di bagian Output Parameters node assignment, parameter bernama |
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 | Di dalam node do-while, node branch (seperti |