CREATE TASK

現在/指定されたスキーマに新しいタスクを作成するか、既存のタスクを置き換えます。

このコマンドは、次のバリアントもサポートしています。

  • CREATE OR ALTER TASK (タスクが存在しない場合に作成、または既存のタスクを変更)

  • CREATE TASK ... CLONE (既存のタスクのクローンを作成)

タスクについては、 タスクの紹介 をご参照ください。

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

ALTER TASKDROP TASKSHOW TASKSDESCRIBE TASK

重要

新しく作成されたタスクまたは複製されたタスクは、中断状態で作成されます。中断されたタスクの実行については、 ALTER TASK ... RESUME または EXECUTE TASK をご参照ください。

構文

CREATE [ OR REPLACE ] TASK [ IF NOT EXISTS ] <name>
    [ WITH TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
    [ { WAREHOUSE = <string> } | { USER_TASK_MANAGED_INITIAL_WAREHOUSE_SIZE = <string> } ]
    [ SCHEDULE = '{ <num> MINUTE | USING CRON <expr> <time_zone> }' ]
    [ CONFIG = <configuration_string> ]
    [ ALLOW_OVERLAPPING_EXECUTION = TRUE | FALSE ]
    [ <session_parameter> = <value> [ , <session_parameter> = <value> ... ] ]
    [ USER_TASK_TIMEOUT_MS = <num> ]
    [ SUSPEND_TASK_AFTER_NUM_FAILURES = <num> ]
    [ ERROR_INTEGRATION = <integration_name> ]
    [ COMMENT = '<string_literal>' ]
    [ FINALIZE = <string> ]
    [ TASK_AUTO_RETRY_ATTEMPTS = <num> ]
    [ USER_TASK_MINIMUM_TRIGGER_INTERVAL_IN_SECONDS = <num>]
  [ AFTER <string> [ , <string> , ... ] ]
  [ WHEN <boolean_expr> ]
  AS
    <sql>
Copy

バリアント構文

CREATE OR ALTER TASK

タスクがまだ存在しない場合は新しいタスクを作成するか、既存のタスクをステートメントで定義されたタスクに変換します。CREATE OR ALTER TASK ステートメントは、 CREATE TASK ステートメントの構文ルールに従い、このステートメントには ALTER TASK ステートメントと同じ制限があります。

サポートされるタスク変更には以下が含まれます。

  • タスクのプロパティとパラメーターを変更します。例: SCHEDULE、 USER_TASK_TIMEOUT_MS、または COMMENT。

  • 先行タスクを設定、設定解除、または変更します。

  • タスク条件を設定、設定解除、または変更(WHEN 句)します。

  • タスク定義(AS句)を変更します。

詳細については、 CREATE OR ALTER TASK の使用上の注意 をご参照ください。

CREATE OR ALTER TASK <name>
    [ { WAREHOUSE = <string> } | { USER_TASK_MANAGED_INITIAL_WAREHOUSE_SIZE = <string> } ]
    [ SCHEDULE = '{ <num> MINUTE | USING CRON <expr> <time_zone> }' ]
    [ CONFIG = <configuration_string> ]
    [ ALLOW_OVERLAPPING_EXECUTION = TRUE | FALSE ]
    [ USER_TASK_TIMEOUT_MS = <num> ]
    [ <session_parameter> = <value> [ , <session_parameter> = <value> ... ] ]
    [ SUSPEND_TASK_AFTER_NUM_FAILURES = <num> ]
    [ ERROR_INTEGRATION = <integration_name> ]
    [ COMMENT = '<string_literal>' ]
    [ FINALIZE = <string> ]
    [ TASK_AUTO_RETRY_ATTEMPTS = <num> ]
  [ AFTER <string> [ , <string> , ... ] ]
  [ WHEN <boolean_expr> ]
  AS
    <sql>
Copy

CREATE TASK ... CLONE

同じパラメーター値で新しいタスクを作成します。

CREATE [ OR REPLACE ] TASK <name> CLONE <source_task>
  [ ... ]
Copy

詳細については、 CREATE <オブジェクト> ... CLONE をご参照ください。

注釈

CREATE TASK <名前> CLONE を使用してタスクをクローンするか、タスクを含むスキーマをクローンすると、明示的にオーバーライドされない限り、基になるすべてのタスクプロパティがコピーされます。

必須パラメーター

name

タスクの識別子を指定する文字列。タスクが作成されるスキーマに対して一意である必要があります。

また、識別子はアルファベット文字で始まる必要があり、 "My object" のように識別子文字列全体が二重引用符で囲まれている場合を除き、スペースや特殊文字を含めることはできません。二重引用符で囲まれた識別子も大文字と小文字が区別されます。

詳細については、 識別子の要件 をご参照ください。

sql

次のいずれかを使用します。

  • 単一の SQL ステートメント

  • ストアドプロシージャへの呼び出し

  • Snowflakeスクリプト を使用した手続き型ロジック

    現在、 Snowsight では、Snowflakeスクリプトを使用するためのタスクの作成または変更をサポートしていません。代わりに、 SnowSQL または別のコマンドラインクライアントを使用してください。

SQL コードは、タスク実行時に実行されます。タスクで使用する前に、 {sql} が期待通りに実行されることを確認します。

注釈

サーバーレスタスクは、JavaまたはPython 外部関数 の使用をサポートします。ただし、サーバーレスタスクは、Snowflake内部で開発された以下のオブジェクトタイプと関数を呼び出すことができません。

  • JavaまたはPythonコードを含むUDFs(ユーザー定義関数)。

  • Scalaで(Snowparkを使用して)作成された、またはJavaまたはPythonコードを含むUDFsを呼び出すストアドプロシージャ。

オプションのパラメーター

WAREHOUSE = string または . USER_TASK_MANAGED_INITIAL_WAREHOUSE_SIZE = string

WAREHOUSE = string

タスク実行用のコンピューティングリソースを提供する仮想ウェアハウスを指定します。

このタスクの実行にサーバーレスコンピューティングリソースを使用するには、このパラメーターを省略します。Snowflakeは、ワークロードごとに必要なサーバーレスコンピューティングリソースのサイズ変更とスケーリングを自動的に行います。タスクにスケジュールが指定されると、Snowflakeはリソースサイズを調整して、指定された時間枠内にタスクの将来の実行を完了します。タスクの初期ウェアハウスサイズを指定するには、 USER_TASK_MANAGED_INITIAL_WAREHOUSE_SIZE = string パラメーターを設定します。

USER_TASK_MANAGED_INITIAL_WAREHOUSE_SIZE = string

サーバーレスタスクにのみ適用されます。

Snowflakeが理想的なサイズを決定するためにタスク履歴を使用できるようになる前に、タスクの最初の実行にプロビジョニングするコンピューティングリソースのサイズを指定します。タスクが数回の実行を正常に完了すると、Snowflakeはこのパラメーター設定を無視します。

特定のタスクでタスク履歴が利用できない場合、コンピューティングリソースはこの初期サイズに戻ることに注意してください。

注釈

WAREHOUSE = string パラメーター値が指定されている場合は、このパラメーターを設定するとユーザーエラーが発生します。

サイズは、 SMALLMEDIUM、または LARGE など、ウェアハウスの作成時に使用可能なコンピューティングリソース(CREATE WAREHOUSE を使用)と同等です。パラメーターでサポートされる最大サイズは XXLARGE です。パラメーターを省略した場合、タスクの最初の実行はMサイズ(MEDIUM)のウェアハウスを使用して実行されます。

初期サイズは、タスクが作成された 、正常に1度実行される であれば変更できます(ALTER TASK を使用)。このタスクの最初の実行を開始した後にパラメーターを変更しても、現在または将来のタスク実行のコンピューティングリソースには影響しません。

タスクを中断および再開しても、コンピューティングリソースのサイズ設定に使用されたタスク履歴は削除されないことに注意してください。タスク履歴は、タスクが再作成された場合にのみ削除されます(CREATE OR REPLACE TASK 構文を使用)。

このパラメーターの詳細については、 USER_TASK_MANAGED_INITIAL_WAREHOUSE_SIZE をご参照ください。

SCHEDULE ...

タスクを定期的に実行するスケジュールを指定します。

注釈

  • Triggered Tasks の場合、スケジュールは必要ありません。スケジュールは、スタンドアロンタスクまたは タスクグラフ 内のルートタスクに対して定義する 必要 があります。それ以外の場合、タスクは EXECUTE TASK を使用して手動で実行された場合にのみ実行されます。

  • タスクグラフの子タスクにスケジュールを指定することは できません

  • USING CRON expr time_zone

    タスクを定期的に実行するためのcron式とタイムゾーンを指定します。標準のcronユーティリティ構文のサブセットをサポートします。

    タイムゾーンのリストについては、 tzデータベースタイムゾーンのリスト (Wikipedia)をご参照ください。

    cron式は、次のフィールドで構成されます。

    # __________ minute (0-59)
    # | ________ hour (0-23)
    # | | ______ day of month (1-31, or L)
    # | | | ____ month (1-12, JAN-DEC)
    # | | | | _ day of week (0-6, SUN-SAT, or L)
    # | | | | |
    # | | | | |
      * * * * *
    
    Copy

    次の特殊文字がサポートされています。

    *

    ワイルドカード。フィールドのオカレンスを指定します。

    L

    「最後」の略。曜日フィールドで使用すると、特定の月の「最後の金曜日」(「5L」)などの構造を指定できます。月の日フィールドでは、月の最後の日を指定します。

    /n

    特定の時間単位の nth インスタンスを示します。時間の各クォンタムは独立して計算されます。たとえば、月フィールドに 4/3 が指定されている場合、タスクは4月、7月、および10月、つまり、年の4番目の月から始まり、3か月ごとにスケジュールされます。その後も同じスケジュールが維持されます。つまり、タスクは1月(10月の実行から3か月後)に実行されるようにスケジュールされては いません

    注釈

    • cron式は現在、指定されたタイムゾーンに対してのみ評価します。アカウントの TIMEZONE パラメーター値を変更(またはユーザーレベルまたはセッションレベルで値を設定)しても、タスクのタイムゾーンは 変更されません

    • cron式は、タスクのすべての 有効 実行時間を定義します。Snowflakeは、このスケジュールに基づいてタスクを実行しようとします。ただし、次の有効な実行時間が始まる前に前の実行が完了していない場合、有効な実行時間はスキップされます。

    • 特定の月と曜日の両方がcron式に含まれている場合、タスクは月または曜日の いずれか を満たす日にスケジュールされます。例えば、 SCHEDULE = 'USING CRON 0 0 10-20 * TUE,THU UTC' は、月の10日から20日、およびそれらの日付以外の火曜日または木曜日に、 0AM でタスクをスケジュールします。

    • cronでの時間の最小粒度は分です。cron式で定義された分の間にタスクが再開された場合、最初にスケジュールされたタスクの実行は、cron式のインスタンスの次回発生です。たとえば、毎日午前0時(USING CRON 0 0 * * *)に実行するようにスケジュールされたタスクが、午前0時+5秒(00:00:05)に再開される場合、最初のタスクの実行は次の午前0時にスケジュールされます。

  • num MINUTE

    タスクの実行間に挿入される待機時間の間隔(分単位)を指定します。正の整数のみを受け入れます。

    num M 構文もサポートしています。

    あいまいさを避けるために、次の場合には 基本間隔時間 が設定されます。

    基本間隔時間は、現在のクロック時間から間隔カウンターを開始します。たとえば、 10 の INTERVAL 値が設定され、タスクが9:03 AM で有効になっている場合、タスクは9:13 AM、9:23 AMというふうに実行されます。絶対精度を確保するために最善を尽くしますが、保証は、設定された間隔の にタスクが実行されないようにすることのみに限定されます。たとえば、現在の例では、タスクが最初に実行されるのは9:14 AM で、9:12 AM には実行されません。

    注釈

    サポートされる最大値は 11520 (8日間)です。 num MINUTE の値がこれよりも大きいタスクは実行されません。

CONFIG = configuration_string

タスクグラフ内のすべてのタスクによりアクセス可能なキーと値のペアを文字列で指定します。JSON 形式にする必要があります。現在実行中のタスクの構成文字列の取得の詳細については、 SYSTEM$GET_TASK_GRAPH_CONFIG をご参照ください。

注釈

このパラメーターは、ルートタスクでのみ設定できます。この設定は、タスクグラフ内のすべてのタスクに適用されます。

このパラメーターはスタンドアロンタスクに設定できますが、タスクの動作には影響しません。Snowflakeは、スタンドアロンタスクの1つのインスタンスのみが特定の時間に実行されていることを確認します。

ALLOW_OVERLAPPING_EXECUTION = TRUE | FALSE

タスクグラフの複数のインスタンスを同時に実行できるようにするかどうかを指定します。

注釈

このパラメーターは、ルートタスクでのみ設定できます。この設定は、タスクグラフ内のすべてのタスクに適用されます。

このパラメーターはスタンドアロンタスクに設定できますが、タスクの動作には影響しません。Snowflakeは、スタンドアロンタスクの1つのインスタンスのみが特定の時間に実行されていることを確認します。

  • TRUE の場合、子タスクの現在の実行がまだ動作している間にルートタスクの次のスケジュールが実行されると、タスクグラフの別のインスタンスが開始されます。次の実行スケジュールが開始する際に、ルートタスクがまだ実行されている場合、そのスケジュールされた時間はスキップされます。

  • FALSE の場合、ルートタスクの次の実行は、タスクグラフ内にあるすべての子タスクの実行が終了した後にのみスケジュールされます。これは、タスクグラフ内のすべてのタスクを実行するために必要な累積時間がルートタスクの定義で設定された、明示的にスケジュールされた時間を超える場合、タスクグラフの少なくとも1つの実行がスキップされることを意味します。

デフォルト: FALSE

session_parameter = value [ , session_parameter = value ... ]

タスクの実行時にセッションに設定するセッションパラメーターのコンマ区切りリストを指定します。タスクはすべてのセッションパラメーターをサポートします。完全なリストについては、 セッションパラメーター をご参照ください。

USER_TASK_TIMEOUT_MS = num

タスクがタイムアウトするまでの1回の実行の制限時間(ミリ秒単位)を指定します。

注釈

  • タスクの制限時間を大幅に増やす前に、タスクによって開始された SQL ステートメントを最適化できるか(ステートメントを書き換えるか、ストアドプロシージャを使用して)、ウェアハウスのサイズを増やす必要があるかどうかを検討してください。

  • 状況によっては、パラメーターSTATEMENT_TIMEOUT_IN_SECONDSの優先順位がUSER_TASK_TIMEOUT_MSよりも高くなります。詳細については、 STATEMENT_TIMEOUT_IN_SECONDS をご参照ください。

このパラメーターの詳細については、 USER_TASK_TIMEOUT_MS をご参照ください。

値: 0 - 86400000 (1日)。

デフォルト: 3600000 (1時間)

SUSPEND_TASK_AFTER_NUM_FAILURES = num

現在のタスクが自動的に中断されるまでに連続して失敗したタスク実行の回数を指定します。失敗したタスク実行には、タスク本体の SQL コードがユーザーエラーを生成するかタイムアウトになった実行が含まれます。スキップ、キャンセル、またはシステムエラーが原因で失敗したタスク実行は不確定とみなされ、失敗したタスク実行の数には含まれません。

スタンドアロンタスクまたはタスクグラフ内のルートタスクにパラメーターを設定します。パラメーターが 0 より大きい値に設定されている場合、次の動作がスタンドアロンタスクまたはタスクグラフの実行に適用されます。

  • スタンドアロンタスクは、指定された数の連続したタスクの実行が失敗するかタイムアウトになると、自動的に中断します。

  • ルートタスクは、タスクグラフ内にある 任意 の単一タスクの実行が、連続した実行で指定された回数失敗するかタイムアウトした後、自動的に中断します。

パラメーターを 0 に設定すると、失敗したタスクは自動的に中断されません。

この設定は、サーバーレスのコンピューティングリソースまたは仮想ウェアハウスのコンピューティングリソースに依存するタスクに適用されます。

このパラメーターの詳細については、 SUSPEND_TASK_AFTER_NUM_FAILURES をご参照ください。

値: 0 - 上限なし。

デフォルト: 10

ERROR_INTEGRATION = 'integration_name'

Amazon Simple Notification Service(SNS)、Microsoft Azure Event Grid、またはGoogle Pub/Subを使用して、エラー通知を送信するようにタスクを設定する場合にのみ必要です。

Amazon SNS、 MS Azure Event Grid、またはGoogle Pub/Subとの通信に使用する通知統合の名前を指定します。詳細については、 タスクのエラー通知の有効化 をご参照ください。

COMMENT = 'string_literal'

タスクのコメントを指定します。

デフォルト: 値なし

AFTER string [ , string , ... ]

現在のタスクに対する1つ以上の先行タスクを指定します。このオプションを使用して、 タスクグラフの を作成するか、このタスクを既存のタスクグラフに追加します。タスクグラフは、スケジュールされたルートタスクで始まり、依存関係によって相互にリンクされる一連のタスクです。

タスクグラフの構造は、そのすべてのコンポーネントタスクが作成された後に定義できることに注意してください。 ALTER TASK ... ADD AFTER ステートメントを実行して、計画されたタスクグラフの各タスクの先行タスクを指定します。

タスクは、先行タスクが実行を正常に終了した後(短い遅延の後)に実行されます。

注釈

  • ルートタスクには、定義済みのスケジュールが必要です。タスクをリンクするため、各子タスクには、 AFTER パラメーターを使用して指定された1つ以上の定義済みの先行タスクが必要です。

  • 単一のタスクは、100先行タスクと100子タスクに制限されています。さらに、タスクグラフは、再開状態または中断状態のいずれかにおいて、 合計 で最大1000タスク(ルートタスクを含む)に制限されます。

  • アカウントは現在、最大30000件の再開タスクに制限されています。

  • タスクグラフ内にあるタスクすべては同じタスク所有者である必要があります。単一のロールには、タスクグラフ内にあるすべてのタスクに対する OWNERSHIP 権限が必要です。

  • タスクグラフ内にあるすべてのタスクは、同じスキーマに存在している必要があります。

  • ルートタスクは、 任意の タスクが再作成される(CREATE OR REPLACE TASK 構文を使用)、または子タスクが追加される(CREATE TASK ... AFTER または ALTER TASK ... ADD AFTER を使用)か削除される(ALTER TASK ... REMOVE AFTER)前に一時停止する必要があります。

  • タスクグラフ内にあるタスクのいずれかがクローンされると、タスクをクローンするロールがデフォルトでクローンの所有者になります。

    • 元のタスクの所有者がクローンを作成すると、タスククローンはタスクと先行タスクの間のリンクを保持します。これは、同じ先行タスクが元のタスクとタスククローンの両方をトリガーすることを意味します。

    • 別のロールがクローンを作成する場合、タスククローンはスケジュールを持てますが、先行タスクは持てません。

  • 現在の制限:

    • Snowflakeは、定義されたスケジュールを持つタスクの最大1つのインスタンスが特定の時間に実行されることを保証します。ただし、定義済みの先行タスクを持つタスクに対して同じ保証を提供することはできません。

WHEN boolean_expr

ブール SQL 式を指定します。 AND/OR で結合された複数の条件がサポートされています。( SCHEDULE または AFTER 設定に基づいて)タスクがトリガーされると、式の条件を検証して、実行するかどうかを決定します。式の条件が 満たされない 場合、タスクは現在の実行をスキップします。このタスクを先行タスクとして識別するタスクも実行されません。

タスク WHEN 句では、以下がサポートされています。

  • SYSTEM$STREAM_HAS_DATA は、 SQL 式の評価でサポートされています。

    この関数は、指定されたストリームに変更追跡データが含まれているかどうかを示します。この関数を使用して、現在の実行を開始する前に、指定されたストリームに変更データが含まれているかどうかを評価することができます。結果が FALSE の場合、タスクは実行されません。

    注釈

    SYSTEM$STREAM_HAS_DATA は、ストリームに変更データが含まれていても FALSE 値を返すことを回避するように設計されています。ただし、この関数でストリームに変更データが含まれてない場合に TRUE を返すことを回避できる保証はありません。

  • SYSTEM$GET_PREDECESSOR_RETURN_VALUE は、 SQL 式の評価でサポートされています。

    この関数は、タスクグラフにある先行タスクの戻り値を取得します。戻り値はブーリアン式の一部として使用できます。SYSTEM$GET_PREDECESSOR_RETURN_VALUE を使用する場合に、戻り値を必要に応じて適切な数値型、文字列型、またはブーリアン型にキャストすることができます。

    簡単な例は次のとおりです。

    WHEN NOT SYSTEM$GET_PREDECESSOR_RETURN_VALUE('task_name')::BOOLEAN
    
    Copy
    WHEN SYSTEM$GET_PREDECESSOR_RETURN_VALUE('task_name') != 'VALIDATION'
    
    Copy
    WHEN SYSTEM$GET_PREDECESSOR_RETURN_VALUE('task_name')::FLOAT < 0.2
    
    Copy

    注釈

    TASK ... WHEN 式で PARSE_JSON 使用することは、ウェアハウスベースのコンピューティングリソースが必要なため、サポートされていません。

  • AND、 OR、 NOT などの ブーリアン演算子

  • 数値型、文字列型、ブーリアン型の間でキャストします。

  • 等しい、等しくない、より大きい、より小さいなどの 比較演算子

WHEN 式の条件の検証にコンピューティングリソースは必要ありません。代わりに、検証はクラウドサービスレイヤーで処理されます。タスクが WHEN 条件を評価して実行しないたびに、わずかな料金が発生します。タスクが実行されるまで、タスクがトリガーされるたびに料金が累積されます。その時点で、料金はSnowflakeクレジットに変換され、タスク実行のコンピューティングリソース使用量に追加されます。

一般に、条件を検証するための計算時間は、タスクの実行時間と比較して重要ではありません。ベストプラクティスとして、スケジュールされたタスクと実際のタスクの実行を可能な限り一致させます。タスクの実行と一致しないタスクのスケジュールは避けます。たとえば、データがおよそ24時間ごとにストリームのあるテーブルに挿入される場合、毎分ストリームデータをチェックするタスクはスケジュールしないでください。各実行で WHEN 式を検証するための料金は、通常は重要ではありませんが、料金は累積されます。

コンピューティングリソース1日あたりの使用量の10%クォータ を下回るクラウドサービス1日あたりの消費量は、クラウドサービスの料金に累積されません。

TAG ( tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ] )

