EXECUTE TASK

タスクに定義されたスケジュールとは関係なく、タスク(スタンドアロンタスクまたは タスクグラフ にあるルートタスク)の非同期の単一実行を手動でトリガーします。

先行タスクが完了するにつれて、ルートタスクが正常に実行されると、ルートタスクが定義されたスケジュールで実行されたかのように、タスクグラフ内にある子タスクのカスケード実行がトリガーされます。

さらに、以前に失敗したタスクの再実行を手動でトリガーすることもできます。

こちらもご参照ください。

CREATE TASKDROP TASKSHOW TASKS

構文

EXECUTE TASK <name>

EXECUTE TASK <name> RETRY LAST
Copy

パラメーター

name

実行するスタンドアロンタスクまたはルートタスクの識別子。識別子にスペースまたは特殊文字が含まれる場合は、文字列全体を二重引用符で囲む必要があります。二重引用符で囲まれた識別子も大文字と小文字が区別されます。

RETRY LAST

失敗した nameタスクグラフ の最終タスクを失敗したタスクから再実行します。

タスクを再実行するには、以下の条件を満たす必要があります。

  • 最後のタスクグラフ実行は状態が FAILED か CANCELED であること。

  • タスクグラフは最後に実行されてから変更されていないこと。

  • タスクグラフは過去14日以内に実行または再試行されていること。

タスク履歴を表示するには、 TASK_HISTORY テーブル関数または Snowsightタスク履歴 をご参照ください。

注釈

RETRY LAST は、最後に失敗したタスクから実行を開始する新しいグラフ実行を作成します。

具体的には、 FAILED または CANCELED タスクの実行はすべて直ちに再実行され、関連する子タスクは、それらの先行タスクがすべて正常に実行された場合にスケジュールされます。

さらに、再試行によって生成される新しいタスクグラフ実行は、前回失敗したグラフ実行よりも1つ大きい ATTEMPT NUMBER を持ち、再試行された、つまり元のタスクグラフ実行と同じ GRAPH_RUN_GROUP_ID を共有します。

使用上の注意

  • タスクを実行するには、タスクの OWNERSHIP または OPERATE 権限が必要です。

    EXECUTE TASK コマンドがタスク実行をトリガーすると、Snowflakeは、タスクに対する OWNERSHIP 権限を持つロールが、タスクに割り当てられたウェアハウスに対する USAGE 権限、およびグローバル EXECUTE TASK 権限を持っていることを確認します。それ以外の場合は、エラーが生成されます。

    OPERATE 権限を持つ別のロールが EXECUTE TASK を使用してタスクを実行する場合でも、タスクは常に元の所有者ロールの権限で実行されます。

  • SQL コマンドは、スタンドアロンタスクまたはタスクグラフ内のルートタスクのみを実行できます。子タスクが入力された場合、コマンドはユーザーエラーを返します。

  • スタンドアロンまたはルートタスクを手動で実行すると、タスクのバージョンが確立されます。スタンドアロンタスクまたはタスクグラフ全体が、このバージョンで実行を完了します。タスクバージョンの詳細については、 タスク実行のバージョニング をご参照ください。

  • 中断されたルートタスクは、タスクを再開 することなく 実行されます。この SQL コマンドを実行する前に、ルートタスクを明示的に再開する必要はありません。ただし、 EXECUTE TASK は、タスクグラフ内の子タスクを自動的に再開 しません。このコマンドは、中断されている子タスクをスキップします。

    タスクグラフでルートタスクに関連付けられたすべての依存タスクを再帰的に再開するには、各タスクを個別に有効にするのではなく、 SYSTEM$TASK_DEPENDENTS_ENABLE 関数をクエリします(ALTER TASK ... RESUME を使用)。

    新規または変更されたタスクグラフをテストする際のベストプラクティスとしては、ルートタスクを目的の運用スケジュールで実行するように設定しますが、 中断状態のままにします。タスクグラフのテストに成功した後、ルートタスクを再開します。テストのために、タスクグラフ内で中断された子タスクを再開する必要があることに注意してください。そうしないと、タスクグラフの実行中にスキップされます。

  • タスクのインスタンスが実行されていない場合、新しい実行が直ちに開始されます。

  • 別のインスタンスがスケジュールされている場合(つまり、タスクが TASK_HISTORY 出力で SCHEDULED 状態を示している場合)、リクエストされた実行はスケジュールされた実行に置き換わります。リクエストされた実行は、現在のタイムスタンプをスケジュール時刻として、直ちに開始されます。

  • タスクまたはタスクグラフが現在キュー中または実行中である場合(すなわち、 TASK_HISTORY 出力でタスクが EXECUTING 状態を示している場合)、コマンドが実行されたときに現在であった タスクバージョン を使って現在の実行が継続されます。その後、タスクタイプに応じた時間に、新しい実行がスケジュールされます。

    • スタンドアロンタスクの場合、現在の実行が完了した後、新しい実行がスケジュールされます。

    • タスクグラフの場合:

      • ALLOW_OVERLAPPING_EXECUTION = FALSE (デフォルト)の場合、現在のタスクグラフが完了した後、新しい実行がスケジュールされます。

      • ALLOW_OVERLAPPING_EXECUTION = TRUE で、現在実行中のタスクがルートタスクの場合、ルートタスクの完了後に新しい実行が開始されるようにスケジュールされます。

      • ALLOW_OVERLAPPING_EXECUTION = TRUE で、現在実行中のタスクが子タスクの場合、新しい実行が直ちに開始されます。

    次のスケジュール実行が開始される前に EXECUTE TASK コマンドが再度実行されると、リクエストされた実行はスケジュールされた実行に置き換わります。

  • タスクが予期しないエラーで失敗した場合、エラーに関する通知を受け取ることができます。タスクエラー通知の構成の詳細については、 タスクの通知の有効化 をご参照ください。

  • タスク情報を表示するには、以下のいずれかを実行します。

    • Snowsight を開き、 Monitoring » Task History を選択します。

    • COMPLETE_TASK_GRAPHS テーブル関数を呼び出し、結果を調べます。

mytask という名前のタスクの実行を手動でトリガーします。

EXECUTE TASK mytask;
Copy