すべてのプロダクト
Search
ドキュメントセンター

MaxCompute:定期タスク (招待プレビュー)

最終更新日:Nov 09, 2025

MaxCompute の定期タスク機能を使用すると、SQL 文を使用してスケジューリングとコンピューティングロジックをカスタマイズできます。これにより、スケジュールされたタスクを効率的かつ柔軟に管理できます。この機能は、より短いスケジューリングサイクル、高効率の実行、および低コストのスケジュール管理を提供します。

機能

MaxCompute の定期タスクを使用すると、タスクスケジューリングポリシーを柔軟にカスタマイズし、SQL コンピューティングロジックを実行できます。これにより、データパイプラインが自動的に構築され、抽出・変換・書き出し (ETL) ワークフローが簡素化されます。また、タスクをテーブルデータの変更やストリーム読み取りと組み合わせて、最近変更されたデータを処理する継続的な ETL ワークフローを作成することもできます。この機能には、次の属性があります:

  • SQL サポート: すべてのスケジュールされたタスクを単純な SQL 文で管理します。

  • 完全なライフサイクル管理: タスクの作成、変更、削除、表示が可能です。タスクリストとタスク実行インスタンスリストも表示できます。

  • 秒レベルのスケジューリング: 最小 10 秒の間隔での時間指定スケジューリングをサポートします。

  • 組み込みスケジューリングサービス: MaxCompute に組み込まれた、より効率的でコスト効果の高いサービスです。

  • 条件付き実行: インスタンスの起動条件として WHEN 式を設定し、複雑な条件付きロジックを実装します。

  • シームレスな統合: プラットフォーム内のオブジェクトと連携します。たとえば、Delta テーブルの変更データキャプチャ (CDC) やオブジェクトテーブルなど、定期的なリフレッシュが必要なオブジェクトに対して、効率的な組み込みスケジューリングサービスを提供します。

  • 自動増分データ: デフォルトでは、増分 CDC データがバックグラウンドで自動的に生成されます。

この機能は現在、招待プレビュー中です。詳細については、「手順」をご参照ください。

注意

定期タスクを作成または削除する前に、セッションレベルで SET odps.sql.periodic.task.enabled=true; パラメーターを設定する必要があります。これにより、定期タスク機能が有効になります。このパラメーターを設定しない場合、定期タスクを作成または削除することはできません。

定期タスクの作成

構文

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 秒から 3,540 秒の範囲である必要があります。

説明

秒の値は 10 から 59 の間でなければなりません。60 秒以上の間隔の場合は、単位として分を使用してください。

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

いいえ

スケジュールされたタスクが SQL 文を実行するときに指定するパラメーター。一般的なパラメーターは schedule_strategy で、スケジュールされたタスクの再試行回数を指定します。スケジュールされたタスク実行のための SQL 文の例は次のとおりです:

  • taskproperties('odps.stage.reducer.num'='100'): 自動的に開始されたタスクの Reduce Task インスタンスの数は 100 です。

  • taskproperties('odps.sql.reducer.memory'='2048'): 自動的に開始されたタスクの各 Reduce Task インスタンスのメモリサイズは 2048 MB です。

COMMENT task_comment

いいえ

定期タスクのコメント。コメントは 1,024 バイト以下の有効な文字列である必要があります。そうでない場合、エラーが返されます。

WHEN

いいえ

ブール式を指定します。後続の SQL 文は、この式が TRUE を返した場合にのみトリガーされます。このパラメーターを設定しない場合、デフォルト値は TRUE です。条件付きステートメントでは、特定の関数のみがサポートされます。