タグ の名前とタグ文字列の値を指定します。

タグ値は常に文字列であり、タグ値の最大文字数は256です。

ステートメントでのタグの指定に関する情報については、 オブジェクトおよび列のタグクォータ をご参照ください。

このパラメーターは、 CREATE OR ALTER バリアント構文ではサポートされていません。

FINALIZE = string

ファイナライザータスクが関連付けられているルートタスクの名前を指定します。ファイナライザータスクは、タスクグラフ内にある他のすべてのタスク実行が完了した後に実行されます。タスクグラフが使用する通知やリソースのリリースとクリーンアップを処理するファイナライザータスクの SQL を定義できます。詳細については、 タスクグラフのリリースとクリーンアップ をご参照ください。

  • ルートタスクにはファイナライザタスクを1つのみ指定できます。ルートタスクに対して複数のファイナライザタスクを作成すると、タスクの作成に失敗します。

  • ファイナライザタスクには子タスクを指定できません。ファイナライザタスクを先行タスクにしようとするコマンドは失敗します。

  • ファイナライザタスクにはスケジュールを指定できません。スケジュール付きファイナライザタスクの作成は失敗します。

デフォルト: 値なし

TASK_AUTO_RETRY_ATTEMPTS = num

タスクグラフの自動再試行回数を指定します。タスクグラフが FAILED の状態で完了した場合、Snowflakeは自動的に失敗したグラフの最後のタスクからタスクグラフを再試行することができます。

