ジョブを作成
詳細
Doris Jobは、設定されたプランに従って実行されるタスクです。特定の時刻または指定された時間間隔で事前定義された操作をトリガーするために使用され、いくつかのタスクを自動的に実行するのに役立ちます。機能的には、オペレーティングシステムのスケジュールされたタスク(LinuxのcronやWindowsのスケジュールされたタスクなど)に似ています。
ジョブには2つのタイプがあります:ONE_TIMEとRECURRING。その中で、ONE_TIMEタイプのジョブは指定された時点でトリガーされます。これは主に一回限りのタスクに使用される一方、RECURRINGタイプのジョブは指定された時間間隔内で周期的にトリガーされます。この方法は主に定期的なタスクに使用されます。
RECURRINGタイプのジョブは開始時刻と終了時刻、すなわちSTARTS/ENDSを指定できます。開始時刻が指定されていない場合、デフォルトの最初の実行時刻は現在時刻+1つのスケジューリングサイクルです。終了時刻が指定されている場合、タスクの実行が完了します。終了時刻に達した(または超過した、または次の実行サイクルが終了時刻を超える)場合、FINISHEDステータスに更新され、この時点でタスクは生成されなくなります。
ジョブには4つのステータスがあります(RUNNING、STOPPED、PAUSED、FINISHED)。
初期ステータスはRUNNINGです。RUNNINGステータスのジョブは、確立されたスケジューリングサイクルに従って実行用のTASKを生成します。ジョブが完了し終了時刻に達すると、ステータスはFINISHEDに変わります。
PAUSEDステータスのジョブは、RESUME操作を通じて再開でき、RUNNINGステータスに変更されます。
STOPPEDステータスのジョブは、ユーザーによってアクティブにトリガーされ、実行中のジョブがキャンセルされ、ジョブが削除されます。
FINISHEDステータスのジョブは、システム内に24時間保持され、24時間後に削除されます。
JOBはジョブ情報のみを記述します。実行はTASKを生成します。TASKステータスはPENDING、RUNNING、SUCCEESS、FAILED、CANCELEDに分かれています。
PENDINGはトリガー時刻が到着したがリソースの実行を待機していることを意味します。リソースが割り当てられた後、ステータスはRUNNINGに変わります。実行の成功/失敗によりSUCCESS/FAILEDに変わります。
CANCELEDはキャンセルステータスを意味します。TASKは最終ステータス、すなわちSUCCESS/FAILEDを保持します。他のステータスは操作中に確認できますが、再起動されると表示されません。
Syntax
CREATE
JOB
<job_name>
ON SCHEDULE <schedule>
[ COMMENT <string> ]
DO <sql_body>
ここで:
schedule:
{ AT <at_timestamp> | EVERY <interval> [STARTS <start_timestamp> ] [ENDS <end_timestamp> ] }
ここで:
interval:
quantity { WEEK | DAY | HOUR | MINUTE }
必要なパラメータ
1. <job_name>
ジョブ名。dbの一意のイベントを識別します。ジョブ名はグローバルに一意である必要があります。同じ名前のジョブが既に存在する場合、エラーが報告されます。システムの内部使用のためにinner_プレフィックスを予約しているため、ユーザーはinner_で始まる名前を作成できません。
2. <schedule>
ON SCHEDULE句は、ジョブのタイプ、トリガー時刻、頻度を指定します。一回限りのジョブまたは定期的なジョブを指定できます。
3. <sql_body>
DO句は、ジョブがトリガーされたときに実行される操作、すなわちSQL文を指定します。
オプションパラメータ
1. AT <at_timestamp>
フォーマット: 'YYYY-MM-DD HH:MM:SS'。一回限りのイベントに使用され、指定された日時タイムスタンプでイベントが一度だけ実行されることを指定します。実行が完了すると、ジョブステータスはFINISHEDに変更されます。
2. EVERY <interval>
定期的に繰り返される操作を示します。ジョブの実行頻度を指定し、キーワードの後に時間間隔を指定する必要があります。これは日、時間、分、秒、または週にできます。
3. STARTS <start_timestamp>
フォーマット: 'YYYY-MM-DD HH:MM:SS'。ジョブの開始時刻を指定するために使用されます。指定されない場合、現在時刻後の次の時点から実行されます。開始時刻は現在時刻より大きくなければなりません。
4. ENDS <end_timestamp>
フォーマット: 'YYYY-MM-DD HH:MM:SS'。ジョブの終了時刻を指定するために使用されます。指定されない場合、永続的な実行を意味します。日付は現在時刻より大きくなければなりません。開始時刻が指定されている場合、すなわちSTARTSが指定されている場合、終了時刻は開始時刻より大きくなければなりません。
アクセス制御要件
このSQLコマンドを実行するユーザーは、少なくとも以下の権限を持っている必要があります:
| Privilege | Object | Notes |
|---|---|---|
| ADMIN_PRIV | Database | 現在この操作を実行するにはADMIN権限のみサポートされています |
使用上の注意
-
TASKは最新の100件のレコードのみを保持します。
-
現在INSERT internal table操作のみをサポートしており、将来的にはより多くの操作をサポートする予定です。
-
次のスケジュールされたタスク時刻が期限切れになったとき、すなわちタスクを実行するためにスケジュールする必要があるとき、現在のJOBにまだ実行中の履歴タスクがある場合、現在のタスクスケジューリングはスキップされます。したがって、適切な実行間隔を制御することが非常に重要です。
例
-
my_jobという名前のジョブを作成し、1分ごとに実行されます。実行される操作は、db2.tbl2のデータをdb1.tbl1にインポートすることです。
CREATE JOB my_job ON SCHEDULE EVERY 1 MINUTE DO INSERT INTO db1.tbl1 SELECT * FROM db2.tbl2; -
2020-01-01 00:00:00に一度だけ実行され、db2.tbl2のデータをdb1.tbl1にインポートするワンタイムジョブを作成する。
CREATE JOB my_job ON SCHEDULE AT '2020-01-01 00:00:00' DO INSERT INTO db1.tbl1 SELECT * FROM db2.tbl2; -
2020-01-01 00:00:00から実行を開始し、1日に1回実行される定期Jobを作成します。実行される操作は、db2.tbl2のデータをdb1.tbl1にインポートすることです。
CREATE JOB my_job ON SCHEDULE EVERY 1 DAY STARTS '2020-01-01 00:00:00' DO INSERT INTO db1.tbl1 SELECT * FROM db2.tbl2 WHERE create_time >= days_add(now(),-1); -
2020-01-01 00:00:00に開始し、1日に1回実行される定期ジョブを作成します。操作内容はdb2.tbl2のデータをdb1.tbl1にインポートすることです。ジョブは2020-01-01 00:10:00に終了します。
CREATE JOB my_job ON SCHEDULE EVERY 1 DAY STARTS '2020-01-01 00:00:00' ENDS '2020-01-01 00:10:00' DO INSERT INTO db1.tbl1 SELECT * FROM db2.tbl2 create_time >= days_add(now(),-1);
ベストプラクティス
- jobを適切に管理し、大量のjobが同時にトリガーされることを避けてください。これによりタスクが蓄積され、システムの正常な動作に影響します。
- タスクの実行間隔は適切な範囲内で設定し、少なくともタスクの実行時間より長くする必要があります。
関連ドキュメント
CONFIG
fe.conf
-
job_dispatch_timer_job_thread_num:時間指定タスクの配布に使用するスレッド数です。デフォルト値は2です。定期実行タスクが大量にある場合は、このパラメータを増やすことができます。
-
job_dispatch_timer_job_queue_size:タスクが蓄積された際に時間指定タスクを格納するキューのサイズです。デフォルト値は1024です。大量のタスクが同時にトリガーされる場合は、このパラメータを増やすことができます。そうでなければ、キューが満杯になり、送信されたタスクがブロック状態に入り、後続のタスクの送信が失敗します。
-
finished_job_cleanup_threshold_time_hour:完了したタスクをクリーンアップする時間しきい値です。単位は時間で、デフォルト値は24時間です。
-
job_insert_task_consumer_thread_num = 10:Insertタスクの実行に使用するスレッド数です。値は0より大きい必要があり、そうでなければデフォルト値は5です。