全部產品
Search
文件中心

MaxCompute:周期調度任務(邀測)

更新時間:Aug 27, 2025

MaxCompute周期調度任務(Periodic Task)功能,支援通過SQL語句自訂調度和計算邏輯,從而高效靈活地管理定時調度任務,實現更短的周期、高效的運行及低成本的調度管理。

功能介紹

MaxCompute周期調度任務(Periodic Task)可以靈活自訂任務調度策略,執行對應的SQL計算邏輯,自動構建資料管道,簡化ETL鏈路。此外,您還可以將任務與表資料變更和流讀情境相結合,從而實現連續的ETL工作流程,以處理最近更改的資料。該功能具有以下特性:

  • 支援SQL語言:所有針對定時任務的管理操作均可通過簡潔的SQL語言實現。

  • 支援全生命週期管理:包括建立、修改、刪除、查看以及查看工作清單和任務執行執行個體列表。

  • 秒層級周期調度任務:支援最短10秒的定時調度。

  • MaxCompute內建調度服務,更高效成本更低。

  • 支援配置執行個體啟動條件的When運算式,可實現較為複雜的條件判斷。

  • 支援與平台內對象的無縫結合。例如:支援Delta Table CDC、Object Table等需要定期重新整理的對象,提供高效的內建調度服務。

  • 預設支援增量CDC資料後台自動產生。

該功能目前處於邀測中,邀測功能使用方法請參見使用說明

注意事項

建立或刪除周期調度任務前,您需要在Session層級設定SET odps.sql.periodic.task.enabled=true;參數,開啟Task自動執行累加式更新開關。否則無法建立或刪除周期調度任務。