タスクグラフの自動再試行はデフォルトでは無効になっています。この機能を有効にするには、タスクグラフのルートタスクで TASK_AUTO_RETRY_ATTEMPTS を 0 より大きい値に設定します。

このパラメーターは、タスクグラフのルートタスクに設定する必要があることに注意してください。子タスクに設定されている場合は、エラーが返されます。

値: 030

デフォルト: 0

USER_TASK_MINIMUM_TRIGGER_INTERVAL_IN_SECONDS = num

タスクの実行頻度を秒単位で定義します。データの変更が指定された最小値よりも頻繁に発生する場合、変更はグループ化され、まとめて処理されます。

この値を12時間以上に設定しても、タスクは12時間ごとに実行されます。

値: 最小値 15、最大値 604800

デフォルト: 30

アクセス制御の要件

この SQL コマンドの実行に使用される ロール には、少なくとも次の 権限 が必要です。

権限

オブジェクト

メモ

EXECUTE MANAGED TASK

アカウント

実行でサーバーレスコンピューティングリソースに依存するタスクにのみ必要です。

CREATE TASK

スキーマ

USAGE

ウェアハウス

実行のためにユーザー管理のウェアハウスに依存するタスクにのみ必要です。

OWNERSHIP

タスク

既存 のタスクに対して CREATE OR ALTER TASK ステートメントを実行するときに必要です。

OWNERSHIP is a special privilege on an object that is automatically granted to the role that created the object, but can also be transferred using the GRANT OWNERSHIP command to a different role by the owning role (or any role with the MANAGE GRANTS privilege).

スキーマ内の任意のオブジェクトを操作するには、親データベースとスキーマに対する USAGE 権限も必要であることに注意してください。

指定された権限のセットを使用してカスタムロールを作成する手順については、 カスタムロールの作成 をご参照ください。

セキュリティ保護可能なオブジェクト に対して SQL アクションを実行するためのロールと権限付与に関する一般的な情報については、 アクセス制御の概要 をご参照ください。

使用上の注意

  • タスクは、タスク所有者の権限を使用して実行されます。タスクを実行するために最低限必要な権限のリストについては、 タスクセキュリティ をご参照ください。

    ロールをタスク定義に含める 前に、タスク所有者ロールとして SQL ステートメントを実行するか、ストアドプロシージャを呼び出し、SQL またはストアドプロシージャによって参照されるオブジェクトに対する必要な権限がロールにあることを確認します。

  • サーバーレスタスクの場合、

    • タスクのサーバーレスコンピューティングリソースは、ウェアハウスサイズで XSMALL から XXLARGE に相当する範囲になります。サイズアップのご依頼は、 Snowflakeサポート にご連絡ください。

    • タスクグラフ内にある個々のタスクは、サーバーレスまたはユーザー管理のコンピューティングリソースを使用できます。タスクグラフ内にある すべて のタスクに対してこのサーバーレスコンピューティングを使用する必要はありません。

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

  • デフォルトでは、トランザクションを明示的に開始せずに実行された DML ステートメントは、成功時には自動的にコミットされ、失敗時にはステートメントの最後でロールバックされます。この動作は 自動コミット と呼ばれ、 AUTOCOMMIT パラメーターで制御されます。このパラメーターは TRUE に設定する 必要があります。アカウントレベルで AUTOCOMMIT パラメーターが FALSE に設定されている場合、個々のタスクのパラメーターを TRUE に設定します( ALTER TASK ... SET AUTOCOMMIT = TRUEを使用)。それ以外では、タスクによって実行されるどのような DML ステートメントも失敗します。

  • ストリームからデータを消費するタスクは1つのみにする必要があります。同じテーブルに対して複数のストリームを作成し、複数のタスクに消費させます。タスクが DML ステートメントを使用してストリーム内のデータを消費すると、ストリームはオフセットを進め、次のタスクで変更データを消費することができなくなります。

  • CREATE OR REPLACE 構文を使用すると、Snowflakeは既存のタスクをドロップし、指定された定義を使用して再作成します。タスクを置き換えるときは、以下の動作を考慮します。

    • 再作成されたタスクは、デフォルトで一時停止されます。

    • 実行中のタスクはすべて完了します。タスクの実行を停止するには、 SYSTEM$USER_TASK_CANCEL_ONGOING_EXECUTIONS 関数を使用します。

    • スタンドアロンまたはルートタスクが再作成されると、次にスケジュールされているタスクの実行がキャンセルされます。

    • CREATE OR REPLACE <オブジェクト> ステートメントはアトミックです。つまり、オブジェクトが置き換えられると、単一のトランザクションで、古いオブジェクトが削除されて新しいオブジェクトが作成されます。

    • 定義が大きいタスクはエラーの原因になります。タスクのサイズが原因でエラーが発生する場合は、ストアドプロシージャを使用するか、タスクの定義を単純化します。

  • メタデータについて:

    注意

    Snowflakeサービスを使用する場合、お客様は、個人データ(ユーザーオブジェクト向け以外)、機密データ、輸出管理データ、またはその他の規制されたデータがメタデータとして入力されていないことを確認する必要があります。詳細については、 Snowflakeのメタデータフィールド をご参照ください。

CREATE OR ALTER TASK の使用上の注意

  • ALTER TASK コマンドのすべての制限が適用されます。

  • CREATE OR ALTER TASK コマンドを使用してタスクを再開または中断することはできません。タスクを再開または中断するには、 ALTER TASK コマンドを使用します。

  • タグの設定や設定解除はサポートされていませんが、既存のタグは CREATE OR ALTER ステートメントによって変更されることは なく、そのまま残ります。

単一の SQL ステートメント

日曜日(米国/ロサンゼルスタイムゾーン)の9 AM から5 PM までの1時間ごとに、現在のタイムスタンプをクエリするサーバーレスタスクを作成します。

初期のウェアハウスサイズは XSMALL です。

CREATE TASK t1
  SCHEDULE = 'USING CRON 0 9-17 * * SUN America/Los_Angeles'
  USER_TASK_MANAGED_INITIAL_WAREHOUSE_SIZE = 'XSMALL'
  AS
    SELECT CURRENT_TIMESTAMP;
Copy

前の例と同じですが、タスクはユーザー管理のウェアハウスに依存して、実行用のコンピューティングリソースを提供します。

CREATE TASK mytask_hour
  WAREHOUSE = mywh
  SCHEDULE = 'USING CRON 0 9-17 * * SUN America/Los_Angeles'
  AS
    SELECT CURRENT_TIMESTAMP;
