Dependensi penjadwalan di DataWorks adalah dependensi antar instans, bukan antar task. Setiap kali sebuah task dijalankan, DataWorks menghasilkan satu instans untuk siklus penjadwalan tersebut. Ketika task ancestor dan descendant dijalankan dengan frekuensi berbeda, aturan yang menentukan instans ancestor mana yang harus ditunggu oleh instans descendant disebut prinsip kedekatan waktu penjadwalan.
Konsep utama
Instans: Unit eksekusi untuk satu siklus penjadwalan. Task yang dijadwalkan per jam menghasilkan satu instans per jam.
Prinsip kedekatan waktu penjadwalan: Instans descendant bergantung pada instans ancestor yang waktu penjadwalannya paling dekat — tetapi tidak lebih baru — daripada waktu penjadwalannya sendiri, dan bukan merupakan instans ancestor dari instans lainnya.
Self-dependency: Konfigurasi yang membuat setiap instans bergantung pada instans sebelumnya dari task yang sama. Saat diaktifkan, hanya instans pertama hari itu yang bergantung pada task ancestor; setiap instans berikutnya bergantung pada instans sebelumnya dari task yang sama alih-alih dijalankan secara paralel.
Dry-run instance: Instans placeholder yang dihasilkan untuk task mingguan, bulanan, atau tahunan pada hari-hari ketika tidak ada eksekusi aktual yang dijadwalkan. Statusnya secara otomatis diatur sebagai berhasil tanpa menjalankan kode apa pun, sehingga tidak memblokir task descendant.
Cara kerja prinsip kedekatan
Prinsip kedekatan berlaku setiap kali task ancestor dan descendant dijalankan dengan frekuensi berbeda:
Instans descendant bergantung pada instans ancestor yang waktu penjadwalannya paling dekat tetapi tidak lebih baru daripada waktu penjadwalannya sendiri.
Dua kasus khusus berlaku:
-
Jika tidak ada instans ancestor yang memiliki waktu penjadwalan lebih awal daripada instans descendant pertama hari itu, instans descendant pertama tersebut bergantung pada instans ancestor pertama hari itu.
-
Jika waktu penjadwalan task descendant tiba sebelum task ancestornya selesai dijalankan, descendant tersebut menunggu. Waktu mulai aktualnya tidak lebih awal daripada waktu penyelesaian ancestor.
Contoh terapan — task per jam bergantung pada task harian
Task A (task harian) dijadwalkan pukul 07.00. Task B (task per jam) dijadwalkan pukul 00.00, 08.00, dan 16.00.
Saat pukul 00.00 tiba, Task A belum selesai. Instans Task B pukul 00.00 menunggu. Waktu paling awal Task B dapat benar-benar dimulai adalah pukul 07.00, setelah Task A selesai.
Kapan prinsip kedekatan berlaku
| Skenario | Apakah prinsip kedekatan berlaku? | Pemetaan |
|---|---|---|
| Task per jam bergantung pada task per jam — jumlah instans per hari sama | Tidak | Satu-ke-satu: instans pertama bergantung pada instans pertama, instans kedua pada instans kedua, dan seterusnya |
| Task per jam bergantung pada task per jam — jumlah instans per hari berbeda | Ya | Setiap descendant bergantung pada instans ancestor terdekat yang tidak lebih baru daripada waktu penjadwalannya sendiri |
| Task per jam bergantung pada task per menit | Ya | Lihat Dependensi antara task per jam dan per menit |
| Task per menit bergantung pada task per jam | Ya | Setiap instans per menit bergantung pada instans per jam terdekat sebelumnya |
| Task per jam atau per menit bergantung pada task harian | Tidak (semua instans bergantung pada satu instans harian) | Lihat Task per jam atau per menit yang bergantung pada task harian |
| Task harian bergantung pada task per jam atau per menit | Tidak (secara default bergantung pada semua instans) | Lihat Tugas Harian Berdasarkan Jam atau Menit |
| Task harian, per jam, atau per menit bergantung pada task mingguan, bulanan, atau tahunan | Ya (instans dry-run mengisi hari-hari yang tidak dijadwalkan) | Lihat Dependensi pada task mingguan, bulanan, dan tahunan |
Mode dependensi berdasarkan pasangan frekuensi
Dependensi antara task per jam dan per menit
Task per jam bergantung pada task per jam
Ketika kedua task menghasilkan jumlah instans yang sama per hari, pemetaan satu-ke-satu berlaku terlepas dari kapan masing-masing task memulai periode penjadwalannya.
-
Skenario 1 — jumlah instans sama, periode sama: Node A dan Node B keduanya dijadwalkan setiap 5 jam dalam rentang 00.00–23.59. Keduanya menghasilkan jumlah instans yang sama. Pemetaan satu-ke-satu berlaku: instans pertama B bergantung pada instans pertama A, instans kedua B pada instans kedua A, dan seterusnya.
-
Skenario 2 — jumlah instans sama, waktu mulai berbeda: Node A dijalankan setiap 4 jam mulai pukul 06.10 hingga 21.59 (4 instans: 06.10, 10.10, 14.10, 18.10). Node B dijalankan setiap 4 jam mulai pukul 08.00 hingga 23.59 (4 instans: 08.00, 12.00, 16.00, 20.00). Jumlah instans sama, sehingga pemetaan satu-ke-satu berlaku: instans B pukul 08.00 bergantung pada instans A pukul 06.10, instans B pukul 12.00 pada instans A pukul 10.10, dan seterusnya.
Ketika jumlah instans berbeda, prinsip kedekatan menentukan pemetaannya. Jika ancestor menghasilkan lebih sedikit instans daripada descendant, beberapa instans descendant mungkin bergantung pada instans ancestor yang sama.
Jam bergantung pada menit
| Mode | Perilaku |
|---|---|
| Tidak ada self-dependency pada task per menit | Instans per jam untuk jam tertentu bergantung pada semua instans per menit dalam jam yang sama. |
| Self-dependency pada kedua task | Instans per jam bergantung pada instans per menit yang waktu penjadwalannya paling dekat tetapi tidak lebih baru daripada waktu penjadwalan instans per jam tersebut dalam jam yang sama. |
Menit tergantung pada jam
| Mode | Perilaku |
|---|---|
| Tidak ada self-dependency pada task per menit | Setiap instans per menit bergantung pada instans per jam yang waktu penjadwalannya paling dekat tetapi tidak lebih baru daripada waktu penjadwalan instans per menit tersebut. Beberapa instans per menit dapat berbagi instans ancestor per jam yang sama. |
| Self-dependency pada kedua task | Setiap instans per menit juga bergantung pada instans siklus sebelumnya dari task yang sama, selain instans per jam terdekat sebelumnya. |
Task per jam atau per menit yang bergantung pada task harian
| Mode | Perilaku |
|---|---|
| Tidak ada self-dependency pada task per jam/per menit | Semua instans yang dihasilkan untuk task per jam atau per menit pada hari ini bergantung pada satu instans harian. Setelah task harian selesai, semua instans per jam/per menit yang waktu penjadwalannya telah lewat dijalankan secara paralel. |
| Self-dependency pada task per jam/per menit | Hanya instans pertama hari ini yang bergantung pada task harian. Setiap instans berikutnya bergantung pada instans sebelumnya dari task yang sama, sehingga instans dijalankan secara berurutan. |
Saat self-dependency diaktifkan, instans pertama hari ini mungkin bergantung pada instans terakhir hari sebelumnya. Jika instans hari sebelumnya tersebut belum selesai, task per jam atau per menit tidak dapat dimulai pada hari ini.
Tugas harian berdasarkan jam atau menit
| Mode | Perilaku |
|---|---|
| Tidak ada self-dependency pada task per jam/per menit | Instans harian bergantung pada semua instans per jam atau per menit pada hari ini. Task harian dimulai setelah semua instans tersebut selesai. |
| Self-dependency pada task per jam/per menit | Instans harian bergantung pada instans per jam atau per menit yang waktu penjadwalannya paling dekat tetapi tidak lebih baru daripada waktu penjadwalan task harian. Task harian dimulai setelah instans spesifik tersebut selesai. |
Aktifkan self-dependency pada task per jam atau per menit jika task harian harus dimulai segera setelah eksekusi upstream terakhir sebelum waktu penjadwalannya, alih-alih menunggu semua instans upstream selesai.
Task harian yang bergantung pada task harian lainnya
| Mode | Perilaku |
|---|---|
| Tidak ada self-dependency pada task harian ancestor | Instans harian descendant bergantung pada instans harian ancestor dalam siklus penjadwalan yang sama (hari kalender yang sama). |
| Self-dependency pada task harian ancestor | Terjadi cross-dependency: instans ancestor hari ini bergantung pada instans ancestor hari sebelumnya. Task descendant tidak dapat dimulai hingga kedua kondisi tersebut terpenuhi. |
Task harian yang bergantung pada task per jam atau per menit hari sebelumnya
| Mode | Perilaku |
|---|---|
| Tidak ada self-dependency pada task per jam/per menit | Task harian hari ini bergantung pada semua instans yang dihasilkan untuk task per jam atau per menit pada hari sebelumnya. |
| Self-dependency pada task per jam/per menit | Task harian hari ini hanya bergantung pada instans terakhir yang dihasilkan untuk task per jam atau per menit pada hari sebelumnya. |
Dependensi pada task mingguan, bulanan, dan tahunan
Ketika task harian, per jam, atau per menit bergantung pada task mingguan, bulanan, atau tahunan, DataWorks menghasilkan instans dry-run untuk task frekuensi rendah tersebut pada setiap hari yang berada di luar hari eksekusi yang dijadwalkan. Instans dry-run segera selesai dengan status berhasil, sehingga task descendant tidak diblokir.
Contoh — task harian bergantung pada task mingguan (tanpa self-dependency)
Task mingguan dijadwalkan setiap Senin dan Jumat.
-
Senin dan Jumat: task mingguan dijalankan secara normal. Setelah selesai, task harian dijalankan.
-
Selasa, Rabu, Kamis, Sabtu, dan Minggu: instans dry-run dihasilkan untuk task mingguan. Statusnya langsung diatur sebagai berhasil tanpa menjalankan kode apa pun. Task harian dijalankan seperti biasa.
Pilih mode dependensi yang tepat
Gunakan tabel ini untuk mengidentifikasi konfigurasi yang tepat untuk skenario umum.
| Tujuan | Konfigurasi |
|---|---|
| Task harian menunggu semua data per jam sebelum dijalankan | Task harian bergantung pada task per jam; tidak ada self-dependency pada task per jam |
| Task harian dimulai segera setelah eksekusi per jam terakhir sebelum waktu penjadwalannya selesai | Aktifkan self-dependency pada task per jam |
| Instans per jam dijalankan secara berurutan setelah task harian selesai (tanpa burst paralel) | Aktifkan self-dependency pada task per jam |
| Semua instans per jam dimulai segera setelah task harian selesai (burst paralel diperbolehkan) | Tidak ada self-dependency pada task per jam |
| Task harian menunggu semua data per jam hari sebelumnya | Task harian bergantung pada task per jam hari sebelumnya; tidak ada self-dependency pada task per jam |
| Task harian hanya menunggu eksekusi terakhir task per jam hari sebelumnya | Aktifkan self-dependency pada task per jam |
Langkah selanjutnya
-
Untuk konfigurasi dependensi penjadwalan siklus yang sama dan siklus sebelumnya, lihat topik konfigurasi dependensi penjadwalan.
-
Di DataWorks, Anda dapat mengonfigurasi node ancestor dan descendant untuk seluruh alur kerja. Untuk konfigurasi dependensi tingkat alur kerja, lihat Alur kerja berulang.