タスクの紹介¶
タスクは、ユーザー定義関数を使用して、ビジネスプロセスを自動化し、スケジューリングします。1つのタスクで、データパイプラインで単純なものから複雑なものまで関数を実行できます。 タスクグラフ を使えば、複数のタスクをまとめてデータパイプラインを作成し、複雑なユースケースに対応することができます。また、 テーブルストリーム とタスクを組み合わせて、最近変更されたデータを処理する ELT ワークフローを継続的に実行することもできます。
タスクは、次に挙げる型の関数のいずれかを実行できます。
単一の SQL ステートメント
ストアドプロシージャへの呼び出し
Snowflakeスクリプト を使用した手続き型ロジック
テーブルストリーム でトリガータスクを使用すると、最近変更されたテーブルの行を処理する ELT ワークフローを継続的に実行できます。
また、行のレポートテーブルへの挿入またはマージにより定期的なレポートを生成したり、他の定期的な作業を実行したりするために、タスクを独立して使用することもできます。複雑なビジネスプロセスをタスクで実行するには、 タスクグラフ を使って、複数のタスクを連鎖させることを検討してください。
注釈
テーブルスキーマの進化 はタスクでサポートされていません。
このトピックの内容:
タスク作成ワークフロー¶
このセクションでは、タスク設定ワークフローの概要を説明します。
以下の手順でコマンドを実行できる タスク管理者ロール を作成します。
CREATE TASK を使用してタスクを作成します。タスクはデフォルトで一時停止されています。タスクの作成については、以下のセクションをご参照ください。
手動タスク実行 を使ってタスクをテストします。
ALTER TASK ... RESUME を実行して、タスク定義で指定されたパラメーターに基づいてタスクを実行できるようにします。タスク実行の詳細については、以下のセクションをご参照ください。
コンピューティングリソース¶
タスクには、 SQL コードを実行するためのコンピューティングリソースが必要です。次のコンピューティングモデルのいずれかを個々のタスクに選択できます。
サーバーレスコンピューティングモデル
ユーザー管理の仮想ウェアハウス
サーバーレスタスク¶
タスクにサーバーレスコンピューティングモデルを使用すると、ユーザーが管理する仮想ウェアハウスではなく、Snowflakeが管理するコンピューティングリソースに依存できるようになります。Snowflakeは、ワークロードごとに必要なサーバーレスコンピューティングリソースのサイズ変更を自動的に行います。Snowflakeは、同じタスクの最近の実行に対する統計の動的分析に基づいて、特定の実行に対するサーバーレスコンピューティングリソースの理想的なサイズを決定します。サーバーレスタスクの最大コンピューティングサイズは、 XXLARGE ユーザー管理の仮想ウェアハウスと同等です。アカウント内の複数のワークロードが、共通のコンピューティングリソースのセットを共有します。
サーバーレスコンピューティング・モデルを使用するには、 CREATE TASK を使ってタスクを作成する際に、WAREHOUSE パラメーターを省略します。CREATE TASK コマンドを実行するロールには、 EXECUTE MANAGED TASK グローバル権限が必要であることに注意してください。タスクのアクセス制御要件の詳細については、 タスクセキュリティ をご参照ください。
サーバーレスタスクの実行に対する請求は、コンピューティングリソースを仮想ウェアハウスに依存するタスクの標準的なクレジット消費モデルとは異なります。詳細については、 タスクのコスト をご参照ください。
ユーザー管理のタスク¶
タスクの作成時に既存の仮想ウェアハウスを指定することで、個々のタスクのコンピューティングリソースを管理することもできます。このオプションでは、タスクによって実行される SQL アクションに適したサイズのウェアハウスを選択する必要があります。
ウェアハウスのサイズの選択¶
既存のウェアハウスを使用して個々のタスクにコンピューティングリソースを提供することを選択する場合は、 ウェアハウスに関する考慮事項 で説明されているベストプラクティスに従ってください。タスクに必要なコンピューティングクラスタを理解するには、ウェアハウスのサイズとクラスタリングに基づいて異なるウェアハウスを使用して、単一のタスクまたは タスクグラフ の平均実行時間を分析します。ウェアハウスが複数のプロセスで共有されているかどうかも考慮する必要があります。
タスクの平均実行時間を分析するには、 TASK_HISTORY アカウント使用状況表示 をクエリします。タスクのスケジュールされた時間と完了した時間の平均差は、タスクの予想される平均実行時間です。この差には、他のプロセスがウェアハウスのコンピューティングリソースを使用している間、タスクがキューに入っていた時間も含まれます。
タスクグラフの場合、先行タスクの実行が完了し、子タスクが起動された後、短いラグがあります。ウェアハウスの大きさは、複数の子タスクが同時に実行できる大きさを選びます。
次の図は、20秒間キューに入れられた単一のタスクが40秒間実行された、1分間のウィンドウを示しています。これは、タスクがスケジュールされてから最初の20秒間、他のプロセスがウェアハウスのリソースを使用していたことを意味します。

