Saat menjadwalkan tugas, format waktu standar yang dikembalikan oleh parameter penjadwalan mungkin tidak memenuhi kebutuhan skenario bisnis kompleks—seperti menentukan akhir bulan, akhir kuartal, atau offset waktu kustom. Dalam kasus tersebut, Anda dapat menggunakan fungsi mesin untuk melakukan post-processing terhadap nilai kembali dan menghasilkan format waktu yang diinginkan, baik secara langsung di node komputasi maupun melalui pra-pemrosesan menggunakan node assignment.
Skenario bisnis
Dalam pengembangan data dan alur ekstrak, transformasi, dan muat (ETL), penjadwalan tugas sering bergantung pada dimensi waktu tertentu. Contohnya mencakup penyelesaian bulanan berdasarkan siklus keuangan—seperti hari terakhir bulan sebelumnya—dan sinkronisasi data inkremental yang menggunakan jendela waktu per jam atau per menit. Karena parameter penjadwalan secara default mengembalikan format waktu standar, mereka tidak dapat langsung menghasilkan string waktu non-standar yang kompleks ini sehingga memerlukan post-processing terhadap nilai kembalinya.
Solusi
Terdapat dua pendekatan utama untuk melakukan post-processing terhadap parameter penjadwalan: memprosesnya secara langsung dalam node yang mendukung komputasi fungsi, seperti node ODPS SQL, atau melakukan pra-pemrosesan menggunakan node assignment lalu meneruskan hasilnya ke node downstream. Pilihan metode tergantung pada apakah node target mendukung eksekusi fungsi langsung dalam kodenya.
Direct Processing: Dalam node yang mendukung komputasi fungsi, seperti node ODPS SQL, Anda dapat langsung menggunakan fungsi mesin dalam kode untuk mengubah nilai kembali parameter penjadwalan.
Indirect Processing: Jika node target, seperti node sinkronisasi batch, tidak mendukung eksekusi fungsi dalam kodenya, Anda dapat menambahkan node assignment upstream. Node assignment ini melakukan transformasi fungsi dan meneruskan outputnya ke node downstream sebagai parameter konteks.
Implementasi
Untuk skenario berikut, asumsikan bahwa waktu terjadwal (CYCTIME) dari instans tugas adalah 20250727000500.
Skenario 1: Memproses nilai kembali secara langsung di node SQL
Skenario ini menggunakan node ODPS SQL sebagai contoh. Node ODPS SQL mendukung penggunaan langsung fungsi MaxCompute SQL dalam pernyataan SQL untuk memproses parameter penjadwalan. Untuk jenis node SQL lainnya, Anda dapat merujuk pada fungsi yang didukung oleh mesin terkait.
Mendapatkan hari terakhir bulan sebelumnya
Dapatkan hari terakhir bulan sebelumnya dalam format yyyymmdd, yang umum digunakan untuk partisi atau penyelesaian data bulanan.
Konfigurasi parameter: Konfigurasikan parameter penjadwalan untuk mendapatkan tahun dan bulan dari waktu terjadwal tugas saat ini.
last_month=$[yyyy-mm]Logika pemrosesan: Dalam kode ODPS SQL, buat terlebih dahulu hari pertama bulan ini, lalu gunakan fungsi
DATEADDuntuk mengurangi satu hari guna mendapatkan hari terakhir bulan sebelumnya. Terakhir, gunakan fungsiREPLACEuntuk menghapus pemisah.SELECT REPLACE(DATEADD(date'${last_month}-01',-1,'dd'),'-','');Contoh: Nilai parameter
last_monthadalah2025-07. Setelah diproses oleh fungsi, hasil yang dikembalikan adalah20250630.
Mendapatkan kuartal saat ini
Hitung kuartal (1, 2, 3, atau 4) berdasarkan bulan dari waktu terjadwal tugas.
Konfigurasi parameter: Konfigurasikan parameter penjadwalan untuk mendapatkan bulan.
month=$[mm]Logika pemrosesan: Dalam kode ODPS SQL, bagi bulan dengan 3 dan bulatkan ke atas ke bilangan bulat terdekat untuk menghitung kuartal.
SELECT CEIL(CAST('${month}' AS INT)/3);Contoh: Nilai parameter
monthadalah07. Setelah diproses oleh fungsi, hasil yang dikembalikan adalah3.
Mendapatkan komponen waktu 15 menit sebelum waktu terjadwal
Dalam skenario yang memerlukan pemotongan data pada titik waktu tertentu, Anda dapat menghitung offset waktu relatif terhadap waktu terjadwal.
Konfigurasi parameter: Gunakan operasi matematika
-15/24/60dalam parameter penjadwalan untuk langsung mendapatkan tahun, bulan, hari, jam, dan menit dari 15 menit sebelumnya.year=$[yyyy-15/24/60]month=$[yyyymm-15/24/60]day=$[yyyymmdd-15/24/60]hour=$[hh24-15/24/60]mi=$[mi-15/24/60]Logika pemrosesan: Anda dapat mereferensikan parameter yang telah dihitung ini secara langsung dalam pernyataan SQL.
select 'year=${year} month=${month} day=${day} hour=${hour} mi=${mi}';Contoh: Setelah perhitungan lintas hari, hasil yang dikembalikan adalah
year=2025 month=202507 day=20250726 hour=23 mi=50.
Skenario 2: Menghasilkan interval waktu untuk sinkronisasi inkremental
Anda dapat menghasilkan parameter waktu untuk tugas sinkronisasi batch yang memerlukan interval waktu tertentu. Asumsikan skenario ini memerlukan format waktu yyyymmddhh24miss dan menggunakan interval tertutup-kiri, terbuka-kanan.
Interval penjadwalan satu hari
Dapatkan interval waktu dari 00:00:00 kemarin hingga 00:00:00 hari ini.
Konfigurasi parameter: Dapatkan tanggal untuk kemarin dan hari ini.
beginDateTime=$[yyyymmdd-1]endDateTime=$[yyyymmdd]Logika pemrosesan: Dalam klausa `WHERE` untuk penyaringan data, gabungkan string untuk melengkapi bagian jam, menit, dan detik.
event_time >= '${beginDateTime}000000' AND event_time < '${endDateTime}000000'Contoh: Waktu mulai dari hasil yang dikembalikan adalah
20250726000000, dan waktu akhir adalah20250727000000.
Interval penjadwalan satu jam
Dapatkan interval waktu dari 00:00 jam sebelumnya hingga 00:00 jam saat ini.
Konfigurasi parameter: Gunakan operasi matematika untuk mendapatkan jam sebelumnya dan jam saat ini.
beginDateTime=$[yyyymmddhh24-1/24]endDateTime=$[yyyymmddhh24]Logika pemrosesan: Dalam klausa `WHERE` untuk penyaringan data, gabungkan string untuk melengkapi bagian menit dan detik.
event_time >= '${beginDateTime}0000' AND event_time < '${endDateTime}0000'Contoh: Waktu mulai dari hasil yang dikembalikan adalah
20250726230000, dan waktu akhir adalah20250727000000.
Skenario 3: Melakukan pra-pemrosesan parameter untuk node downstream menggunakan node assignment
Jika node target, seperti node sinkronisasi batch, tidak dapat memproses parameter penjadwalan secara langsung menggunakan fungsi, Anda dapat menggunakan node assignment untuk pra-pemrosesan. Misalnya, jika tugas sinkronisasi batch perlu menggunakan bidang timestamp untuk sinkronisasi inkremental, ikuti langkah-langkah berikut:
Buat node assignment.
Dalam node assignment, gunakan fungsi mesin, seperti
unix_timestamp, untuk mengonversi parameter penjadwalan standar seperti$[yyyymmddhh24miss]ke format timestamp.Gunakan timestamp yang telah dikonversi—sebagai output dari node assignment—sebagai parameter input untuk node sinkronisasi batch downstream. Untuk informasi selengkapnya, lihat Konfigurasi konteks node.