EXECUTE TASK¶
タスクに定義されたスケジュールとは関係なく、スケジュールされたタスク(スタンドアロンタスクまたはタスクの DAG (有向非巡回グラフ) のルートタスク)の非同期の単一実行を手動でトリガーします。
先行タスクが完了するにつれて、ルートタスクが正常に実行されると、ルートタスクが定義されたスケジュールで実行されたかのように、DAG内にある子タスクのカスケード実行がトリガーされます。
- こちらもご参照ください。
構文¶
EXECUTE TASK <name>
パラメーター¶
name
実行するスタンドアロンタスクまたはルートタスクの識別子。識別子にスペースまたは特殊文字が含まれる場合は、文字列全体を二重引用符で囲む必要があります。二重引用符で囲まれた識別子も大文字と小文字が区別されます。
使用上の注意¶
タスクを実行するには、タスクの OWNERSHIP または OPERATE 権限が必要です。
EXECUTE TASK コマンドがタスク実行をトリガーすると、Snowflakeは、タスクに対する OWNERSHIP 権限を持つロールが、タスクに割り当てられたウェアハウスに対する USAGE 権限、およびグローバル EXECUTE TASK 権限を持っていることを確認します。それ以外の場合は、エラーが生成されます。
OPERATE 権限を持つ別のロールが EXECUTE TASK を使用してタスクを実行する場合でも、タスクは常に元の所有者ロールの権限で実行されます。
SQLコマンドは、スタンドアロンタスクまたはDAG内のルートタスクのみを実行できます。子タスクが入力された場合、コマンドはユーザーエラーを返します。
スタンドアロンまたはルートタスクを手動で実行すると、タスクのバージョンが確立されます。スタンドアロンタスクまたはDAG全体が、このバージョンで実行を完了します。タスクバージョンの詳細については、 実行のバージョニング をご参照ください。
一時停止されたルートタスクは、タスクを再開 することなく 実行されます。この SQL コマンドを実行する前に、ルートタスクを明示的に再開する必要はありません。ただし、EXECUTE TASKは、DAG内の子タスクを自動的に再開 しません。このコマンドは、一時停止されている子タスクをスキップします。
DAGでルートタスクに関連付けられたすべての依存タスクを再帰的に再開するには、各タスクを個別に有効にするのではなく、 SYSTEM$TASK_DEPENDENTS_ENABLE 関数をクエリします(ALTER TASK ... RESUMEを使用)。
新規または変更されたDAGsをテストする際のベストプラクティスとして、ルートタスクを目的の運用スケジュールで実行するように設定しますが、 一時停止状態のままにします。DAGのテストに成功した後、ルートタスクを再開します。テストのために、DAG内で一時停止された子タスクを再開する必要があることに注意してください。そうしないと、DAGの実行中にスキップされます。
ルートタスクが現在実行中の場合(つまり、 TASK_HISTORY 出力で EXECUTING 状態)、 EXECUTE TASK コマンドは、現在の実行が完了した直後にタスクの別の実行を開始するようにスケジュールします。
ルートタスクが現在スケジュールされている場合(つまり、 TASK_HISTORY 出力の SCHEDULED 状態)、スケジュールされた実行は、現在のタイムスタンプをスケジュールされた時刻として、通常どおりリクエストされた実行に置き換えられます。ただし、スケジュールされた時間が経過した場合(ただし、タスクがまだ EXECUTING 状態に移行していない場合)、スケジュールされた実行は通常どおりに実行されます。つまり、スケジュールされた実行は、リクエストされた実行に置き換えられ ません。
ルートタスクに設定されたALLOW_OVERLAPPING_EXECUTIONパラメーターは、DAGの重複するインスタンスを許可するかどうかを決定します。リクエストされたタスク実行の動作は、パラメーター値によって異なります。
ALLOW_OVERLAPPING_EXECUTION = FALSE (デフォルト値)
DAGのインスタンスが現在実行されていない場合、EXECUTE TASKコマンドは、DAGの別の実行をすぐに開始するようにスケジュールします。
DAG内のルートタスクまたは子タスクが現在実行中の場合(つまり、 TASK_HISTORY 出力でEXECUTING状態)、EXECUTE TASKコマンドは、 DAG内にある最終タスク の現在の実行が完了次第ただちに、DAGの別の実行が開始するようにスケジュールします。つまり、タスクDAGの現在のインスタンスは、リクエストされたタスクの開始前に実行を完了する必要があります。
ルートタスクが現在スケジュールされている場合(つまり、 TASK_HISTORY 出力の SCHEDULED 状態)、スケジュールされた実行は、現在のタイムスタンプをスケジュールされた時刻として、リクエストされた実行に置き換えられます。ただし、スケジュールされた時間が経過した場合(しかし、タスクはまだ EXECUTING 状態に移行していない場合)、スケジュールされた実行が発生します。つまり、スケジュールされた実行は、リクエストされた実行に置き換えられ ません。
ALLOW_OVERLAPPING_EXECUTION = TRUE
DAGのインスタンスが現在実行されていない場合、またはDAG内の子タスクのみがインスタンスで実行されている場合、EXECUTE TASKコマンドは、DAGの別の実行をすぐに開始するようにスケジュールします。
ルートタスクが現在DAGのインスタンスで実行されている場合、EXECUTE TASK コマンドは、 ルートタスク の現在の実行が完了した直後に開始するように、DAGの別の実行をスケジュールします。
ルートタスクが、DAGのインスタンス内で現在スケジュールされている場合(つまり、 TASK_HISTORY 出力の SCHEDULED状態)、スケジュールされた実行は、現在のタイムスタンプをスケジュールされた時刻として、通常どおりリクエストされた実行に置き換えられます。ただし、スケジュールされた時間が経過した場合(しかし、タスクはまだ EXECUTING 状態に移行していない場合)、スケジュールされた実行が発生します。つまり、スケジュールされた実行は、リクエストされた実行に置き換えられ ません。
EXECUTE TASK コマンドの呼び出しは同期的に処理されますが、タスク実行は非同期操作です。
この SQL コマンドによってトリガーされるタスク実行では、コマンドの実行時に最新であった タスクバージョン が使用されます。タスクが、コマンドの実行 後 で、実行が開始される前に変更される場合、変更は、 次の スケジュールされた実行まで適用されません。
タスクの実行中にこの SQL コマンドが複数回実行された場合、最後のコマンドを除くすべてのコマンドの実行は無視されます。次の実行が開始されると、最後の実行が行われたときに最新であったタスクバージョンが使用されます。
タスクが予期しないエラーで失敗した場合、エラーに関する通知を受け取ることができます。タスクエラー通知の構成の詳細については、 タスクのエラー通知の有効化 をご参照ください。