次の図は、実行ごとに平均で5分かかるタスクグラフを示しています。この図は、タスクグラフを2回実行して完了するウィンドウを示しています。このウィンドウでは、ルートタスクの開始がスケジュールされている時間から、最後の子タスクの実行が完了するまでが計算されます。
この例では、タスクグラフが実行されているウェアハウスは、他の並行処理と共有されています。これらの同時操作は、タスクグラフ内の各タスクの実行が終了し、次のタスクの実行が開始される前に、使用可能なすべてのリソースを消費します。その結果、各タスクのウィンドウには、他の操作が終了してコンピューティングリソースの放棄を待つ間、ある程度のキューイングが含まれます。

コンピューティングモデルの選択に関する推奨事項¶
次のテーブルでは、サーバーレスタスクとユーザー管理タスクのどちらを使用するかを決定するために役立つ、さまざまな要因について説明します。
カテゴリ |
サーバーレスタスク |
ユーザー管理のタスク |
メモ |
---|---|---|---|
同時タスクワークロードの数、期間、および予測可能性 |
同時に実行されるタスクが少なすぎたり、短時間で完了するような、十分に活用されていないウェアハウスにお勧めです。 実行が比較的安定しているタスクは、サーバーレスタスクに適しています。 |
複数のタスクが同時進行するフル稼働のウェアハウスにお勧めです。 また、コンピューティングリソースの予測不可能な負荷にも推奨されます。 自動中断と自動再開 を有効にした マルチクラスターウェアハウス は、クレジットの消費を抑えるために役立ちます。 |
サーバーレスタスクの場合、Snowflakeは実際のコンピューティングリソースの使用量に基づいてアカウントに請求します。 ユーザー管理タスクの場合、ウェアハウスの請求はウェアハウスのサイズに基づいており、ウェアハウスが再開されるたびに最低60秒の請求があります。 |
スケジュール間隔 |
スケジュール間隔の順守が非常に重要な場合に推奨されます。 スタンドアロンタスクまたはスケジュールされたタスクグラフの実行が間隔を超えると、Snowflakeは計算リソースのサイズを増やします。 |
スケジュール間隔の順守がそれほど重要でない場合に推奨されます。 |
スケジュール間隔 は、スタンドアロンタスクまたはタスクグラフ内にあるルートタスクのスケジュールされた実行間における時間間隔を指します。 コンピューティングリソースを増加すると、一部(すべてではなく)の SQL コードの実行時間が短縮される可能性がありますが、バッチウィンドウ内でタスクの実行を確実に完了するとは限りません。 |
サーバーレスタスク実行の最大サイズは、 XXLARGE ウェアハウスに相当します。タスクのワークロードでより大きなウェアハウスが必要な場合は、必要なサイズのウェアハウスを持つユーザー管理タスクを作成します。
タスクの実行¶
このセクションでは、タスクがスケジュールされ実行されるさまざまな方法、タスクの失敗がどのように処理されるか、タスクのバージョンがどのように決定されるかについて説明します。
タスクのスケジュール¶
通常、タスクはスケジュールに基づいて実行されます。 CREATE TASK を使用してタスクの作成時に、または ALTER TASK を使用してそれ以降にスケジュールを定義できます。
スタンドアロンタスクまたはタスクグラフのルートタスクは、通常、スケジュールに従って実行されます。 CREATE TASK を使用してタスクの作成時に、または ALTER TASK を使用してそれ以降にスケジュールを定義できます。
Snowflakeは スケジュールのタスクのうち1つのインスタンスのみが一度に実行されるようにします。次のスケジュールされた実行時間が発生したときにタスクがまだ実行されている場合、そのスケジュールされた時間はスキップされます。
Snowflakeは、サーバーレスタスクのコンピューティングリソースのサイズを自動的に変更およびスケールします。ユーザー管理タスクの場合、スケジュール内でワークロードを完了するために、タスクに適切なウェアハウスサイズを選択します。詳細については、 ウェアハウスのサイズの選択 をご参照ください。
タスクのスケジューリングと夏時間¶
タスク定義のcron式は、タイムゾーンの指定をサポートしています。標準時間から夏時間への移行(またはその逆)が発生するときにスケジュールされたタスクは、予期しない動作をする可能性があります。
例:
夏時間から標準時間への変更中に、米国/ロサンゼルスタイムゾーンの1 AM (
0 1 * * * America/Los_Angeles
)で開始するようにスケジュールされたタスクは、2回 実行されます。1AM、 そして1:59:59AMが現地時間の1:00:00AMにシフトしたときに再び実行されます。。標準時間への夏時間の変更中、米国/ロサンゼルスタイムゾーンの2 AM (
0 2 * * * America/Los_Angeles
)で開始するようにスケジュールされたタスクは、ローカル時間が1:59:59 AMから3:00:00 AMへシフトするため実行されません。
夏時間による予期しないタスクの実行を避けるため、次を検討します。
1 AMから3 AMの間にタスクが実行されるようにスケジュールを組まないでください。
毎年2回、1 AMから3 AMの間にスケジュールされたタスクのcron式を手動で調整し、時間の変化を補正します。
UTC など、夏時間を適用しない時刻形式を使用する。
トリガーされるタスク¶
トリガータスクを使用して、定義されたストリームに新しいデータがあるときだけ実行することができます。これにより、新しいデータがあるかどうか予測できないソースに頻繁にポーリングする一般的なユースケースが簡素化され、新しいデータがあるときに即座に処理することで遅延が短縮されます。
トリガーされたタスクは、定義されたストリームがデータを持ち、タスクの実行をトリガーするまで、計算リソースを使用しません。
トリガータスクの実行条件を以下に示します。
関連ストリームが追跡するテーブルでデータが変更されたとき。
タスクが最初に再開されたとき、ストリームにすでにあるデータを消費します。
トリガータスクは、ストリームが 古くなる のを防ぐために、12時間ごとにヘルスチェックを自動的に実行します。ストリームにデータがない場合、Snowflakeは計算リソースを使用せずに実行をスキップします。
トリガータスクの作成¶
新しいトリガータスクを作成するには SCHEDULE
パラメーターを省略し、 WHEN
句にターゲットストリームを含めます。
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;
既存のタスクをスケジュールタスクからトリガータスクに移行するには、 SCHEDULE
パラメーターの設定を解除します。既存のタスクには、 WHEN
句で定義されたターゲットストリームが必要です。
ALTER TASK task SUSPEND;
ALTER TASK task UNSET SCHEDULE;
ALTER TASK task RESUME;
以下は、トリガータスクパラメータの詳細と制限です。
デフォルトでは、トリガータスクは最大30秒ごとに実行されます。
USER_TASK_MINIMUM_TRIGGER_INTERVAL_IN_SECONDS
パラメーターを変更することで、より頻繁に、最大15秒ごとに実行することができます。トリガーされるタスクの
WHEN
条件は、データの変化に基づいていなければなりません。when条件は、
AND
およびOR
条件の使用をサポートします。AND
条件を指定すると、定義されたストリームのうち1つだけがデータを持っている場合、タスクがスキップされる可能性があります。
トリガータスクに関する考察¶
以下は、トリガータスクの管理、設定、監視の詳細です。
SHOW TASKS
とDESC TASK
出力では、SCHEDULE
プロパティはトリガータスクのためにNULL
を表示します。information_schemaスキーマとaccount_usageスキーマのtask_historyビューの出力では、SCHEDULED_FROM列がTRIGGERと表示されます。
ストリームが追跡しているストリームまたはテーブルが削除または再作成された場合、トリガータスクは自動的に中断します。テーブルまたはストリームが再作成された後、ユーザーは
ALTER TASK <task_name> RESUME
を実行してトリガー処理を再開することができます。
トリガータスクの制限¶
以下はトリガータスクの制限事項です。
データ共有、ディレクトリテーブル、外部テーブル、ハイブリッドテーブル上のストリームはサポートされていません。
サーバーレスタスクはサポートされていません。
手動によるタスクの実行¶
EXECUTE TASK コマンドは手動でタスクの単一実行をトリガーします。このSQLコマンドは、運用環境でSQLコードを実行できるようにする前に、新規または変更されたタスクとをテストするのに役立ちます。
このSQLコマンドは、スクリプトまたはストアドプロシージャで直接呼び出すことができます。さらに、このコマンドは、外部データパイプライン内でタスクの統合をサポートします。Snowflakeアカウントへの認証と SQL アクションの承認が可能なサードパーティのサービスは、 EXECUTE TASK コマンドを実行してタスクを実行できます。
タスク実行のバージョニング¶
内のスタンドアロンタスクが最初に再開されると、タスクの初期バージョンが設定されます。スタンドアロンタスクは、このバージョンを使用して実行されます。タスクが中断および変更された後、スタンドアロンタスクが再開されるか、手動で実行されると、新しいバージョンが設定されます。
タスクが中断されると、今後スケジュールされるタスクの実行はすべてキャンセルされます。現在実行中のタスクは現在のバージョンを使用して実行され続けます。
例えば、タスクが中断されているが、このタスクのスケジュールされた実行がすでに開始されているとします。タスクの所有者は、タスクの実行中に、タスクによって呼び出されたSQLコードを変更します。タスクが実行され、タスクが実行を開始したときに最新だったバージョンのタスクを使用して、定義内の SQL コードが実行されます。タスクが再開されるか、手動で実行されると、タスクの新しいバージョンが設定されます。この新しいバージョンには、タスクへの変更が含まれています。
タスクバージョンの履歴を取得するには、 TASK_VERSIONS Account Usageビュー (SNOWFLAKE 共有データベース内)をクエリします。
失敗した実行後のタスクの自動中断¶
必要に応じて、指定された数の連続したタスクの実行が失敗するかタイムアウトになると、タスクを自動的に中断します。この機能は、Snowflakeクレジットを消費するタスクを中断することでコストを削減しますが、タスクは完了しません。
タスクに SUSPEND_TASK_AFTER_NUM_FAILURES = num
パラメーターを設定します。パラメーターが 0
より大きい値に設定されると、タスクは指定された数の連続したタスクの実行が失敗するかタイムアウトになると、自動的に中断します。
CREATE TASK を使用してタスクの作成時に、または ALTER TASK を使用して後から、このパラメーターを定義できます。この値は Snowsight でも変更できます。
SUSPEND_TASK_AFTER_NUM_FAILURES パラメータは、アカウント、データベース、およびスキーマレベルでも設定できます。この設定は、変更されたオブジェクト内のすべてのタスクに適用されます。パラメーターをより低いレベルで明示的に設定すると、より高いレベルで設定されたパラメーター値が上書きされることに注意してください。
失敗したタスクの実行を自動的に再試行¶
タスクがFAILEDの状態で完了した場合、Snowflakeは自動的にタスクを再試行できます。タスクの自動再試行はデフォルトでは無効になっています。この機能を有効にするには、TASK_AUTO_RETRY_ATTEMPTSを0より大きい値に設定します。
エラー通知を使用するタスクは、再試行が失敗するたびに通知を送信します。詳細については、 エラー通知を送信するタスクの構成 をご参照ください。
アカウント、データベース、またはスキーマレベルで TASK_AUTO_RETRY_ATTEMPTS パラメーター値を明示的に設定すると、その変更は、次のスケジュールされた実行時に、変更されたオブジェクト内のタスクに適用されます(進行中の実行のすべての子タスクを含む)。
タスクのセッションパラメーターの設定¶
タスクを実行するセッションのセッションパラメーターを設定できます。これを実行するには、既存のタスクを変更し、 ALTER TASK ... SET session_parameter = value[, session_parameter = value ... ]
を使用して目的のパラメーター値を設定するか、 Snowsight でタスクを編集します。
タスクは、すべてのセッションパラメーターをサポートします。完全なリストについては、 パラメーター をご参照ください。タスクはアカウントやユーザーパラメーターをサポートしていません。
アカウントのタスク履歴を表示する¶
SQL または Snowsight を使用して、アカウントのタスク履歴を表示できます。 Snowsight でタスク履歴を表示するには、 Snowsight でタスクとタスクグラフを表示する をご参照ください。必要な権限については、 タスク履歴の表示 をご参照ください。
単一のタスクの実行履歴を表示するには、
- SQL:
TASK_HISTORY テーブル関数( Snowflake Information Schema 内)をクエリします。
現在スケジュールまたは実行されているタスクグラフ実行の詳細を表示するには、次を実行します。
- SQL:
CURRENT_TASK_GRAPHS テーブル関数( Snowflake Information Schema 内)をクエリします。
過去60分間に正常に実行された、失敗した、またはキャンセルされたタスクグラフの実行の履歴を表示するには、次を実行します。
- SQL:
COMPLETE_TASK_GRAPHS テーブル関数( Snowflake Information Schema 内)をクエリします。
COMPLETE_TASK_GRAPHS ビュー ビュー(Account Usage 内)をクエリします。
タスクのコスト¶
SQL コードを実行するためのタスク実行に関連するコストは、タスクのコンピューティングリソースのソースによって異なります。
- ユーザー管理のウェアハウス
Snowflakeは、タスク実行中のウェアハウスの使用量に基づいて、アカウントに クレジット使用状況 を請求します。これは、クライアントまたはSnowflakeウェブインターフェイスで、同じ SQL ステートメントを実行する際のウェアハウスの使用量と類似しています。秒あたりのクレジット請求と自動一時停止により、より大きなウェアハウスサイズから始めて、ワークロードに合わせてサイズを調整する柔軟性が得られます。
- サーバーレスコンピューティングモデル
Snowflakeは、コンピューティングリソースの使用量に基づいてアカウントに課金します。料金は、 コンピューティング時間 のクレジット使用状況で測定されたリソースの合計使用状況(クラウドサービスの使用状況を含む)に基づいて計算されます。計算時間はウェアハウスのサイズとクエリの実行時間によって変わります。詳細については、 サーバーレスのクレジット使用状況 または クエリ: タスクの総コスト をご参照ください。
Snowflakeはタスク履歴のタスク実行を分析し、サーバーレスのコンピューティングリソースの適切なサイズと数を動的に決定します。タスク実行を管理するためにSnowflakeが自動的にリソースを増減させると、タスク実行にかかるコストも比例して増減します。
タスクにより消費されたクレジット量を知る方法については、 Snowflakeサービス利用テーブル の「サーバーレス機能クレジットテーブル」をご参照ください。
タスクを作成する際にコストを最適化するために、以下のベストプラクティスを検討してください:
SCHEDULE、運転頻度を少なく設定してください。
自動サスペンドと自動再試行のパラメーターを使用して、失敗したタスクによるリソースの浪費を防ぎます。
サーバーレス機能の予算と支出制限のアラートを作成します。詳細については、 Budgetsを使用したクレジット使用状況のモニター をご参照ください。
特定のタスクに対する現在のクレジット使用状況を取得するには、 SERVERLESS_TASK_HISTORY テーブル関数をクエリします。
<database_name>
はタスクを含むデータベース、<task_name>
はタスクの名前です。SET num_credits = (SELECT SUM(credits_used) FROM TABLE(<database_name>.information_schema.serverless_task_history( date_range_start=>dateadd(D, -1, current_timestamp()), date_range_end=>dateadd(D, 1, current_timestamp()), task_name => '<task_name>') ) );
すべてのサーバーレスタスクに対する現在のクレジット使用状況を取得するには、 SERVERLESS_TASK_HISTORY ビューをクエリします。アカウント管理者として、次のステートメントを実行します。
SELECT start_time, end_time, task_id, task_name, credits_used, schema_id, schema_name, database_id, database_name FROM snowflake.account_usage.serverless_task_history ORDER BY start_time, task_id;
タスクセキュリティ¶
タスクを開始するには、適切なアクセス権限が必要です。このセクションでは、タスクへのアクセスを管理する方法について説明します。
タスクグラフの所有権については、 タスクグラフの所有権の管理 をご参照ください。
アクセス制御権限¶
タスクの作成¶
タスクを作成するには、少なくとも次の権限を持つロールが必要です。
オブジェクト |
権限 |
メモ |
---|---|---|
アカウント |
EXECUTE MANAGED TASK |
サーバーレスコンピューティングリソースに依存するタスクにのみ必要です。 |
データベース |
USAGE |
|
スキーマ |
USAGE, CREATE TASK |
|
ウェアハウス |
USAGE |
ユーザー管理のウェアハウスに依存するタスクにのみ必要です。 |
タスクの実行¶
タスクが作成された後、タスク所有者はタスクを実行するために次の権限を持つ必要があります。
オブジェクト |
権限 |
メモ |
---|---|---|
アカウント |
EXECUTE TASK |
ロールが所有するタスクを実行するために必要です。ロールの EXECUTE TASK 権限を取り消すと、それ以降、すべてのタスクの実行はそのロールで開始できなくなります。 |
アカウント |
EXECUTE MANAGED TASK |
サーバーレスコンピューティングリソースに依存するタスクにのみ必要です。 |
データベース |
USAGE |
|
スキーマ |
USAGE |
|
タスク |
USAGE |
|
ウェアハウス |
USAGE |
ユーザー管理のウェアハウスに依存するタスクにのみ必要です。 |
またロールは、タスクによって実行される SQL ステートメントの実行に必要な権限を持っている必要があります。
タスク履歴の表示¶
タスクを表示するには、以下の権限を1つ以上持っている必要があります。
ACCOUNTADMINロール。
タスクに対する OWNERSHIP 権限。
MONITOR EXECUTION グローバル権限。
タスクの再開または中断¶
タスクの所有者に加えて、タスクに対するOPERATE権限を持つロールは、タスクを一時停止または再開できます。このロールには、タスクを含むデータベースとスキーマに対するUSAGE権限が必要です。他の権限は必要ありません。
タスクが再開されると、Snowflakeは、タスクの所有者のロールが タスクの実行 にリストされている権限を持っていることを確認します。
タスクの権限を管理するためのカスタムロールの作成¶
カスタムロールを使用すると、Snowflakeの各アカウントまたはロールに付与された権限を簡単に管理できます。カスタムロールを使用するすべてのアカウントまたはロールの権限を変更するには、カスタムロールを更新します。または、カスタムロールを削除することで権限を取り消します。
タスクを作成するカスタムロールの作成¶
Snowflakeは、サーバーレスタスクとユーザー管理タスクを作成するために異なる権限を必要とします。
例えば、ユーザが管理するタスクを作成するには、 warehouse_task_creation
というカスタムロールを作成し、そのロールがタスクを作成できるウェアハウスで、 CREATE TASK と USAGE 権限をそのロールに付与します。
USE SYSADMIN;
CREATE ROLE warehouse_task_creation
COMMENT = 'This role can create user-managed tasks.';
USE ACCOUNTADMIN;
GRANT CREATE TASK
ON SCHEMA schema1
TO ROLE warehouse_task_creation;
GRANT USAGE
ON WAREHOUSE warehouse1
TO ROLE warehouse_task_creation;
サーバーレスタスクを作成できるロールの例として、 serverless_task_creation
というカスタムロールを作成し、そのロールに CREATE TASK 権限とアカウントレベル EXECUTE MANAGED TASK 権限を付与します。
USE SYSADMIN;
CREATE ROLE serverless_task_creation
COMMENT = 'This role can create serverless tasks.';
USE ACCOUNTADMIN;
GRANT CREATE TASK
ON SCHEMA schema1
TO ROLE serverless_task_creation;
GRANT EXECUTE MANAGED TASK ON ACCOUNT
TO ROLE serverless_task_creation;
タスクを管理するカスタムロールの作成¶
EXECUTE TASK権限を持つカスタムロールを作成するか、このカスタムロールを任意のタスク所有者ロールに付与して、自身のタスクの変更を許可できます。タスク所有者ロールがタスクを実行する機能を削除するには、このカスタムロールをタスク所有者ロールから取り消します。
たとえば、カスタムロール名 taskadmin
を作成し、そのロールに EXECUTE TASK 権限を付与します。 myrole
という名前のタスク所有者ロールに taskadmin
ロールを割り当てます。
USE ROLE securityadmin;
CREATE ROLE taskadmin;
新しいロールにアカウントレベルの権限を付与する前に、アクティブなロールをACCOUNTADMINに設定します。
USE ROLE accountadmin;
GRANT EXECUTE TASK, EXECUTE MANAGED TASK ON ACCOUNT TO ROLE taskadmin;
このロールが他のロールにロールを付与できることを示すために、アクティブなロールをSECURITYADMINに設定します。
USE ROLE securityadmin;
GRANT ROLE taskadmin TO ROLE myrole;
カスタムロールとロール階層の作成の詳細については、 アクセス制御の構成 をご参照ください。
タスク所有者ロールのドロップ¶
タスクの所有者ロールをドロップすると、タスクは所有者ロールをドロップしたロールに所有権を移します。タスクの所有権が移ると、タスクは自動的に一時停止され、新しい所有者がタスクを再開するまで新しい実行はスケジュールされません。
タスクの実行中にロールを削除すると、タスクの実行はドロップされたロールの下で完了します。
システムサービスタスクの実行¶
Snowflakeは、タスク所有者の権限でタスクを実行しますが、タスクの実行はユーザーに関連付けられていません。代わりに、各実行はシステムサービスによって実行されます。タスクは特定のユーザーから切り離され、ユーザーのドロップ、認証の問題が原因によるロック、ロールの削除などにより発生する可能性のある複雑さを回避します。
タスクの実行はユーザーから切り離されているため、タスクの実行のクエリ履歴はシステムサービスに関連付けられています。そのため、このサービスにはユーザー認証情報がなく、いかなる個人もそのIDを引き受けることはできません。システムサービスのアクティビティはアカウントに制限されています。他の操作に適用されるのと同じ暗号化保護および他のセキュリティプロトコルがこのサービスに組み込まれています。
タスク DDL¶
タスクの作成と管理をサポートするために、Snowflakeは次の一連の特別な DDL コマンドを提供します:
さらに、プロバイダーは、次の標準アクセス制御 DDL を使用して、ELT に必要なデータベースオブジェクトへのアクセスを表示、許可、または取り消すことができます。
タスク関数¶
タスクに関する情報の取得をサポートするために、Snowflakeは次の SQL 関数のセットを提供します: