DataWorks menyediakan node do-while yang memungkinkan Anda mengatur ulang alur kerja di dalamnya, menulis logika untuk dieksekusi dalam loop, dan mengonfigurasi node akhir untuk menentukan keluar dari looping. Node ini dapat digunakan secara mandiri atau bersama dengan node penugasan untuk melakukan iterasi pada set hasil yang dilewatkan oleh node penugasan. Topik ini menjelaskan komposisi dan logika aplikasi dari node do-while.
Informasi Latar Belakang
Tabel berikut menjelaskan catatan penggunaan node do-while.
Deskripsi | Referensi |
Sebelum menggunakan node do-while, Anda harus mempelajari batasan dan tindakan pencegahan untuk node do-while, seperti batas maksimum jumlah loop, metode untuk menguji node do-while, dan metode untuk melihat log node do-while. | |
Anda dapat mengonfigurasi alur kerja internal untuk node do-while berdasarkan kebutuhan bisnis Anda. Saat mengonfigurasi alur kerja internal untuk node do-while, pastikan bahwa alur kerja internal dimulai dengan node awal dan diakhiri dengan node akhir. | |
Node do-while menyediakan variabel bawaan untuk Anda mendapatkan nilai terkait dalam setiap loop. Contoh untuk mendapatkan nilai variabel disediakan sebagai referensi. | |
Anda dapat menggunakan node akhir untuk menentukan apakah akan keluar dari looping. Kode contoh untuk node akhir disediakan sebagai referensi. | |
Sebelum menggunakan node do-while, Anda harus mempelajari skenario di mana node do-while digunakan. |
Batasan
Hanya DataWorks Edisi Standar dan edisi yang lebih tinggi yang mendukung node do-while. Untuk informasi lebih lanjut, lihat Perbedaan antara Edisi DataWorks.
Jumlah maksimum loop untuk node do-while adalah 1.024.
Eksekusi paralel tidak didukung. Loop baru hanya dimulai setelah loop sebelumnya selesai.
Tindakan Pencegahan
Dimensi | Item | Deskripsi |
Dukungan Loop | Batas atas untuk jumlah loop | Jumlah maksimum loop untuk node do-while adalah 1024. Jika jumlah loop untuk node do-while melebihi 1024, node end mengembalikan False untuk keluar dari looping. |
Node Internal | Orkestrasi Alur Kerja |
|
Pengambilan Nilai | Variabel bawaan yang disediakan oleh node do-while dapat digunakan untuk mendapatkan nilai tertentu yang dilewatkan oleh node penugasan yang dikonfigurasi sebagai node leluhur dari node do-while. | |
Debugging | Pengujian Tugas | Jika Anda menggunakan ruang kerja dalam mode standar, Anda tidak dapat langsung melakukan tes untuk menjalankan node do-while di DataStudio. Jika Anda ingin melakukan tes untuk memverifikasi hasil eksekusi node do-while, Anda harus mengirimkan dan menerapkan alur kerja yang berisi node do-while ke Pusat Operasi di lingkungan pengembangan dan menjalankan tugas pada node do-while. |
Melihat Log | Untuk melihat log eksekusi node do-while di Pusat Operasi, lakukan langkah-langkah berikut: Temukan node do-while dan buka grafik asiklik terarah (DAG) dari node tersebut. Di DAG, klik kanan nama node dan pilih View Internal Nodes. | |
Ketergantungan | Pengaturan Ketergantungan | Anda dapat menggunakan node do-while secara mandiri, atau menggunakan node do-while bersama dengan node penugasan. Jika Anda ingin memeriksa apakah node penugasan melewatkan outputnya ke node do-while di Pusat Operasi, Anda dapat menggunakan fitur pengisian balik data untuk mengisi balik data untuk node penugasan dan node do-while. Jika Anda hanya menjalankan node do-while, Anda tidak dapat memperoleh output dari node penugasan. |
Komposisi dan Orkestrasi Alur Kerja Node do-while
Node do-while adalah node khusus yang berisi node internal. Saat membuat node do-while, node internal berikut dibuat secara otomatis: node start, node shell (node tugas), dan node end. Node internal ini diorganisasikan menjadi alur kerja internal untuk looping. 
Gambar di atas menunjukkan informasi berikut:
start node
Node start menandai awal dari loop dan tidak digunakan untuk memproses tugas loop. Node tugas di dalam node do-while bergantung pada node start, sehingga node start tidak dapat dihapus.
shell node
Saat membuat node do-while, DataWorks secara otomatis membuat node tugas Shell internal bernama shell. Anda dapat menghapus node shell default dan mengonfigurasi node tugas sesuai kebutuhan bisnis Anda.
Umumnya, node do-while digunakan bersama dengan node penugasan atau dengan node cabang dan node penggabungan. Saat menyesuaikan node tugas dari node do-while, Anda dapat menghapus dependensi antara node internal yang ada dan mengonfigurasi alur kerja internal berdasarkan kebutuhan bisnis Anda. Pastikan alur kerja internal dimulai dengan node start dan diakhiri dengan node end.
end node
Node end menentukan apakah akan keluar dari looping. Node ini mengontrol jumlah loop yang dapat dijalankan untuk node do-while. Pada dasarnya, node akhir adalah node penugasan yang mengembalikan
TrueatauFalse. Nilai True menunjukkan untuk menjalankan loop berikutnya, sedangkan nilai False menunjukkan untuk keluar dari looping.Anda dapat menggunakan ODPS SQL, Shell, atau Python 2 untuk mengembangkan kode untuk node end. Node do-while menyediakan variabel bawaan untuk pengembangan kode node akhir. Untuk informasi tentang variabel bawaan, lihat Variabel Bawaan dan Contoh Nilai Variabel. Untuk contoh kode dalam berbagai bahasa, lihat Kode Contoh untuk Node Akhir.
Node akhir harus menjadi node turunan dari node tugas dan tidak dapat dihapus.
Variabel Bawaan
Variabel bawaan yang disediakan oleh node do-while dikonfigurasi dalam format ${dag.Nama Variabel}. Node do-while di DataWorks menyediakan dua variabel bawaan: ${dag.loopTimes} dan ${dag.offset}. Anda juga dapat menggunakan node do-while bersama dengan node penugasan untuk mendapatkan nilai parameter penugasan berdasarkan variabel bawaan yang dikonfigurasi dalam format ${dag.Nama Variabel}.
Variabel Bawaan
Anda dapat menggunakan variabel bawaan yang disediakan oleh node do-while di DataWorks untuk mendapatkan jumlah loop yang telah selesai dan offset antara loop saat ini dan loop sebelumnya saat node do-while digunakan untuk looping.
Variabel Bawaan
Deskripsi
Nilai
${dag.loopTimes}Jumlah loop yang telah selesai.
1 untuk loop pertama, 2 untuk loop kedua, 3 untuk loop ketiga, ..., dan n untuk loop ke-n.
${dag.offset}Offset antara loop saat ini dan loop sebelumnya.
0 untuk loop pertama, 1 untuk loop kedua, 2 untuk loop ketiga, ..., dan n-1 untuk loop ke-n.
Mendapatkan Set Hasil yang Dilewatkan oleh Node Penugasan
Jika Anda menggunakan node do-while bersama dengan node penugasan, Anda dapat memperoleh nilai parameter penugasan dan variabel loop menggunakan variabel bawaan yang dijelaskan dalam tabel berikut.
CatatanJika node do-while bergantung pada node penugasan, Anda dapat menambahkan parameter output yang ditentukan dalam Parameter Output untuk node penugasan ke Input Parameters untuk node do-while. Kemudian, Anda dapat menggunakan node do-while untuk mendapatkan set hasil yang dilewatkan oleh node penugasan atau data tertentu dalam set hasil. Parameter input dikonfigurasi dalam format ${dag.Nama Variabel}. Ganti nama variabel dengan nama parameter input yang ditentukan dalam Input Parameters untuk node do-while. Dalam variabel bawaan berikut,
inputmenentukan nama input parameter yang didefinisikan dalam node do-while dan digunakan untuk mendapatkan set hasil yang dilewatkan oleh node penugasan. Anda harus mengganti input dengan nama sebenarnya dari parameter input yang Anda gunakan.Variabel Bawaan
Deskripsi
${dag.input}Dataset yang dilewatkan oleh node penugasan leluhur.
${dag.input[${dag.offset}]}Entri data yang diperoleh oleh node do-while dalam loop saat ini.
${dag.input.length}Panjang dataset yang diperoleh di dalam node do-while.
Contoh Nilai Variabel
Format set hasil yang dilewatkan oleh node penugasan bervariasi berdasarkan bahasa penugasan yang digunakan oleh node penugasan. Jika Anda menggunakan node do-while untuk mendapatkan set hasil yang dilewatkan oleh node penugasan dan node penugasan menggunakan bahasa Shell, set hasil atau data tertentu dalam set hasil dilewatkan ke node do-while sebagai array satu dimensi. Jika node penugasan menggunakan bahasa ODPS SQL, set hasil atau data tertentu dalam set hasil dilewatkan ke node do-while sebagai array dua dimensi. Untuk informasi lebih lanjut, lihat Format Output Parameter outputs.
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 do-while
Variabel Bawaan
Nilai untuk loop pertama
Nilai untuk loop kedua
${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 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 do-while
Variabel Bawaan
Nilai untuk loop pertama
Nilai untuk loop kedua
${dag.input}+----------------------------------------------+ | uid | region | age_range | zodiac | +----------------------------------------------+ | 0016359810821 | Hubei Province | 30 to 40 years old | Cancer | | 0016359814159 | Unknown | 30 to 40 years old | Cancer | +----------------------------------------------+${dag.input[${dag.offset}]}0016359810821, Hubei Province, 30 to 40 years old, Cancer0016359814159, Unknown, 30 to 40 years old, Cancer${dag.input.length}2
CatatanJumlah baris dalam array dua dimensi adalah panjang dataset. Jumlah baris dalam array dua dimensi di output node penugasan adalah 2.
${dag.input[0][1]}CatatanVariabel bawaan ini menentukan nilai di baris pertama dan kolom kedua dari array dua dimensi.
Hubei Province
${dag.loopTimes}1
2
${dag.offset}0
1
Kode Contoh untuk Node Akhir
Anda dapat menggunakan ODPS SQL, Shell, atau Python 2 untuk mengembangkan kode untuk node end. Bagian ini menyediakan contoh kode tipikal dalam bahasa-bahasa tersebut.
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 kode contoh node akhir di atas, jumlah baris dan offset dibandingkan dengan nilai tetap untuk membatasi jumlah loop yang dapat dijalankan untuk node do-while.
Shell
if [ ${dag.loopTimes} -lt 5 ];
then
echo "True"
else
echo "False"
fiDalam kode di atas, jumlah loop yang telah selesai dibandingkan dengan 5 untuk membatasi jumlah loop yang dapat dijalankan untuk node do-while. Variabel ${dag.loopTimes} menentukan jumlah loop yang telah selesai.
Nilai variabel ${dag.loopTimes} adalah 1 untuk loop pertama dan bertambah 1 setiap kali. Dalam hal ini, nilai variabel ${dag.loopTimes} adalah 2 untuk loop kedua dan 5 untuk loop kelima. Dalam kode contoh di atas, ketika loop kelima selesai, output node akhir adalah False, dan node do-while keluar dari looping.
Python 2
if ${dag.loopTimes}<${dag.input.length}:
print True;
else
print False;
# Mulai loop berikutnya jika node akhir mengembalikan True.
# Keluar dari looping jika node akhir mengembalikan False.Dalam kode contoh di atas, jumlah loop yang telah selesai dibandingkan dengan jumlah baris dalam dataset yang dilewatkan oleh node penugasan untuk membatasi jumlah loop yang dapat dijalankan untuk node do-while. Variabel ${dag.loopTimes} menentukan jumlah loop yang telah selesai.
Skenario
Menggunakan node do-while bersama dengan node penugasan
Tabel berikut menjelaskan skenario tipikal dan tindakan pencegahan untuk menggunakan node do-while bersama dengan node penugasan.
Skenario | Tindakan Pencegahan | Contoh Konfigurasi |
Saat sebuah node |
|
|
Menggunakan node do-while bersama dengan node cabang dan node penggabungan
Tabel berikut menjelaskan skenario tipikal dan tindakan pencegahan untuk menggunakan node do-while bersama dengan node cabang dan node penggabungan.
Skenario | Tindakan Pencegahan |
Node internal dari node do-while perlu melakukan penilaian logis atau traversal hasil. Dalam hal ini, Anda dapat menyesuaikan node tugas di dalam node do-while dan menggunakan node cabang dan node penggabungan bersama dengan node do-while. Sebagai contoh, Anda dapat menggunakan node cabang bernama | Dalam alur kerja internal node do-while, node cabang |