Copy

追加のタイミング例:

SCHEDULE 値

説明

* * * * * UTC

毎分。UTC タイムゾーン。

5 * * * * UTC

5分ごと。UTC タイムゾーン。

0 2 * * * UTC

毎晩2 AM。UTC タイムゾーン。

0 5,17 * * * UTC

毎日2回、5 AM と5 PM (時間の一番上)。UTC タイムゾーン。

30 2 L 6 * UTC

6月、月末の2:30 AM。UTC タイムゾーン。

1時間ごとに現在のタイムスタンプをテーブルに挿入するサーバーレスタスクを作成します。タスクは、タスクが実行されるセッションの TIMESTAMP_INPUT_FORMAT パラメーターを設定します。このセッションパラメーターは、挿入されたタイムスタンプの形式を指定します。

CREATE TASK t1
  SCHEDULE = '60 MINUTE'
  TIMESTAMP_INPUT_FORMAT = 'YYYY-MM-DD HH24'
  USER_TASK_MANAGED_INITIAL_WAREHOUSE_SIZE = 'XSMALL'
  AS
    INSERT INTO mytable(ts) VALUES(CURRENT_TIMESTAMP);
Copy

5分ごとに現在のタイムスタンプをテーブルに挿入するタスクを作成します。

CREATE TASK mytask_minute
  WAREHOUSE = mywh
  SCHEDULE = '5 MINUTE'
  AS
    INSERT INTO mytable(ts) VALUES(CURRENT_TIMESTAMP);
Copy

5分ごとに、ストリームから INSERT 操作の変更追跡データをテーブルに挿入するタスクを作成します。タスクは SYSTEM$STREAM_HAS_DATA 関数を使用してストリームをポーリングし、変更データが存在するかどうかを判断し、結果が FALSE の場合、現在の実行をスキップします。

CREATE TASK mytask1
  WAREHOUSE = mywh
  SCHEDULE = '5 minute'
  WHEN
    SYSTEM$STREAM_HAS_DATA('MYSTREAM')
  AS
    INSERT INTO mytable1(id,name) SELECT id, name FROM mystream WHERE METADATA$ACTION = 'INSERT';
Copy

タスクグラフにサーバーレスの子タスクを作成し、複数の先行タスクを追加します。子タスクは、指定されたすべての先行タスクが独自の実行を正常に完了した後にのみ実行されます。

タスクグラフのルートタスクが task1 であり、 task2task3、および task4task1 の子タスクであるとします。この例では、子タスク task5 をタスクグラフに追加し、 task2task3、および task4 を先行タスクとして指定します。

-- Create task5 and specify task2, task3, task4 as predecessors tasks.
-- The new task is a serverless task that inserts the current timestamp into a table column.
CREATE TASK task5
  AFTER task2, task3, task4
AS
  INSERT INTO t1(ts) VALUES(CURRENT_TIMESTAMP);
Copy

ストアドプロシージャ

ストアドプロシージャを呼び出す my_copy_task という名前のタスクを作成して、1時間ごとに mytable テーブルから名前付き mystage ステージにデータをアンロードします( COPY INTO <場所> を使用)。

-- Create a stored procedure that unloads data from a table
-- The COPY statement in the stored procedure unloads data to files in a path identified by epoch time (using the Date.now() method)
CREATE OR REPLACE PROCEDURE my_unload_sp()
  returns string not null
  language javascript
  AS
    $$
      var my_sql_command = ""
      var my_sql_command = my_sql_command.concat("copy into @mystage","/",Date.now(),"/"," from mytable overwrite=true;");
      var statement1 = snowflake.createStatement( {sqlText: my_sql_command} );
      var result_set1 = statement1.execute();
    return my_sql_command; // Statement returned for info/debug purposes
    $$;

-- Create a task that calls the stored procedure every hour
CREATE TASK my_copy_task
  WAREHOUSE = mywh
  SCHEDULE = '60 minute'
  AS
    CALL my_unload_sp();
Copy

SnowSQL を使用した複数の SQL ステートメント

複数の SQL ステートメントを実行するタスクを作成します。この例では、タスクはセッションの TIMESTAMP_OUTPUT_FORMAT を変更してから、 CURRENT_TIMESTAMP 関数をクエリします。

注釈

タスク定義の SQL コードには、複数のステートメントが含まれています。CREATE TASK ステートメントを実行するには、一時的に SQL ステートメントの区切り文字としてセミコロン 以外 の文字を設定する必要があります。そうしないと、 CREATE TASK ステートメントはユーザーエラーを返します。SnowSQL の SQL 区切り文字を変更するコマンドは !set sql_delimiter = <文字> です。

!set sql_delimiter=/
CREATE OR REPLACE TASK test_logging
  USER_TASK_MANAGED_INITIAL_WAREHOUSE_SIZE = 'XSMALL'
  SCHEDULE = 'USING CRON  0 * * * * America/Los_Angeles'
  AS
    BEGIN
      ALTER SESSION SET TIMESTAMP_OUTPUT_FORMAT = 'YYYY-MM-DD HH24:MI:SS.FF';
      SELECT CURRENT_TIMESTAMP;
    END;/
!set sql_delimiter=";"
Copy

Snowflakeスクリプトを使用した手続き型ロジック

変数を宣言してその変数を使用し、2分ごとに変数の値を返すタスクを作成します。

CREATE TASK t1
  USER_TASK_MANAGED_INITIAL_WAREHOUSE_SIZE = 'XSMALL'
  SCHEDULE = '2 minute'
  AS
    EXECUTE IMMEDIATE
    $$
    DECLARE
      radius_of_circle float;
      area_of_circle float;
    BEGIN
      radius_of_circle := 3;
      area_of_circle := pi() * radius_of_circle * radius_of_circle;
      return area_of_circle;
    END;
    $$;
Copy

構成付きルートタスク

構成を指定してその構成を読み取るタスクを作成します。

CREATE OR REPLACE TASK root_task_with_config
  WAREHOUSE=mywarehouse
  SCHEDULE='10 m'
  CONFIG=$${"output_dir": "/temp/test_directory/", "learning_rate": 0.1}$$
  AS
    BEGIN
      LET OUTPUT_DIR STRING := SYSTEM$GET_TASK_GRAPH_CONFIG('output_directory')::string;
      LET LEARNING_RATE DECIMAL := SYSTEM$GET_TASK_GRAPH_CONFIG('learning_rate:v1')::DECIMAL;
    ...
    END;
Copy

ファイナライザタスク

タスクグラフのルートタスクに関連付けられ、タスク完了後に電子メールアラートを送信するファイナライザータスクを作成します。ファイナライザータスクの詳細については、 タスクグラフのリリースとクリーンアップ をご参照ください。

CREATE TASK finalize_task
  WAREHOUSE = my_warehouse
  FINALIZE = my_root_task
  AS
    CALL SYSTEM$SEND_EMAIL(
      'my_email_int',
      'first.last@example.com, first2.last2@example.com',
      'Email Alert: Task A has finished.',
      'Task A has successfully finished.\nStart Time: 10:10:32\nEnd Time: 12:15:45\nTotal Records Processed: 115678'
    );
Copy

トリガーされるタスク

ストリームに関連付けられたトリガーされるタスクを作成し、ストリームに新しいデータがあるたびに、指定されたストリームからテーブルにデータを挿入します。詳細については、 トリガーされるタスク をご参照ください。

CREATE TASK triggeredTask  WAREHOUSE = my_warehouse
  WHEN system$stream_has_data('my_stream')
  AS
    INSERT INTO my_downstream_table
    SELECT * FROM my_stream;

ALTER TASK triggeredTask RESUME;
Copy

CREATE OR ALTER TASK コマンドを使った簡単なタスクを作成、変更する

ウェアハウス my_warehouse で毎時実行するタスク my_task を作成します。

CREATE OR ALTER TASK my_task
  WAREHOUSE = my_warehouse
  SCHEDULE = '60 minute'
  AS
    SELECT PI();
Copy

タスク my_other_task の後にタスク my_task を実行するように変更し、タスクの定義を更新します。

CREATE OR ALTER TASK my_task
  WAREHOUSE = regress
  AFTER my_other_task
  AS
    SELECT 2 * PI();
Copy