MaxCompute の定期タスク機能では、SQL を使用してスケジューリングおよび計算ロジックをカスタマイズできます。これにより、タスクの管理をより効率的かつ柔軟に、またコスト効率よく行えるようになり、スケジューリングサイクルも短縮されます。
本機能は招待プレビュー段階です。招待プレビュー機能の利用方法については、「手順」をご参照ください。
特徴
MaxCompute の定期タスクでは、タスクのスケジューリングポリシーを柔軟にカスタマイズし、対応する SQL 計算ロジックを実行してデータパイプラインを自動構築でき、抽出・変換・書き出し(ETL)プロセスを簡素化できます。さらに、テーブルのデータ変更やストリーム読み取りとタスクを連携させることで、最新のデータ変更を継続的に処理する ETL ワークフローを作成することも可能です。本機能には以下の属性があります:
SQL 対応:定期タスクのすべての管理操作は、シンプルな SQL 文で実行できます。
フルライフサイクル管理対応:タスクの作成、変更、削除、表示、およびタスク一覧・タスク実行インスタンス一覧の表示が可能です。
第2レベルの定期実行スケジュール: 時間指定スケジューリングをサポートし、最小間隔は 10 秒です。
効率性の向上とコスト削減のため、組み込みの MaxCompute スケジューリングサービスを提供します。
インスタンス起動条件を設定する WHEN 式をサポートしており、複雑な条件判断が可能です。
Delta Table の変更データキャプチャ(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]" | はい | 実行間隔です。サポートされる単位は分(minute/minutes)および秒(second/seconds)です。値の範囲は 10 秒~3540 秒です。 説明 秒単位の値は 10~59 の範囲である必要があります。60 秒を超える間隔の場合は、単位として分(minute/minutes)を使用してください。 |
| いいえ | スケジュールタスクが SQL 文を実行する際に指定するパラメーターです。ここで設定できます。
|
| いいえ | 定期タスクのコメントです。コメントは有効な文字列で、最大 1024 バイトまでとする必要があります。それ以外の場合、エラーが報告されます。 |
WHEN | いいえ | ブール値式を指定します。後続の SQL 文は、この式が TRUE を返す場合にのみトリガーされます。設定しない場合、デフォルト値は TRUE です。サポートされる条件付きステートメントには制約が適用され、一部の関数のみが使用可能です。 説明
|
| はい | 実行する SQL タスクです。コードエディタ内で実行される SQL 文はサポートされていません。一般的なデータ操作言語(DML)およびデータ照会言語(DQL)の構文はサポートされていますが、データ定義言語(DDL)はサポートされていません。 |
例
5 分ごとに実行され、スケジューリング失敗時に最大 3 回再試行するスケジューリングタスク periodic_task1 を作成できます。SQL タスク INSERT INTO acid2_table_dest SELECT pk, val FROM acid_stream は、条件 stream_has_data('delta_table_stream') が TRUE を返す場合にのみ実行されます。
増分 Delta Table を作成します。
CREATE TABLE acid2_table_dest ( pk BIGINT NOT NULL PRIMARY KEY, val BIGINT ) tblproperties ("transactional"="true");ソース Delta Table を作成し、その後、その Delta Table に関連付けられたストリームを作成します。
-- ソース Delta Table を作成します。 CREATE TABLE delta_table_src ( pk bigint NOT NULL PRIMARY KEY, val bigint ) tblproperties ("transactional"="true"); -- Delta Table に関連付けられたストリームを作成します。 CREATE STREAM delta_table_stream ON TABLE delta_table_src version as of 1 strmproperties('read_mode'='append') comment 'stream demo';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');コマンドを実行することと等価です。ソース Delta Table にデータを挿入し、スケジューリングの完了を待ってから、宛先テーブルのデータを確認します。
-- ソース Delta Table にデータを挿入します。 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];定期タスクを再開または一時停止します。
説明定期タスクは作成後に自動的に開始されます。タスクに問題が発生した場合や一時停止した場合、タスクを再開できます。再開後、タスクのステータスは 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 | はい | 定期タスクのトリガー条件を定義する |
その他のパラメーターについては、「パラメーター」をご参照ください。
例
例 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;
定期タスクの情報の表示
方法 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: |
+------------------------------------------------------------------------------------+方法 2:コンソールを使用
RAM ユーザーが定期タスクの情報を表示するには、AliyunMaxComputeReadOnlyAccess システムポリシーを RAM ユーザーに付与する必要があります。詳細については、「RAM 権限」をご参照ください。
MaxCompute コンソール にログインし、左上隅でリージョンを選択します。
左側のナビゲーションウィンドウで、 を選択します。
プロジェクト管理 ページで、対象のプロジェクトを見つけ、管理 をクリックします(操作 列)。
プロジェクト設定 ページで、定期タスク タブを選択します。
プロジェクト内の定期タスク一覧を表示できます。
定期タスクの削除
構文
DROP TASK [IF EXISTS] <task_name>; パラメーター
設定項目 | 必須 | 説明 |
IF EXISTS | いいえ | 定期タスクを削除する際:
|
task_name | はい | 削除する定期タスクの名前です。 |
例
periodic_task1 タスクを削除します。コマンドは以下のとおりです:
DROP TASK periodic_task1;すべての定期タスクの一覧表示
現在の MaxCompute プロジェクトに存在するすべての定期タスクを表示するには、以下の SQL 文を使用します。
構文
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 | いいえ | 表示するレコード数です。たとえば、
|
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 | +---------------------------------------------------------------------------------------------------+
関数ホワイトリスト
定期タスクを作成する際、ブール値式を設定できます。サポートされる条件付きステートメントには制約があり、以下の関数のみが使用可能です。各関数の詳細については、「組み込み関数(アルファベット順)」をご参照ください。
DATEADD
DATEDIFF
DATEPART
DATETRUNC
DATE_FORMAT
FROM_UNIXTIME
GETDATE
ISDATE
最終日
LAST_DAY
UNIX_TIMESTAMP
平日
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