MaxCompute周期調度任務(Periodic Task)功能,支持通過SQL語句自定義調度和計算邏輯,從而高效靈活地管理定時調度任務,實現更短的周期、高效的運行及低成本的調度管理。
功能介紹
MaxCompute周期調度任務(Periodic Task)可以靈活自定義任務調度策略,執行對應的SQL計算邏輯,來自動構建數據管道,簡化ETL鏈路。此外,您還可以將任務與表數據變更和流讀場景相結合,從而實現連續的ELT工作流程,以處理最近更改的數據。該功能具有以下特性:
支持SQL語言,所有針對定時任務的管理操作均可通過簡潔的SQL語言實現。
支持全生命周期管理:包括創建、修改、刪除、查看以及查看任務列表和任務執行實例列表。
秒級別周期調度任務,支持最短10 s的定時調度。
MaxCompute內置調度服務,更高效成本更低。
支持配置實例啟動條件的When表達式,該表達式能夠實現較為復雜的條件判斷。
支持與平臺內對象的無縫結合。例如:支持Delta Table CDC、Object Table等需要定期刷新的對象,提供高效的內置調度服務。
默認支持增量CDC數據后臺自動生成。
創建周期調度任務(Periodic Task)
語法
CREATE TASK [IF NOT EXISTS] <task_name> SCHEDULE = "<num> [minute|minutes] | [second|seconds]" [TASKPROPERTIES("schedule_strategy"="3",--指定定時調度任務重試次數 "odps.namespace.schema"="true" ....]; [COMMENT task_comment] WHEN <bool_expr> AS <taskBody>;
參數說明
IF NOT EXISTS
:可選,創建任務時:若選擇該選項,則無論是否存在同名任務,即使原表結構與要創建的目標任務結構不一致,均會返回成功,且已存在的同名任務將不會受到影響。
若未指定該選項,當存在同名任務,將返回報錯。
task_name:必填,周期調度任務名稱。
SCHEDULE = "<num> [minute|minutes] | [second|seconds]"
:必填,執行周期時長,支持的單位為:分鐘、秒。取值范圍:[10秒,59*60秒]。說明單位為秒的數值限制為10~59,大于60 s的需要設置單位為分鐘。
TASKPROPERTIES("schedule_strategy"="3","odps.namespace.schema"="true" ....]
:可選,定時任務調度執行SQL時需要指定的參數,均可通過此處配置。常見取值:schedule_strategy:指定定時調度任務重試次數。定時任務調度執行SQL示例:taskproperties('odps.sql.reducer.instances'='100')
:自動啟動的任務Reduce Task的Instance數量為100個。taskproperties('odps.sql.reducer.memory'='2048')
:自動啟動的任務Reduce Task的每個Instance的Memory大小為2048 M。
COMMENT task_comment
:可選, 周期調度任務的注釋內容。注釋內容為長度不超過1024字節的有效字符串,否則報錯。WHEN:可選,支持配置一個BOOLEAN表達式。僅當該表達式返回True時,后續SQL的執行才會被觸發。如果未進行配置,則默認值為True。目前對支持的條件語句進行了相應的約束,只有部分函數支持使用。
說明BOOLEAN表達式內常用的SCALAR函數,不能使用窗口函數和聚合函數,不能使用子查詢嵌套。
SCALAR函數可以使用CURRENT_TIMESTAMP、GETDATE、WEEKDAY等獲取日期、TO_DATE、CONCAT、LENGTH、REGEXP_REPLACE、UPPER、SPLIT等做轉換、計算和替換,也可以使用MAX_PT、TABLE_EXISTS、PARTITION_EXISTS、STREAM_HAS_DATA、TABLE_NEED_CDC_BUILD獲取表和分區的信息等,支持的函數列表詳情,請參見函數白名單。
AS <taskBody>
:要執行的SQL任務。SQL語句不支持腳本模式執行的語句,目前支持常用的DML和DQL語法, 不支持DDL。
示例
創建調度任務
periodic_task1
,每5 分鐘(minutes)調度一次,調度失敗會重試3次。僅當判斷條件stream_has_data('acid2_stream')
返回結果為true時,執行SQL任務INSERT INTO acid2_table_dest SELECT pk, val FROM acid_stream
。代碼示例如下。-- 創建一個Delta Table增量表 CREATE TABLE acid2_table_dest ( pk bigint NOT NULL PRIMARY KEY, val bigint ) tblproperties ("transactional"="true"); -- 創建一個定時調度任務periodic_task1 CREATE task if NOT EXISTS periodic_task1 schedule = '5 minutes' taskproperties('schedule_strategy'='3') comment 'task_comment' WHEN stream_has_data('acid_stream') AS INSERT INTO acid2_table_dest SELECT pk, val FROM acid_stream;
說明其中
stream_has_data('acid2_stream')
的條件判斷,等同于在MaxCompute中執行select stream_has_data('acid2_stream');
。
修改定時調度任務Periodic Task
語法
ALTER TASK [IF EXISTS] <task_name> SET SCHEDULE = "<num> [minute|minutes] | [second|seconds]" [TASKPROPERTIES("schedule_strategy"="3",--指定定時調度任務重試次數 "odps.namespace.schema"="true" ....]; [COMMENT task_comment]; ALTER TASK [IF EXISTS] task_name resume | suspend; ALTER TASK [IF EXISTS] task_name MODIFY WHEN <boolean_expr>;
參數說明
IF EXISTS
:可選,創建任務時:不指定該選項,若指定的定時調度任務不存在,則返回出錯。
指定該選項,若指定的定時調度任務不存在,將會跳過執行并返回成功;存在指定的定時調度任務存在,將對指定的任務進行修改。
ALTER TASK [IF EXISTS] task_name resume | suspend;
:重啟(resume) 或暫停(suspend)定時調度任務。說明創建定時調度任務后會自動啟動,若定時調度任務出現問題或手動執行了暫停(suspend),導致任務暫停,您可以通過重啟(resume),重新定時調度任務。重啟后通過
desc
查看定時調度任務的狀態是ACTIVE。
其他更多相關參數說明,請參見創建周期調度任務的參數介紹。
示例
ALTER task periodic_task_alter1 resume; --重啟周期調度任務 ALTER task periodic_task_alter1 suspend; --暫停周期調度任務 ALTER task if EXISTS periodic_task_alter1 SET schedule = '6 minute';--修改調度時間 ALTER task if EXISTS periodic_task_alter1 SET comment 'comment2';--添加注釋內容 ALTER task if EXISTS periodic_task_alter1 SET taskproperties('session_parameter'='false');--
查看定時調度任務(Periodic Task)信息
語法
DESC task <task_name>;--查看定時調度任務信息 DESC extended task <task_name>;--查看定時調度任務信息以及Extended信息。
示例
查看定時調度任務periodic_task1信息。
DESC task periodic_task1;
返回結果如下。
+------------------------------------------------------------------------------------+ | Owner: ALIYUN$odpstest1@aliyun.com | | Project: sql_odps2_daoxi | | 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: | +------------------------------------------------------------------------------------+
刪除定時調度任務(Periodic Task)
語法
DROP TASK [IF EXISTS] <task_name>;
參數說明
IF EXISTS
:可選,刪除任務時:不指定該選項,若指定的定時調度任務不存在,則返回出錯。
指定該選項,若指定的定時調度任務不存在,將會跳過執行并返回成功;若指定的定時調度任務存在,將刪除指定任務。
task_name:需要刪除的定時調度任務(Periodic Task)名稱。
查看所有定時調度任務(Periodic Task)列表
您可以通過以下SQL,查看當前MaxCompute項目下的所有定時調度(Periodic Task)任務。
SHOW TASKS;
結果如下所示:
+--------------------------------------------------------------------------------------------------------------------------------+
| Project: openmronlot_daily_arm_src3_xr |
| Schema: |
+--------------------------------------------------------------------------------------------------------------------------------+
| Tasks: |
+--------------------------------------------------------------------------------------------------------------------------------+
| Name | Owner | CreateTime | LastModifiedTime | Status |
+--------------------------------------------------------------------------------------------------------------------------------+
| periodic_task1 | ALIYUN$odpstest1@aliyun.com | 2024-07-26 16:19:06 | 2024-07-26 16:19:06 | ACTIVE |
| periodic_task2 | ALIYUN$odpstest1@aliyun.com | 2024-07-26 16:19:28 | 2024-07-26 16:19:28 | ACTIVE |
| periodic_task3 | ALIYUN$odpstest1@aliyun.com | 2024-07-26 16:20:45 | 2024-07-26 16:20:45 | ACTIVE |
| periodic_task6 | ALIYUN$odpstest1@aliyun.com | 2024-08-15 11:09:55 | 2024-08-15 11:09:55 | ACTIVE |
| periodic_task_alter1 | ALIYUN$odpstest1@aliyun.com | 2024-07-26 16:17:40 | 2024-07-26 16:17:40 | ACTIVE |
| periodic_task_condition_task1 | ALIYUN$odpstest1@aliyun.com | 2024-08-15 11:35:52 | 2024-08-15 11:35:52 | ACTIVE |
| periodic_task_condition_task_f1 | ALIYUN$odpstest1@aliyun.com | 2024-08-15 17:59:38 | 2024-08-15 17:59:38 | ACTIVE |
| periodic_task_condition_task_f2 | ALIYUN$odpstest1@aliyun.com | 2024-08-15 18:00:18 | 2024-08-15 18:00:18 | ACTIVE |
| periodic_task_condition_task_f3 | ALIYUN$odpstest1@aliyun.com | 2024-08-15 18:45:41 | 2024-08-15 18:45:41 | ACTIVE |
| periodic_task_condition_task_f6 | ALIYUN$odpstest1@aliyun.com | 2024-08-15 18:49:53 | 2024-08-15 18:49:53 | ACTIVE |
| periodic_task_ifall_task1 | ALIYUN$odpstest1@aliyun.com | 2024-08-21 09:17:58 | 2024-08-21 09:17:58 | ACTIVE |
| periodic_task_ifall_task2 | ALIYUN$odpstest1@aliyun.com | 2024-08-21 09:26:55 | 2024-08-21 09:26:55 | ACTIVE |
| periodic_task_negative2 | ALIYUN$odpstest1@aliyun.com | 2024-07-26 16:15:43 | 2024-07-26 16:15:43 | ACTIVE |
| periodic_task_negative3 | ALIYUN$odpstest1@aliyun.com | 2024-07-26 16:17:03 | 2024-07-26 16:17:03 | ACTIVE |
| task1 | ALIYUN$odpstest1@aliyun.com | 2024-07-17 11:36:54 | 2024-07-17 11:36:54 | ACTIVE |
+--------------------------------------------------------------------------------------------------------------------------------+
查看定時調度任務(Periodic Task)自動調度實例的歷史列表
語法
SHOW HISTORY FOR TASK <task_name>;
說明上述命令可以看到定時調度任務(Periodic Task)自動調度實例的InstanceId、CreateTime、EndTime以及Status信息。若需要查看某個自動調度實例的詳細日志,可以執行
wait InstanceId
命令。例如:wait 2024082309000177gq71ut9g42m
可以獲取到MaxCompute Logview地址。您可以在瀏覽器中復制MaxCompute Logview地址,查看自動調度實例的詳細日志。示例
--查看定時調度任務periodic_task1的自動調度歷史列表信息。 SHOW HISTORY FOR TASK periodic_task1;
返回結果如下。
+---------------------------------------------------------------------------------------------------+ | Project: xr_project | | Schema: | | Task: periodic_task1 | +---------------------------------------------------------------------------------------------------+ | History: | +---------------------------------------------------------------------------------------------------+ | InstanceId | CreateTime | EndTime | Status | +---------------------------------------------------------------------------------------------------+ | 20240823093000475gpp5sfmcw92 | 2024-08-23 17:30:00 | 2024-08-23 17:30:03 | Terminated | | 2024082309000177gq71ut9g42m | 2024-08-23 17:00:00 | 2024-08-23 17:00:02 | Terminated | | 20240823083001129gm2k2uq242m | 2024-08-23 16:30:00 | 2024-08-23 16:30:02 | Terminated | | 2024082308000127g830w1nunj66 | 2024-08-23 16:00:00 | 2024-08-23 16:00:02 | Terminated | | 20240823073000936gd6nllaizqm | 2024-08-23 15:30:00 | 2024-08-23 15:30:02 | Terminated | | 20240823070000813g1c1ksw7fgc6 | 2024-08-23 15:00:00 | 2024-08-23 15:00:02 | Terminated | | 20240823063001181glltwkzrtdk | 2024-08-23 14:30:00 | 2024-08-23 14:30:02 | Terminated | | 20240823060000776goyxv1nunj66 | 2024-08-23 14:00:00 | 2024-08-23 14:00:02 | Terminated | | 2024082305300180g5in7zbo22m | 2024-08-23 13:30:00 | 2024-08-23 13:30:02 | Terminated | | 20240823050000998g59i62v95y9 | 2024-08-23 13:00:00 | 2024-08-23 13:00:02 | Terminated | | 20240823043000692gf6vtt9g42m | 2024-08-23 12:30:00 | 2024-08-23 12:30:02 | Terminated | | 20240823040000747gp4drnmcw92 | 2024-08-23 12:00:00 | 2024-08-23 12:00:02 | Terminated | | 20240823033000643gmwn937izqm | 2024-08-23 11:30:00 | 2024-08-23 11:30:02 | Terminated | | 20240823030000777g4whu60oe72 | 2024-08-23 11:00:00 | 2024-08-23 11:00:02 | Terminated | | 20240823023000838gt2rsw3s9un5 | 2024-08-23 10:30:00 | 2024-08-23 10:30:02 | Terminated | | 20240823020000754gdgj937izqm | 2024-08-23 10:00:00 | 2024-08-23 10:00:02 | Terminated | | 20240823013000869gw0vv77vx7 | 2024-08-23 09:30:00 | 2024-08-23 09:30:02 | Terminated | | 20240823010000895gcwv2e0stdk | 2024-08-23 09:00:00 | 2024-08-23 09:00:02 | Terminated | | 20240823003000911gujpaps5tz | 2024-08-23 08:30:00 | 2024-08-23 08:30:02 | Terminated | | 20240823000000466gc6vlbut7f2 | 2024-08-23 08:00:00 | 2024-08-23 08:00:02 | Terminated | | 20240822233000688go492o8o22m | 2024-08-23 07:30:00 | 2024-08-23 07:30:02 | Terminated | | 20240822230000524gw39jtv95y9 | 2024-08-23 07:00:00 | 2024-08-23 07:00:02 | Terminated | | 20240822223000394g0g82o8o22m | 2024-08-23 06:30:00 | 2024-08-23 06:30:01 | Terminated | | 20240822220000691geeksypunj66 | 2024-08-23 06:00:00 | 2024-08-23 06:00:02 | Terminated | | 20240822213000736gil72o8o22m | 2024-08-23 05:30:00 | 2024-08-23 05:30:02 | Terminated | | 20240822210000712gcmlbuu242m | 2024-08-23 05:00:00 | 2024-08-23 05:00:03 | Terminated | | 20240822203000397glakbuu242m | 2024-08-23 04:30:00 | 2024-08-23 04:30:01 | Terminated | | 20240822200000531ghxwgupr9un5 | 2024-08-23 04:00:00 | 2024-08-23 04:00:02 | Terminated | | 20240822193000506gydgvlca68o | 2024-08-23 03:30:00 | 2024-08-23 03:30:01 | Terminated | | 20240822190000545g1moq4s7fgc6 | 2024-08-23 03:00:00 | 2024-08-23 03:00:02 | Terminated | | 20240822183000199g4gsqclunj66 | 2024-08-23 02:30:00 | 2024-08-23 02:30:01 | Terminated | | 20240822180000405goxm8zsr9un5 | 2024-08-23 02:00:00 | 2024-08-23 02:00:01 | Terminated | +---------------------------------------------------------------------------------------------------+
函數白名單
創建周期調度任務(Periodic Task)時,支持配置一個BOOLEAN表達式。目前,對支持的條件語句進行了相應的約束,僅以下函數支持被使用。以下函數詳情,請參見內建函數(字母排序)。
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