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 秒以上の間隔の場合は、単位として分を使用してください。 |
| いいえ | スケジュールされたタスクが SQL 文を実行するときに指定するパラメーター。一般的なパラメーターは
|
| いいえ | 定期タスクのコメント。コメントは 1,024 バイト以下の有効な文字列である必要があります。そうでない場合、エラーが返されます。 |
WHEN | いいえ | ブール式を指定します。後続の SQL 文は、この式が TRUE を返した場合にのみトリガーされます。このパラメーターを設定しない場合、デフォルト値は TRUE です。条件付きステートメントでは、特定の関数のみがサポートされます。 説明
|
| はい | 実行する 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 を返す場合にのみ実行されます。
宛先テーブルとして Delta テーブルを作成します。
CREATE TABLE acid2_table_dest ( pk BIGINT NOT NULL PRIMARY KEY, val BIGINT ) tblproperties ("transactional"="true");ソーステーブルとして 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';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 テーブルにデータを挿入し、スケジュールが完了するのを待ってから、宛先テーブルのデータを表示します。
-- ソースの 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 | はい | 定期的なスケジュールタスクのトリガー条件を指定する |
その他のパラメーターの詳細については、「パラメーター」をご参照ください。
例
例 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 | いいえ | 表示するレコードの数。たとえば、
|
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