Fitur Tugas Periodik MaxCompute memungkinkan Anda menggunakan SQL untuk menyesuaikan logika penjadwalan dan komputasi, sehingga membantu mengelola tugas secara lebih efisien, fleksibel, dan hemat biaya serta memperpendek siklus penjadwalan.
Fitur ini berada dalam pratinjau undangan. Untuk informasi selengkapnya tentang cara menggunakan fitur dalam pratinjau undangan, lihat Petunjuk.
Fitur
Tugas periodik MaxCompute memungkinkan Anda menyesuaikan kebijakan penjadwalan tugas secara fleksibel, mengeksekusi logika komputasi SQL yang sesuai, membangun pipa data secara otomatis, dan menyederhanakan proses ekstrak, transformasi, dan muat (ETL). Anda juga dapat menggabungkan tugas dengan perubahan data tabel dan pembacaan aliran untuk membuat alur kerja ETL berkelanjutan yang memproses perubahan data terbaru. Fitur ini memiliki atribut berikut:
Mendukung SQL: Semua operasi manajemen tugas periodik dapat dilakukan menggunakan pernyataan SQL yang sederhana.
Mendukung manajemen siklus hidup penuh: Termasuk membuat, memodifikasi, menghapus, dan melihat tugas, serta melihat daftar tugas dan daftar instans eksekusi tugas.
Jadwal berulang tingkat kedua: Mendukung penjadwalan terjadwal dengan interval minimum 10 detik.
Menyediakan layanan penjadwalan bawaan MaxCompute untuk efisiensi lebih tinggi dan biaya lebih rendah.
Mendukung ekspresi WHEN untuk mengonfigurasi kondisi startup instans, yang memungkinkan penilaian kondisional yang kompleks.
Mendukung integrasi tanpa hambatan dengan objek platform yang memerlukan penyegaran berkala, seperti Delta Table change data capture (CDC) dan Object Tables, menggunakan layanan penjadwalan bawaan yang efisien.
Secara default, secara otomatis menghasilkan data CDC inkremental di latar belakang.
Peringatan
Sebelum membuat atau menghapus tugas periodik, Anda harus mengatur parameter SET odps.sql.periodic.task.enabled=true; pada tingkat session. Jika parameter ini tidak diatur, Anda tidak dapat membuat atau menghapus tugas periodik.
Buat tugas periodik
Sintaks
CREATE TASK [IF NOT EXISTS] <task_name>
SCHEDULE = "<num> [minute|minutes] | [second|seconds]"
[TASKPROPERTIES("schedule_strategy"="3",--Specifies the number of retries for the scheduled task.
"odps.namespace.schema"="true" ....];
[COMMENT task_comment]
[WHEN <bool_expr>]
AS <taskBody>;Parameter
Item konfigurasi | Wajib | Deskripsi |
IF NOT EXISTS | Tidak | Saat membuat tugas:
|
task_name | Ya | Nama tugas periodik. |
SCHEDULE = "<num> [minute|minutes] | [second|seconds]" | Ya | Interval eksekusi. Satuan yang didukung adalah menit dan detik. Rentang nilai dari 10 detik hingga 3540 detik. Catatan Nilai untuk detik harus antara 10 dan 59. Untuk interval lebih dari 60 detik, gunakan satuan menit. |
| Tidak | Parameter yang ditentukan saat tugas terjadwal mengeksekusi pernyataan SQL. Anda dapat mengonfigurasinya di sini. Nilai umum adalah
|
| Tidak | Komentar untuk tugas periodik. Komentar harus berupa string yang valid dengan panjang maksimum 1024 byte. Jika tidak, kesalahan akan dilaporkan. |
WHEN | Tidak | Menentukan ekspresi Boolean. Pernyataan SQL berikutnya hanya dipicu jika ekspresi ini mengembalikan TRUE. Jika tidak dikonfigurasi, nilainya default TRUE. Terdapat batasan pada pernyataan kondisional yang didukung. Hanya beberapa fungsi yang didukung. Catatan
|
| Ya | Tugas SQL yang akan dieksekusi. Pernyataan SQL yang dijalankan di editor kode tidak didukung. Sintaks Data Manipulation Language (DML) dan Data Query Language (DQL) umum didukung. Data Definition Language (DDL) tidak didukung. |
Contoh
Anda dapat membuat tugas penjadwalan periodic_task1, yang berjalan setiap 5 menit dan mencoba ulang hingga 3 kali jika penjadwalan gagal. Tugas SQL INSERT INTO acid2_table_dest SELECT pk, val FROM acid_stream hanya dieksekusi ketika kondisi stream_has_data('delta_table_stream') mengembalikan TRUE.
Buat Delta Table inkremental.
CREATE TABLE acid2_table_dest ( pk BIGINT NOT NULL PRIMARY KEY, val BIGINT ) tblproperties ("transactional"="true");Buat Delta Table sumber, lalu buat stream yang terkait dengan Delta Table tersebut.
-- Buat Delta Table sumber. CREATE TABLE delta_table_src ( pk bigint NOT NULL PRIMARY KEY, val bigint ) tblproperties ("transactional"="true"); -- Buat stream yang terkait dengan Delta Table. CREATE STREAM delta_table_stream ON TABLE delta_table_src version as of 1 strmproperties('read_mode'='append') comment 'stream demo';Buat tugas periodik bernama periodic_task1.
-- Aktifkan pembaruan inkremental otomatis untuk tugas. SET odps.sql.periodic.task.enabled=true; CREATE TASK IF NOT EXISTS periodic_task1 schedule = '5 minutes' TASKPROPERTIES('schedule_strategy'='3') comment 'task_comment' WHEN stream_has_data('delta_table_stream') AS INSERT INTO acid2_table_dest SELECT pk, val FROM delta_table_stream;CatatanEkspresi kondisional
stream_has_data('delta_table_stream')setara dengan menjalankan perintahSELECT stream_has_data('delta_table_stream');di MaxCompute.Masukkan data ke Delta Table sumber, tunggu hingga penjadwalan selesai, lalu lihat data di tabel tujuan.
-- Masukkan data ke Delta Table sumber. INSERT INTO delta_table_src VALUES (1, 1), (2, 2); -- Tunggu hingga penjadwalan selesai, lalu lihat data di tabel tujuan. SELECT * FROM acid2_table_dest;Hasil berikut dikembalikan, yang menunjukkan bahwa data berhasil ditulis ke tabel acid2_table_dest.
-- Ditemukan dua catatan. +------------+------------+ | pk | val | +------------+------------+ | 1 | 1 | | 2 | 2 | +------------+------------+
Modifikasi tugas periodik
Sintaks
Ubah waktu terjadwal (interval eksekusi), parameter SQL (seperti jumlah percobaan ulang), dan komentar tugas periodik.
ALTER TASK [IF EXISTS] <task_name> SET SCHEDULE = "<num> [minute|minutes] | [second|seconds]" [TASKPROPERTIES("schedule_strategy"="3",--Specifies the number of retries for the scheduled task. "odps.namespace.schema"="true" ....]; [COMMENT task_comment];Lanjutkan atau tangguhkan tugas periodik.
CatatanTugas periodik dimulai secara otomatis setelah dibuat. Jika terjadi masalah pada tugas atau jika Anda menangguhkannya, Anda dapat melanjutkan tugas tersebut. Setelah dilanjutkan, statusnya menjadi ACTIVE. Anda dapat melihat statusnya menggunakan perintah
DESC.ALTER TASK [IF EXISTS] task_name resume | suspend;Ubah ekspresi
WHEN, yang menentukan kondisi pemicu untuk tugas penjadwalan berulang. Anda dapat menggunakan sintaks ini setelah tugas dibuat.ALTER TASK [IF EXISTS] task_name MODIFY WHEN <boolean_expr>;
Parameter
Item konfigurasi | Wajib | Deskripsi |
IF EXISTS | Tidak | Saat memodifikasi tugas periodik:
|
boolean_expr | Ya | Ekspresi |
Untuk informasi selengkapnya tentang parameter lainnya, lihat Parameter.
Contoh
Contoh 1: Lanjutkan tugas periodik
ALTER TASK periodic_task1 resume;Contoh 2: Tangguhkan tugas periodik
ALTER TASK periodic_task1 suspend;Contoh 3: Ubah interval penjadwalan menjadi 6 menit
ALTER TASK IF EXISTS periodic_task1 SET schedule = '6 minute';Contoh 4: Tambahkan komentar
ALTER TASK IF EXISTS periodic_task1 SET comment 'comment2';Contoh 5: Tentukan 5 kali percobaan ulang untuk tugas periodik
ALTER TASK IF EXISTS periodic_task1 SET taskproperties('schedule_strategy'='5');Contoh 6: Ubah ekspresi kondisi pemicu tugas
WHENALTER TASK IF EXISTS periodic_task1 MODIFY WHEN 1=1;
Lihat informasi tentang tugas periodik
Metode 1: Gunakan perintah
Sintaks
Lihat informasi tentang tugas periodik
DESC task <task_name>;Lihat informasi dan informasi tambahan tentang tugas periodik
DESC extended task <task_name>;
Parameter
task_name: Nama tugas periodik.
Contoh
Lihat informasi tentang tugas periodic_task1.
DESC task periodic_task1;Berikut adalah contoh hasilnya:
+------------------------------------------------------------------------------------+
| Owner: ALIYUN$odps****@aliyun.com |
| Project: sql_odps2 |
| Schema: |
| Task: periodic_task1 |
+------------------------------------------------------------------------------------+
| CreateTime: 2024-08-23 11:05:46 |
| LastModifiedTime: 2024-08-23 11:05:46 |
+------------------------------------------------------------------------------------+
| ScheduleText: '5 minute' |
| TaskType: SQL |
| Query: insert into acid2_table_dest select pk, val from acid_stream; |
| Condition: stream_has_data('acid_stream') |
| Status: ACTIVE |
| Comment: |
+------------------------------------------------------------------------------------+Metode 2: Gunakan konsol
Jika Pengguna Resource Access Management (RAM) perlu melihat tugas periodik, kebijakan sistem AliyunMaxComputeReadOnlyAccess harus diberikan kepada Pengguna RAM tersebut. Untuk informasi selengkapnya, lihat Izin RAM.
Login ke Konsol MaxCompute, lalu pilih wilayah di pojok kiri atas.
Pada panel navigasi di sebelah kiri, pilih .
Pada halaman Projects, temukan proyek target dan klik Manage di kolom Actions.
Pada halaman Project Settings, pilih tab Periodic Task.
Anda dapat melihat daftar tugas periodik dalam proyek tersebut.
Hapus tugas periodik
Sintaks
DROP TASK [IF EXISTS] <task_name>; Parameter
Item konfigurasi | Wajib | Deskripsi |
IF EXISTS | Tidak | Saat menghapus tugas periodik:
|
task_name | Ya | Nama tugas periodik yang akan dihapus. |
Contoh
Hapus tugas periodic_task1. Perintahnya sebagai berikut:
DROP TASK periodic_task1;Lihat daftar semua tugas periodik
Anda dapat menggunakan pernyataan SQL berikut untuk melihat semua tugas periodik dalam proyek MaxCompute saat ini.
Sintaks
SHOW TASKS; Contoh
Lihat tugas periodik yang telah dibuat.
SHOW TASKS; Berikut adalah contoh hasilnya:
+--------------------------------------------------------------------------------------------------------------------------------+
| Project: openmronlot_daily_arm_src3_xr |
| Schema: |
+--------------------------------------------------------------------------------------------------------------------------------+
| Tasks: |
+--------------------------------------------------------------------------------------------------------------------------------+
| Name | Owner | CreateTime | LastModifiedTime | Status |
+--------------------------------------------------------------------------------------------------------------------------------+
| periodic_task1 | ALIYUN$odpst****@aliyun.com | 2024-07-26 16:19:06 | 2024-07-26 16:19:06 | ACTIVE |
| periodic_task2 | ALIYUN$odpst****@aliyun.com | 2024-07-26 16:19:28 | 2024-07-26 16:19:28 | ACTIVE |
| periodic_task3 | ALIYUN$odpst****@aliyun.com | 2024-07-26 16:20:45 | 2024-07-26 16:20:45 | ACTIVE |
| periodic_task6 | ALIYUN$odpst****@aliyun.com | 2024-08-15 11:09:55 | 2024-08-15 11:09:55 | ACTIVE |
| periodic_task_alter1 | ALIYUN$odpst****@aliyun.com | 2024-07-26 16:17:40 | 2024-07-26 16:17:40 | ACTIVE |
+--------------------------------------------------------------------------------------------------------------------------------+Lihat daftar riwayat instans terjadwal otomatis untuk tugas periodik
Anda dapat melihat InstanceId, CreateTime, EndTime, dan Status instans terjadwal otomatis untuk tugas periodik.
Untuk melihat log detail instans terjadwal otomatis, jalankan perintah WAIT <InstanceId>;. Misalnya, jalankan perintah WAIT 2024082309000177gq71ut9****; untuk mendapatkan URL Logview MaxCompute. Anda dapat menyalin URL Logview tersebut ke browser untuk melihat log detailnya.
Sintaks
SHOW HISTORY FOR TASK <task_name> [[LIMIT <limit_value>] OFFSET <offset_value>]; Parameter
Parameter | Wajib | Deskripsi |
task_name | Ya | Nama tugas periodik. |
limit_value | Tidak | Jumlah catatan yang ditampilkan. Misalnya, Nilai |
offset_value | Tidak | Posisi awal. Ini melewati jumlah catatan yang ditentukan. Nilai 0 menunjukkan bahwa posisi awal adalah catatan tugas terbaru. |
Contoh
Contoh 1: Lihat daftar riwayat instans terjadwal otomatis untuk tugas periodic_task1. Perintahnya sebagai berikut:
SHOW HISTORY FOR TASK periodic_task1;Hasil berikut dikembalikan:
+---------------------------------------------------------------------------------------------------+ | Project: muze_demo | | Schema: | | Task: periodic_task1 | +---------------------------------------------------------------------------------------------------+ | History: | +---------------------------------------------------------------------------------------------------+ | InstanceId | CreateTime | EndTime | Status | +---------------------------------------------------------------------------------------------------+ | 202506130710002599mhgq4**** | 2025-06-13 15:10:00 | 2025-06-13 15:10:00 | Terminated | | 2025061307050039g47jzzs1**** | 2025-06-13 15:05:00 | 2025-06-13 15:05:00 | Terminated | | 2025061307000030o9vh1l1**** | 2025-06-13 15:00:00 | 2025-06-13 15:00:00 | Terminated | | 2025061306550032l84ahcr4**** | 2025-06-13 14:55:00 | 2025-06-13 14:55:00 | Terminated | | 2025061306500043cthoc62**** | 2025-06-13 14:50:00 | 2025-06-13 14:50:00 | Terminated | | 20250613064500324fkhaz1**** | 2025-06-13 14:45:00 | 2025-06-13 14:45:00 | Terminated | | 2025061306400048194cx8g**** | 2025-06-13 14:40:00 | 2025-06-13 14:40:00 | Terminated | | 20250613063500351g99kf2**** | 2025-06-13 14:35:00 | 2025-06-13 14:35:00 | Terminated | | 2025061306300084qkbtk9**** | 2025-06-13 14:30:00 | 2025-06-13 14:30:00 | Terminated | | 20250613062501711nswoio**** | 2025-06-13 14:25:01 | 2025-06-13 14:25:01 | Terminated | | 2025061306200129vln5ncr4**** | 2025-06-13 14:20:01 | 2025-06-13 14:20:01 | Terminated | | 2025061306150119yhlkmbo**** | 2025-06-13 14:15:00 | 2025-06-13 14:15:01 | Terminated | | 2025061306100139uemvy7r6**** | 2025-06-13 14:10:00 | 2025-06-13 14:10:01 | Terminated | +---------------------------------------------------------------------------------------------------+Contoh 2: Lihat daftar riwayat instans terjadwal otomatis untuk tugas periodic_task1. Atur posisi awal ke catatan terbaru dan tampilkan 6 catatan.
SHOW HISTORY FOR TASK periodic_task1 LIMIT 6 OFFSET 0;Hasil berikut dikembalikan:
+---------------------------------------------------------------------------------------------------+ | Project: muze_demo | | Schema: | | Task: periodic_task1 | +---------------------------------------------------------------------------------------------------+ | History: | +---------------------------------------------------------------------------------------------------+ | InstanceId | CreateTime | EndTime | Status | +---------------------------------------------------------------------------------------------------+ | 202506130710002599mhgq4**** | 2025-06-13 15:10:00 | 2025-06-13 15:10:00 | Terminated | | 2025061307050039g47jzzs1**** | 2025-06-13 15:05:00 | 2025-06-13 15:05:00 | Terminated | | 2025061307000030o9vh1l1**** | 2025-06-13 15:00:00 | 2025-06-13 15:00:00 | Terminated | | 2025061306550032l84ahcr4**** | 2025-06-13 14:55:00 | 2025-06-13 14:55:00 | Terminated | | 2025061306500043ethoc62**** | 2025-06-13 14:50:00 | 2025-06-13 14:50:00 | Terminated | | 20250613064500324fkhaz1**** | 2025-06-13 14:45:00 | 2025-06-13 14:45:00 | Terminated | +---------------------------------------------------------------------------------------------------+Contoh 3: Lihat daftar riwayat instans terjadwal otomatis untuk tugas periodic_task1. Lewati 5 catatan, artinya posisi awal adalah catatan keenam.
SHOW HISTORY FOR TASK periodic_task1 OFFSET 5;Hasil berikut dikembalikan:
+---------------------------------------------------------------------------------------------------+ | Project: muze_demo | | Schema: | | Task: periodic_task1 | +---------------------------------------------------------------------------------------------------+ | History: | +---------------------------------------------------------------------------------------------------+ | InstanceId | CreateTime | EndTime | Status | +---------------------------------------------------------------------------------------------------+ | 20250613064500324fkhaz1**** | 2025-06-13 14:45:00 | 2025-06-13 14:45:00 | Terminated | | 2025061306400048194cx8g**** | 2025-06-13 14:40:00 | 2025-06-13 14:40:00 | Terminated | | 20250613063500351g99kf2**** | 2025-06-13 14:35:00 | 2025-06-13 14:35:00 | Terminated | | 2025061306300084qkbtk9**** | 2025-06-13 14:30:00 | 2025-06-13 14:30:00 | Terminated | | 20250613062501711nswoio**** | 2025-06-13 14:25:01 | 2025-06-13 14:25:01 | Terminated | | 2025061306200129vln5ncr4**** | 2025-06-13 14:20:01 | 2025-06-13 14:20:01 | Terminated | | 2025061306150119yhlkmbo**** | 2025-06-13 14:15:00 | 2025-06-13 14:15:01 | Terminated | | 2025061306100139uemvy7r6**** | 2025-06-13 14:10:00 | 2025-06-13 14:10:01 | Terminated | +---------------------------------------------------------------------------------------------------+
Daftar putih fungsi
Saat membuat tugas periodik, Anda dapat mengonfigurasi ekspresi Boolean. Pernyataan kondisional yang didukung tunduk pada batasan. Hanya fungsi-fungsi berikut yang didukung. Untuk informasi selengkapnya tentang fungsi-fungsi tersebut, lihat Fungsi bawaan (urut abjad).
DATEADD
DATEDIFF
DATEPART
DATETRUNC
DATE_FORMAT
FROM_UNIXTIME
GETDATE
ISDATE
LASTDAY
LAST_DAY
UNIX_TIMESTAMP
WEEKDAY
WEEKDAY
WEEKOFYEAR
TO_DATE
TO_CHAR
YEAR
QUARTER
MONTH
DAY
DAYOFMONTH
HOUR
MINUTE
SECOND
CURRENT_TIMESTAMP
FROM_UTC_TIMESTAMP
ADD_MONTHS
NEXT_DAY
MONTHS_BETWEEN
TO_MILLIS
ABS
ROUND
CONCAT
CONCAT_WS
GET_JSON_OBJECT
INSTR
LENGTH
LENGTHB
REGEXP_EXTRACT
REGEXP_REPLACE
REGEXP_INSTR
REGEXP_SUBSTR
REGEXP_COUNT
REVERSE
SUBSTR
TOLOWER
TOUPPER
TRIM
LTRIM
RTRIM
REPLACE
SIZE
FIELD
COALESCE
IF
SPLIT
SPLIT_PART
FROM_JSON
MAX_PT
TABLE_EXISTS
PARTITION_EXISTS
GET_LATEST_VERSION
GET_LATEST_TIMESTAMP