説明
  • ブール式では、一般的なスカラー関数がサポートされています。ウィンドウ関数、集計関数、ネストされたサブクエリはサポートされていません。

  • `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 タスク。コードエディタで実行されるステートメントはサポートされていません。一般的なデータ操作言語 (DML) とデータクエリ言語 (DQL) の構文がサポートされています。データ定義言語 (DDL) はサポートされていません。

この例では、periodic_task1 という名前のスケジュールされたタスクを作成します。タスクは 5 分ごとに実行するようにスケジュールされ、失敗した場合は最大 3 回再試行します。SQL 文 INSERT INTO acid2_table_dest SELECT pk, val FROM acid_stream は、条件式 stream_has_data('delta_table_stream') が TRUE を返す場合にのみ実行されます。

  1. 宛先テーブルとして Delta テーブルを作成します。

    CREATE TABLE acid2_table_dest (
      pk BIGINT NOT NULL PRIMARY KEY, 
      val BIGINT
    ) tblproperties ("transactional"="true");
  2. ソーステーブルとして Delta テーブルを作成し、それに関連付けられたストリームを作成します。

    -- ソーステーブルとして Delta テーブルを作成します。
    CREATE TABLE delta_table_src (
      pk bigint NOT NULL PRIMARY KEY,
      val bigint
    ) tblproperties ("transactional"="true");
    
    -- Delta テーブルに関連付けられたストリームを作成します。
    CREATE STREAM delta_table_stream 
    ON TABLE delta_table_src version as of 1 
    strmproperties('read_mode'='append') 
    comment 'stream demo';
  3. periodic_task1 という名前の定期タスクを作成します。

    --タスクの自動増分更新を有効にします。
    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 テーブルにデータを挿入し、スケジュールが完了するのを待ってから、宛先テーブルのデータを表示します。

    -- ソースの Delta テーブルにデータを挿入します。
    INSERT INTO delta_table_src VALUES (1, 1), (2, 2);
    
    -- スケジュールが完了するのを待ってから、宛先テーブルのデータを表示します。
    SELECT * FROM acid2_table_dest;

    次の結果は、データが `acid2_table_dest` テーブルに正常に書き込まれたことを示しています。

    --2 つのレコードが返されます。
    +------------+------------+
    | pk         | val        |
    +------------+------------+
    | 1          | 1          |
    | 2          | 2          |
    +------------+------------+

定期タスクの変更

構文

  • 定期タスクのスケジュール (実行間隔)、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];
  • 定期タスクを再開または一時停止できます。

    説明

    定期タスクは作成後に自動的に開始されます。問題または手動の `suspend` 操作によりタスクが一時停止された場合、`resume` 操作を使用してタスクを再開できます。タスクが再開されると、そのステータスは `ACTIVE` に変わります。DESC コマンドを実行してステータスを確認できます。

    ALTER TASK [IF EXISTS] task_name resume | suspend;
  • 定期的なスケジュールされたタスクのトリガー条件の 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;

定期タスクに関する情報の表示

構文

  • 定期タスクに関する情報を表示できます。

    DESC task <task_name>;
  • 定期タスクに関する情報と拡張情報を表示できます。

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

定期タスクの削除

構文

DROP TASK [IF EXISTS] <task_name>; 

パラメーター

パラメーター

必須

説明

IF EXISTS

いいえ

定期タスクを削除する場合:

  • このオプションを指定すると、指定された定期タスクが存在しない場合、操作はスキップされ、成功メッセージが返されます。指定されたタスクが存在する場合は削除されます。

  • このオプションを指定しない場合、指定された定期タスクが存在しないとエラーが返されます。

task_name

はい

削除する定期タスクの名前。

`periodic_task1` タスクを削除するには、次のコマンドを実行します:

DROP TASK periodic_task1;

すべての定期タスクのリストの表示

次の SQL 文を使用して、現在の MaxCompute プロジェクト内のすべての定期タスクを表示できます。

構文

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

定期タスクの自動スケジュールされたインスタンスの履歴の表示

定期タスクの自動スケジュールされたインスタンスの InstanceId、CreateTime、EndTime、および Status を表示できます。

説明

自動スケジュールされたインスタンスの詳細なログを表示するには、WAIT <InstanceId>; コマンドを実行します。たとえば、WAIT 2024082309000177gq71ut9****; を実行して MaxCompute Logview の URL を取得します。その後、Logview の URL をブラウザにコピーして詳細なログを表示できます。

構文

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` タスクの自動スケジュールされたインスタンスの履歴を表示します。開始位置を 6 番目のレコードに設定して、最初の 5 件のレコードをスキップします。

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

関数ホワイトリスト

定期タスクを作成するときに、ブール式を設定できます。条件付きステートメントは、次の関数のみをサポートします。これらの関数の詳細については、「組み込み関数 (アルファベット順)」をご参照ください。

  • 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