建立周期調度任務(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秒時,需要將單位設定為分鐘。

TASKPROPERTIES("schedule_strategy"="3","odps.namespace.schema"="true" ....]

定時任務調度執行SQL時需要指定的參數,均可通過此處配置。常見取值為schedule_strategy,即指定定時調度任務重試次數。定時任務調度執行SQL樣本如下:

  • taskproperties('odps.stage.reducer.num'='100'):自動啟動的任務Reduce Task的Instance數量為100個。

  • taskproperties('odps.sql.reducer.memory'='2048'):自動啟動的任務Reduce Task的每個Instance的Memory大小為2048 MB。

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('delta_table_stream')返回結果為TRUE時,執行SQL任務INSERT INTO acid2_table_dest SELECT pk, val FROM acid_stream

  1. 建立一個Delta Table增量表。

    CREATE TABLE acid2_table_dest (
      pk BIGINT NOT NULL PRIMARY KEY, 
      val BIGINT
    ) tblproperties ("transactional"="true");
  2. 建立Delta Table源表,再建立一個Stream關聯Delta Table表。

    -- 建立Delta Table源表
    CREATE TABLE delta_table_src (
      pk bigint NOT NULL PRIMARY KEY,
      val bigint
    ) tblproperties ("transactional"="true");
    
    -- 建立一個Stream關聯Delta Table表
    CREATE STREAM delta_table_stream 
    ON TABLE delta_table_src version as of 1 
    strmproperties('read_mode'='append') 
    comment 'stream demo';
  3. 建立一個定時調度任務periodic_task1。

    --開啟Task自動執行累加式更新
    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;
    說明

    其中stream_has_data('delta_table_stream') 的條件判斷,等同於在MaxCompute中執行SELECT stream_has_data('delta_table_stream');命令。

  4. 插入資料至Delta Table源表,並等待調度結束,查看目標表資料。

    -- 插入資料至Delta Table源表
    INSERT INTO delta_table_src VALUES (1, 1), (2, 2);
    
    -- 等待調度結束, 查看目標表資料
    SELECT * FROM acid2_table_dest;

    返回結果如下:資料已成功寫入acid2_table_dest表。

    --查到兩條結果
    +------------+------------+
    | pk         | val        |
    +------------+------------+
    | 1          | 1          |
    | 2          | 2          |
    +------------+------------+

修改定時調度任務(Periodic Task)

文法

  • 修改定時調度任務的調度時間(執行循環時間長度)、SQL參數(例如任務重試次數等)及注釋內容

    ALTER TASK [IF EXISTS] <task_name>
        SET SCHEDULE = "<num> [minute|minutes] | [second|seconds]"
        [TASKPROPERTIES("schedule_strategy"="3",--指定定時調度任務重試次數
                   "odps.namespace.schema"="true" ....];
        [COMMENT task_comment];
  • 重啟(resume) 或暫停(suspend)周期調度任務

    說明

    建立定時調度任務後會自動啟動,若定時調度任務出現問題或手動執行了暫停(suspend)操作,導致任務暫停,您可以通過重啟(resume)操作,重新啟動定時調度任務。重啟後通過DESC查看定時調度任務的狀態是ACTIVE。

    ALTER TASK [IF EXISTS] task_name resume | suspend;
  • 修改周期調度任務的觸發條件判斷WHEN運算式,建立Task後可通過該文法修改WHEN運算式

    ALTER TASK [IF EXISTS] task_name MODIFY WHEN <boolean_expr>;

參數說明

配置項

是否必選

描述

IF EXISTS

修改定時調度任務時:

  • 指定該選項:若指定的定時調度任務不存在,將會跳過執行並返回成功;若指定的定時調度任務存在,將對指定的任務進行修改。

  • 不指定該選項:若指定的定時調度任務不存在,則建立任務報錯。

boolean_expr

周期調度任務的觸發條件判斷WHEN運算式。

其他更多相關參數說明,請參見參數說明

樣本

  • 樣本1:重啟周期調度任務

    ALTER TASK periodic_task1 resume; 
  • 樣本2:暫停周期調度任務

    ALTER TASK periodic_task1 suspend; 
  • 樣本3:修改調度時間周期為6分鐘

    ALTER TASK IF EXISTS periodic_task1 SET schedule = '6 minute';
  • 樣本4:添加註釋內容

    ALTER TASK IF EXISTS periodic_task1 SET comment 'comment2';
  • 樣本5:指定周期調度任務重試次數為5次

    ALTER TASK IF EXISTS periodic_task1 SET taskproperties('schedule_strategy'='5');
  • 樣本6:修改任務觸發條件判斷WHEN運算式

    ALTER TASK IF EXISTS periodic_task1 MODIFY WHEN 1=1;

查看定時調度任務(Periodic Task)資訊

文法

  • 查看定時調度任務資訊

    DESC task <task_name>;
  • 查看定時調度任務資訊以及Extended資訊

    DESC extended task <task_name>;

參數說明

task_name:周期調度任務名稱。

樣本

查看定時調度任務periodic_task1資訊。

DESC task periodic_task1;

返回結果樣本如下:

+------------------------------------------------------------------------------------+
| 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:                                                                           |
+------------------------------------------------------------------------------------+

刪除定時調度任務(Periodic Task)

文法

DROP TASK [IF EXISTS] <task_name>; 

參數說明

配置項

是否必填

描述

IF EXISTS

刪除定時調度任務時:

  • 指定該選項:若指定的定時調度任務不存在,將會跳過執行並返回成功;若指定的定時調度任務存在,將刪除指定任務。

  • 不指定該選項:若指定的定時調度任務不存在,則刪除任務報錯。

task_name

需要刪除的定時調度任務(Periodic Task)名稱。

樣本

刪除periodic_task1任務,命令如下:

DROP TASK periodic_task1;

查看所有定時調度任務(Periodic Task)列表

您可以通過以下SQL,查看當前MaxCompute專案下的所有定時調度(Periodic Task)任務。

文法

SHOW TASKS; 

樣本

查看已建立的定時調度任務。

SHOW TASKS; 

返回結果樣本如下:

+--------------------------------------------------------------------------------------------------------------------------------+
| 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       |
+--------------------------------------------------------------------------------------------------------------------------------+

查看定時調度任務(Periodic Task)自動調度執行個體的歷史列表

您可查看定時調度任務(Periodic Task)自動調度執行個體的InstanceId、CreateTime、EndTime以及Status資訊。

說明

若需要查看某個自動調度執行個體的詳細日誌,可以執行WAIT <InstanceId>;命令。例如:執行WAIT 2024082309000177gq71ut9****;命令可擷取到MaxCompute Logview地址。您可以將Logview地址複製到瀏覽器中,查看其詳細日誌。

文法

SHOW HISTORY FOR TASK <task_name> [[LIMIT <limit_value>] OFFSET <offset_value>]; 

參數說明

參數

是否必填

說明

task_name

周期調度任務名稱。

limit_value

用於顯示的記錄條數,例如LIMIT 50表示只顯示50條記錄。

limit_value取值必須大於0,否則報錯。假如不指定,表示顯示盡量多條記錄。

offset_value

用於指定起始位置,代表跳過指定數量的記錄。當取值為0時,即表示起始位置為最新一條任務記錄。

樣本

  • 樣本1:查看定時調度任務periodic_task1的自動調度歷史列表資訊。命令如下:

    SHOW HISTORY FOR TASK periodic_task1;

    返回結果如下:

    +---------------------------------------------------------------------------------------------------+
    | 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   |
    +---------------------------------------------------------------------------------------------------+
  • 樣本2:查看定時調度任務periodic_task1的自動調度歷史列表資訊,指定起始位置為最新一條的記錄,顯示記錄條數為6。

    SHOW HISTORY FOR TASK periodic_task1 LIMIT 6 OFFSET 0;

    返回結果如下:

    +---------------------------------------------------------------------------------------------------+
    | 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   |
    +---------------------------------------------------------------------------------------------------+
  • 樣本3:查看定時調度任務periodic_task1的自動調度歷史列表資訊,跳過5條記錄,即指定起始位置為第6條記錄。

    SHOW HISTORY FOR TASK periodic_task1 OFFSET 5;

    返回結果如下:

    +---------------------------------------------------------------------------------------------------+
    | 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   |
    +---------------------------------------------------------------------------------------------------+

函數白名單

建立周期調度任務(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