Pada tugas terjadwal, format waktu standar yang dikembalikan oleh parameter penjadwalan mungkin tidak memenuhi kebutuhan bisnis yang kompleks—seperti menentukan akhir bulan, akhir kuartal, atau offset waktu kustom. Dalam kasus tersebut, Anda dapat melakukan post-processing terhadap nilai kembali menggunakan fungsi engine untuk menghasilkan format waktu yang dibutuhkan. Metode yang tersedia mencakup transformasi langsung di dalam node komputasi atau 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, seperti penyelesaian bulanan berdasarkan siklus keuangan (hari terakhir bulan sebelumnya) atau sinkronisasi data inkremental menggunakan jendela waktu pada tingkat jam atau menit. Karena parameter penjadwalan secara default mengembalikan format waktu standar, mereka tidak dapat langsung menghasilkan string waktu non-standar yang kompleks ini. Oleh karena itu, nilai kembalinya harus melalui post-processing.
Solusi
Terdapat dua cara utama untuk melakukan post-processing terhadap parameter penjadwalan: pemrosesan langsung di dalam node yang mendukung komputasi fungsi, seperti node ODPS SQL, atau pra-pemrosesan dengan node assignment sebelum meneruskan hasilnya ke node downstream. Pemilihan metode tergantung pada apakah node target mendukung transformasi fungsi langsung dalam kodenya.
Pemrosesan langsung: Pada node yang mendukung komputasi fungsi, seperti node ODPS SQL, Anda dapat menggunakan fungsi engine secara langsung dalam kode untuk mentransformasi nilai kembali parameter penjadwalan.
Pemrosesan tidak langsung: Ketika node target (seperti beberapa node sync offline) tidak mendukung transformasi fungsi dalam kodenya, Anda dapat menambahkan assignment node di hulu. Node assignment ini melakukan transformasi fungsi dan meneruskan output-nya sebagai context parameter ke node turunan.
Langkah implementasi
Asumsikan bahwa untuk semua skenario berikut, waktu terjadwal (CYCTIME) dari instans tugas adalah 20250727000500.
Skenario 1: Memproses nilai kembali secara langsung di node SQL
Menggunakan node ODPS SQL sebagai contoh, node ini mendukung pemrosesan parameter penjadwalan secara langsung dalam pernyataan SQL dengan fungsi MaxCompute SQL. Untuk node SQL lainnya, rujuk jenis fungsi yang didukung oleh engine spesifik tersebut.
Mendapatkan hari terakhir bulan sebelumnya
Dapatkan hari terakhir bulan sebelumnya dalam format `yyyymmdd`. Ini sering digunakan untuk partisi atau penyelesaian data bulanan.
Konfigurasi parameter: Konfigurasikan parameter penjadwalan untuk mendapatkan tahun dan bulan dari tugas terjadwal saat ini.
last_month=$[yyyy-mm]Logika pemrosesan: Dalam kode ODPS SQL, pertama-tama bentuk hari pertama bulan berjalan. Kemudian, gunakan fungsi
DATEADDuntuk mengurangi satu hari guna mendapatkan hari terakhir bulan sebelumnya. Gunakan fungsiREPLACEuntuk menghapus pemisah.SELECT REPLACE(DATEADD(date'${last_month}-01',-1,'dd'),'-','');Contoh: Nilai parameter
last_monthadalah2025-07. Setelah diproses oleh fungsi, nilai kembali adalah20250630.
Mendapatkan kuartal saat ini
Hitung kuartal (1, 2, 3, atau 4) yang sesuai dengan waktu terjadwal tugas, berdasarkan bulannya.
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, nilai kembali adalah3.
Mendapatkan komponen waktu 15 menit sebelum waktu terjadwal
Pada skenario yang memerlukan titik waktu presisi untuk segmentasi data, Anda dapat memperoleh offset waktu apa pun relatif terhadap waktu terjadwal.
Konfigurasi parameter: Langsung peroleh tahun, bulan, hari, jam, dan menit dari 15 menit lalu dengan melakukan operasi matematika
-15/24/60pada parameter penjadwalan.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: Langsung referensikan parameter yang telah dihitung sebelumnya ini dalam pernyataan SQL.
select 'year=${year} month=${month} day=${day} hour=${hour} mi=${mi}';Contoh: Setelah perhitungan lintas hari, nilai kembali adalah
year=2025 month=202507 day=20250726 hour=23 mi=50.
Skenario 2: Menghasilkan rentang waktu untuk sinkronisasi inkremental
Hasilkan parameter waktu untuk tugas sync batch yang memerlukan rentang waktu tertentu. Asumsikan skenario ini memerlukan format waktu yyyymmddhh24miss dan interval terbuka-kiri, tertutup-kanan.
Interval penjadwalan satu hari
Peroleh rentang waktu dari 00:00:00 kemarin hingga 00:00:00 hari ini.
Konfigurasi parameter: Peroleh tanggal untuk kemarin dan hari ini secara terpisah.
beginDateTime=$[yyyymmdd-1]endDateTime=$[yyyymmdd]Logika pemrosesan: Dalam klausa `WHERE` untuk penyaringan data, gabungkan string untuk menambahkan bagian jam, menit, dan detik.
event_time > '${beginDateTime}000000' AND event_time <= '${endDateTime}000000'Contoh: Waktu mulai nilai kembali adalah
20250726000000, dan waktu akhir adalah20250727000000.
Interval penjadwalan satu jam
Peroleh rentang waktu dari 00:00 jam sebelumnya hingga 00:00 jam saat ini.
Konfigurasi parameter: Gunakan operasi matematika untuk memperoleh jam sebelumnya dan jam saat ini.
beginDateTime=$[yyyymmddhh24-1/24]endDateTime=$[yyyymmddhh24]Logika pemrosesan: Dalam klausa `WHERE` untuk penyaringan data, gabungkan string untuk menambahkan bagian menit dan detik.
event_time >= '${beginDateTime}0000' AND event_time < '${endDateTime}0000'Contoh: Waktu mulai nilai kembali adalah
20250726230000, dan waktu akhir adalah20250727000000.
Skenario 3: Pra-pemrosesan parameter untuk node downstream menggunakan assignment node
Ketika node target, seperti beberapa node sync batch, tidak dapat memproses parameter penjadwalan secara langsung menggunakan fungsi, Anda dapat menggunakan assignment node untuk pra-pemrosesan. Sebagai contoh, ketika tugas sync batch perlu menggunakan bidang stempel waktu untuk sinkronisasi inkremental, ikuti langkah-langkah berikut:
Anda dapat membuat assignment node.
Dalam assignment node, gunakan fungsi engine, seperti
unix_timestamp, untuk mengonversi parameter penjadwalan standar, misalnya$[yyyymmddhh24miss], ke dalam format Stempel waktu UNIX.Gunakan output dari assignment node (stempel waktu yang telah dikonversi) sebagai parameter input untuk node sync offline downstream. Untuk informasi selengkapnya, lihat Konfigurasi dan penggunaan context parameter node.