DataWorks memungkinkan Anda membuat dependensi antara task yang dipicu otomatis dengan frekuensi penjadwalan berbeda, seperti menit, jam, hari, minggu, bulan, dan tahun. Setiap eksekusi task merupakan sebuah instans, dan frekuensi penjadwalan menentukan jumlah instans yang dihasilkan. Topik ini menjelaskan cara DataWorks menetapkan dependensi antara instans task leluhur (ancestor) dan task turunan (descendant) ketika frekuensi penjadwalannya berbeda.
Latar Belakang
Di DataWorks, task yang dipicu otomatis menghasilkan instans berdasarkan frekuensi penjadwalannya. Misalnya, task per jam menghasilkan sejumlah instans tertentu setiap hari. Dependensi task ditetapkan antar instans-nya. Ketika task leluhur dan task turunan memiliki frekuensi penjadwalan berbeda, jumlah instans dan cara saling bergantungnya akan bervariasi.
DataWorks mendukung berbagai skenario dependensi penjadwalan. Anda dapat memilih untuk mengonfigurasi dependensi penjadwalan siklus sama atau dependensi penjadwalan lintas siklus. Untuk informasi selengkapnya, lihat Configure a same-cycle scheduling dependency dan Configure a cross-cycle scheduling dependency.
Untuk skenario lintas zona waktu di mana task harian bergantung pada task per jam atau per menit, selain mencapainya secara tidak langsung melalui self-dependency dan prinsip kedekatan, Anda dapat mengaktifkan Advanced Scheduling Dependency Configuration untuk langsung menggunakan dependensi Specified Range guna mengonfigurasi rentang dependensi yang diperlukan (misalnya [-5, 19]), atau menggunakan dependensi Specified Set untuk mengonfigurasi dependensi secara tepat pada instans pada waktu tetap, tanpa perlu mengatur self-dependency untuk task hulu per jam tersebut. Untuk informasi selengkapnya, lihat Configure a same-cycle scheduling dependency.
Pahami konsep-konsep berikut sebelum mengonfigurasi dependensi penjadwalan.
No. | Deskripsi | Referensi |
1 | DataWorks mendukung berbagai frekuensi penjadwalan, termasuk menit, jam, hari, minggu, bulan, dan tahun. Ketika task leluhur dan task turunan memiliki frekuensi penjadwalan berbeda, DataWorks menetapkan dependensi penjadwalan menggunakan prinsip kedekatan waktu penjadwalan.
Catatan Jika task per jam bergantung pada task per jam lain dan keduanya menghasilkan jumlah instans yang sama per hari, prinsip ini tidak berlaku. Dependensinya tidak terkait dengan waktu penjadwalan. Secara default, task harian bergantung pada semua instans yang dihasilkan oleh task leluhurnya (per jam atau per menit) pada hari yang sama. Task harian hanya mulai berjalan setelah semua data hari tersebut dari task leluhur selesai diproses.
| Mount dependencies: proximity principle |
2 | Dependensi penjadwalan menetapkan dependensi data antar task. Task turunan tidak akan berjalan hingga task leluhurnya berhasil diselesaikan, terlepas dari waktu penjadwalan task turunan itu sendiri. | Impact of dependencies on task execution |
3 | Anda dapat lebih memahami prinsip kedekatan melalui contoh skenario berikut. | Appendix 1: Summary of complex dependency scenarios Skenario tersebut meliputi: |
Resolusi dependensi: Prinsip kedekatan waktu penjadwalan
Ketika task yang dipicu otomatis berjalan di DataWorks, beberapa instans dihasilkan. Instans turunan bergantung pada instans leluhur. Kecuali instans leluhur tertentu ditentukan, instans turunan mengikuti prinsip kedekatan saat menetapkan dependensi. Artinya, instans turunan bergantung pada instans leluhur yang waktu penjadwalannya paling dekat tetapi tidak lebih baru daripada waktu penjadwalan instans turunan tersebut dan belum diklaim oleh instans turunan lain. Prinsip dependensi untuk berbagai skenario adalah sebagai berikut:
Catatan Jika waktu penjadwalan task turunan lebih awal daripada waktu penjadwalan task leluhur, task turunan tidak akan dijadwalkan meskipun waktu penjadwalannya telah tiba. Task tersebut harus menunggu hingga task leluhur selesai sebelum dapat dijadwalkan.
Ketika dependensi ditetapkan berdasarkan prinsip kedekatan, jika tidak ada instans leluhur yang dijadwalkan lebih awal daripada instans pertama task turunan pada suatu hari, instans turunan tersebut secara default bergantung pada instans leluhur pertama hari itu.
Skenario | Deskripsi | Diagram |
Dependensi antara task per jam dan task per menit | Dependensi terkait dengan waktu penjadwalan instans Perilaku default: Dependensi instans turunan ditetapkan berdasarkan prinsip kedekatan. DataWorks menetapkan setiap instans turunan ke instans leluhur yang waktu penjadwalannya lebih awal dari atau sama dengan waktu penjadwalan instans turunan tersebut dan belum diklaim oleh instans turunan lain.
Catatan Ketika node hulu berjalan dengan frekuensi lebih tinggi daripada node hilir (artinya leluhur menghasilkan lebih banyak instans daripada turunan), instans hilir sebenarnya bergantung pada semua instans leluhur yang dihasilkan dalam interval penjadwalannya (start, end]. Kasus khusus: Jika node leluhur dan turunan keduanya dikonfigurasi dengan self-dependency (yaitu, dependensi lintas siklus pada node itu sendiri), instans turunan saat ini hanya bergantung pada satu instans leluhur yang waktu penjadwalannya lebih awal dari atau sama dengan waktu penjadwalan instans turunan tersebut.
Catatan Anda dapat merujuk pada diagram untuk skenario detail di mana task per jam dan task per menit dikonfigurasi dengan self-dependency.
Dependensi tidak terkait dengan waktu penjadwalan instans. Ketika task per jam bergantung pada task per jam lain, atau task per menit bergantung pada task per menit lain, dan node leluhur serta turunan menghasilkan jumlah instans yang sama per hari, dependensi ditetapkan dalam pemetaan satu-ke-satu berdasarkan urutan instans.
| Gambar berikut menunjukkan ikhtisar skenario detail untuk dependensi antara task per jam dan task per menit: Tugas per jam bergantung pada tugas per jam
Tugas per Jam Bergantung pada Tugas Berbasis Menit
Task per menit bergantung pada task per jam
Contoh: Task per jam bergantung pada task per jam lain. Skenario 1: Task B per jam bergantung pada task A per jam. Konfigurasi: Rentang waktu diatur menjadi 00:00–23:59 setiap hari. Task A dan task B dijadwalkan setiap 5 jam. Task A dan task B menghasilkan jumlah instans yang sama per hari.
Dependensi: Task A dan task B menghasilkan jumlah instans yang sama per hari, sehingga dependensi instans dipetakan satu-ke-satu. Skenario 2: Konfigurasi: Task A dijadwalkan setiap 4 jam dalam rentang waktu 06:10–21:59 setiap hari, menghasilkan total 4 instans. Task B dijadwalkan setiap 4 jam dalam rentang waktu 08:00–23:59 setiap hari, menghasilkan total 4 instans.
Dependensi: Task A dan task B menghasilkan jumlah instans yang sama per hari, sehingga dependensi instans dipetakan satu-ke-satu.
|
Task harian bergantung pada task per jam atau per menit | Perilaku default: Secara default, task harian bergantung pada semua instans yang dihasilkan oleh task leluhurnya (per jam atau per menit) pada hari yang sama. Task harian hanya mulai berjalan setelah semua data hari tersebut dari task leluhur selesai diproses. Kasus lain: Jika task harian hanya perlu bergantung pada instans per jam atau per menit yang paling dekat dengan waktu penjadwalannya sendiri, Anda dapat mengonfigurasi self-dependency untuk task per jam atau per menit tersebut. Setelah konfigurasi ini, task harian akan mulai berjalan segera setelah instans per jam atau per menit tersebut selesai. | |
Untuk detail tentang dependensi dan perilaku eksekusi dalam berbagai skenario penjadwalan, lihat Appendix 1: Summary of complex dependency scenarios.
Cara dependensi memengaruhi eksekusi task
Begitu task turunan dikonfigurasi dengan dependensi, task tersebut tidak akan berjalan pada waktu penjadwalannya jika task leluhur belum berhasil diselesaikan.
Misalnya, task B per jam bergantung pada task A harian, dan task B per jam tidak dikonfigurasi dengan self-dependency.
Task A harian: Waktu penjadwalan diatur ke 07:00.
Task B per jam: Waktu penjadwalan diatur ke 00:00, 08:00, dan 16:00.
Jika task A harian belum selesai, task B per jam tidak akan berjalan meskipun waktu penjadwalannya 00:00 telah tiba. Waktu eksekusi aktual paling awal untuk task turunan B adalah 07:00.
Lampiran 1: Ringkasan skenario dependensi kompleks
Jika waktu penjadwalan task turunan lebih awal daripada task leluhurnya, task turunan tidak akan didistribusikan meskipun waktu penjadwalannya telah tiba. Task tersebut harus menunggu hingga task leluhur selesai. Untuk instans pertama task turunan pada suatu hari, jika task leluhur tidak memiliki instans yang dijadwalkan lebih awal, task turunan secara default bergantung pada instans pertama task leluhur hari tersebut.
Tugas per jam bergantung pada tugas lain
Skenario | Detail dependensi dan eksekusi | Diagram |
Tugas per jam bergantung pada tugas per jam | Leluhur dan turunan memiliki jumlah instans yang sama Instans yang dihasilkan oleh task leluhur dan turunan pada hari yang sama dipetakan satu-ke-satu. Instans turunan pertama bergantung pada instans leluhur pertama, instans turunan kedua bergantung pada instans leluhur kedua, dan seterusnya. Leluhur dan turunan memiliki jumlah instans berbeda Instans yang dihasilkan oleh task leluhur dan turunan pada hari yang sama dipetakan berdasarkan prinsip kedekatan waktu penjadwalan. Setiap instans turunan bergantung pada instans leluhur yang waktu penjadwalannya paling dekat (pada atau sebelum) waktu penjadwalan instans turunan tersebut. Kasus khusus: Dalam konfigurasi dependensi penjadwalan di mana task leluhur berjalan lebih sering daripada task turunan (skenario "leluhur lebih banyak – turunan lebih sedikit"), logika dependensi untuk instans turunan mengikuti prinsip cakupan interval alih-alih kedekatan sederhana. Cakupan dependensi: Instans turunan bergantung pada semua instans leluhur yang dihasilkan dalam interval siklusnya (start, end].
| |
Tugas per jam bergantung pada Tugas harian | Task per jam tanpa self-dependency Semua instans yang dihasilkan oleh task turunan per jam pada hari tersebut bergantung pada task leluhur harian. Instans per jam turunan mulai berjalan hanya setelah task harian selesai. Pada titik tersebut, semua instans per jam yang waktu penjadwalannya telah tiba berjalan secara konkuren.
Catatan Jika Anda tidak menginginkan eksekusi konkuren, konfigurasikan self-dependency untuk task per jam hilir. Semua instans periodik yang dihasilkan oleh task per jam hilir berjalan secara independen satu sama lain.
Task per jam dengan self-dependency Hanya instans per jam pertama yang bergantung pada task leluhur harian. Setiap instans per jam berikutnya bergantung pada instans per jam dari siklus sebelumnya. Instans per jam saat ini mulai berjalan hanya setelah task harian dan instans per jam siklus sebelumnya keduanya selesai. Bahkan jika waktu penjadwalannya telah tiba, instans per jam tidak berjalan secara konkuren.
Catatan Self-dependency menciptakan dependensi lintas hari. Jika instans periodik terakhir dari hari sebelumnya belum selesai, task hari ini tidak dapat dijadwalkan.
| |
Task per jam bergantung pada task per menit | Task per menit tanpa self-dependency Task turunan per jam bergantung pada semua instans tingkat menit yang dihasilkan oleh task leluhur per menit dalam satu jam tersebut. Task per menit dan task per jam keduanya memiliki self-dependency Task turunan per jam bergantung pada instans tingkat menit leluhur yang waktu penjadwalannya paling dekat (pada atau sebelum) waktu penjadwalan task turunan tersebut dalam satu jam tersebut.
| |
Tugas harian bergantung pada tugas lain
Skenario | Dependensi dan eksekusi | Diagram |
Tugas harian bergantung pada tugas harian lain dalam siklus yang sama. | Tugas harian leluhur tanpa dependensi mandiri Secara default, instans task turunan harian bergantung pada instans task leluhur harian dari siklus yang sama. Task harian leluhur dengan self-dependency Ketika task harian leluhur dikonfigurasi dengan self-dependency, terdapat dependensi lintas siklus antara task turunan harian dan task leluhur harian.
Catatan Self-dependency menciptakan dependensi lintas hari. Jika instans periodik terakhir dari hari sebelumnya belum selesai, task hari ini tidak dapat dijadwalkan.
| |
Tugas harian bergantung pada Tugas per jam pada hari yang sama. | Task per jam tanpa self-dependency Task turunan harian bergantung pada semua instans per jam yang dihasilkan oleh task leluhur per jam pada hari ini. Task harian mulai memproses hanya setelah semua data per jam hari tersebut selesai diproses.
Catatan Jika task harian hanya perlu bergantung pada instans per jam tertentu, Anda dapat mengonfigurasi self-dependency untuk task per jam tersebut. Setelah instans per jam tertentu tersebut berhasil berjalan, task harian akan dijadwalkan secara otomatis. Task per jam dengan self-dependency Task turunan harian bergantung pada instans per jam leluhur yang waktu penjadwalannya paling dekat (pada atau sebelum) waktu penjadwalan task turunan tersebut.
| |
Tugas harian bergantung pada tugas per jam atau per menit dari hari sebelumnya. | Task per jam atau per menit tanpa self-dependency Task turunan harian bergantung pada semua instans per jam atau per menit yang dihasilkan oleh task leluhur pada hari sebelumnya. Task per jam atau per menit dengan self-dependency Task turunan harian bergantung pada instans per jam atau per menit terakhir yang dihasilkan oleh task leluhur pada hari sebelumnya.
| Contoh berikut menggunakan task harian yang bergantung pada task per jam hari sebelumnya. |
Tugas per menit bergantung pada tugas lain
Skenario | Deskripsi dependensi | Diagram |
Tugas per menit bergantung pada tugas per jam. | Task per menit tanpa self-dependency Setiap instans task turunan per menit bergantung pada instans per jam terdekat yang waktu penjadwalannya lebih awal dari atau sama dengan waktu penjadwalannya sendiri, tanpa duplikasi dependensi.
Catatan Dalam skenario ini, beberapa instans periodik hilir berbasis menit bergantung pada instans periodik hulu per jam yang sama. Task per menit dan per jam keduanya dikonfigurasi dengan self-dependency Setiap instans task turunan per menit bergantung pada instans sebelumnya sendiri dan, berdasarkan prinsip kedekatan waktu penjadwalan, bergantung pada instans leluhur per jam terdekat yang waktu penjadwalannya lebih awal dari atau sama dengan waktu penjadwalannya sendiri.
| |
Tugas menit bergantung pada tugas harian | | |
Tugas lain yang bergantung pada tugas mingguan, bulanan, atau tahunan
Ketika task harian, per jam, atau per menit bergantung pada task mingguan, bulanan, atau tahunan, task mingguan/bulanan/tahunan tersebut menghasilkan instans dry-run pada hari non-penjadwalan. Instans-instans ini tidak benar-benar memproses data, tidak mengonsumsi sumber daya, dan tidak menghambat eksekusi task turunan.
Contoh berikut menggunakan skenario task harian bergantung pada task mingguan tanpa self-dependency:
Task leluhur mingguan: Berjalan normal pada Senin dan Jumat. Pada Selasa, Rabu, Kamis, Sabtu, dan Minggu, instans dry-run dihasilkan dan secara otomatis diatur ke status sukses pada waktu penjadwalan tanpa mengeksekusi logika kode. Instans dry-run tidak memengaruhi eksekusi normal instans turunan.
Task turunan harian: Menghasilkan instans terjadwal setiap hari dan bergantung pada instans yang dihasilkan oleh task leluhur mingguan setiap hari (termasuk instans dry-run). Setelah instans task leluhur mingguan hari tersebut berhasil diselesaikan, instans turunan yang sesuai dipicu untuk berjalan.
Lampiran 2: Penjadwalan alur kerja
DataWorks memungkinkan Anda menambahkan node leluhur dan turunan ke dalam alur kerja secara keseluruhan. Untuk detail tentang penjadwalan alur kerja, lihat Workflow scheduling.
Lampiran 3: Agregasi data global lintas zona waktu (dependensi rentang tertentu)
Ketika gudang data di Tiongkok memproses data secara terpusat dari berbagai wilayah di seluruh dunia, task leluhur per jam di setiap wilayah berjalan berdasarkan waktu lokal, sedangkan task turunan harian mengagregasi data harian berdasarkan zona waktu Tiongkok. Karena perbedaan zona waktu, task turunan harian harus menggunakan dependensi rentang tertentu untuk bergantung pada semua instans task leluhur per jam di setiap wilayah dalam jendela waktu tertentu.
Contoh skenario (Waktu data: 2026-01-22)
Wilayah | Selisih waktu dari Tiongkok | Jenis dependensi | Konfigurasi offset | Instans yang sebenarnya bergantung |
India | 2,5 jam di belakang | Specified range | [-3, 21] | 01-21 21:00 ~ 01-22 21:00 (24 instans) |
Arab Saudi | 5 jam di belakang | Specified range | [-5, 19] | 01-21 19:00 ~ 01-22 19:00 (24 instans) |
Perilaku dependensi lintas hari dalam skenario backfill
Perilaku dependensi lintas hari dari instans yang dihasilkan oleh task backfill berbeda dari instans penjadwalan reguler.
1. Dependensi lintas hari yang dikonfigurasi dengan rentang tertentu atau set tertentu
Ketika Anda menjalankan task backfill, dependensi lintas hari yang dikonfigurasi dengan rentang tertentu atau set tertentu tidak berlaku.
Perilaku spesifik: Ketika instans backfill dihasilkan untuk beberapa tanggal bisnis, sistem secara otomatis mengabaikan semua dependensi yang melintasi batas tanggal bisnis selama resolusi dependensi. Artinya, instans backfill hanya memasang instans hulu dari tanggal bisnis yang sama, dan tidak memasang instans hulu yang mengarah ke hari sebelumnya atau hari berikutnya sebagaimana ditentukan dalam konfigurasi.
Contoh: Task harian dikonfigurasi dengan dependensi rentang pada task hulu per jam [-4h, 0] (bergantung pada 4 instans sebelum 00:00 hari ini). Dalam penjadwalan reguler, instans pada 11 Mei bergantung pada instans dari 10 Mei, 20:00–23:00. Namun, ketika Anda melakukan backfill data untuk 11 Mei, dependensi lintas hari ini diabaikan, dan instans tersebut tidak akan memasang instans hulu apa pun.
2. Dependensi lintas hari default dalam backfill (mekanisme serialisasi)
Secara default, ketika Anda menjalankan backfill batch non-dikelompokkan, terdapat dependensi serial implisit antara instans dari tanggal bisnis berbeda.
Perilaku spesifik: Semua instans backfill untuk tanggal bisnis D menunggu hingga semua instans backfill untuk tanggal bisnis D-1 berhasil diselesaikan sebelum mulai berjalan. Artinya, jika instans apa pun pada tanggal D-1 gagal, tidak ada instans pada tanggal D yang akan dijadwalkan.
Pengecualian: Jika Anda memilih eksekusi berkelompok untuk backfill, mekanisme serialisasi ini tidak berlaku. Instans task dalam setiap kelompok eksekusi berjalan secara independen dan tidak dipengaruhi oleh status instans di kelompok lain.