タスクの紹介¶
タスクを使用して、データパイプラインのビジネスプロシージャを自動化、スケジュール、最適化します。
Snowflakeでは、タスクは以下のいずれかのタイプの関数を実行できます。
単一の SQL ステートメント。
ストアドプロシージャの呼び出し。
Snowflake Scriptingを使用したプロシージャ型ロジック
レポートの作成や期間表のメンテナンスのような複雑なプロシージャでは、 タスクグラフ を作成してタスクを組み合わせます。Extract, Load, Transform (ELT) ワークフローのように、新しいデータや変更されたデータを継続的に処理するには、トリガータスクを使用して、 テーブルストリーム とタスクを組み合わせます。
注釈
テーブルスキーマの進化 はタスクでサポートされていません。
このトピックの内容:
タスク作成ワークフローの概要¶
以下の手順でコマンドを実行できる タスク管理者ロール を作成します。
CREATE TASK を使って新しいタスクを定義します。タスクはデフォルトで一時停止されています。タスクパラメーターのセットに関する情報は、以下をご参照ください。
EXECUTE TASK を使ってタスクを手動でテストします。
タスクを変更するか、 ALTER TASK ... RESUME を使って継続的に実行させます。タスクの実行に関する情報は、こちらをご参照ください。
コンピューティングリソース¶
タスクは、 SQL、Python、Java、Scala 関数、およびストアドプロシージャを実行するためのコンピュートリソースを必要とします。各タスクについて、 サーバーレスタスク を作成して Snowflake にリソースを管理させるか、 ユーザー管理型仮想ウェアハウスモデル を使用して自分で管理するかを選択できます。
サーバーレスタスク¶
このモデルでは、タスクはSnowflakeが管理するコンピュート上で実行されます。Snowflakeは、各ワークロードに必要なリソースのサイズを自動的に変更します。
定期的に実行されるタスクは、サーバーレス・コンピューティング・モデルに適した候補です。このモデルは、既存のタスクがほとんど実行されていないウェアハウスが基になる場合にも推奨されます。
Snowflakeは、同じタスクの直近の実行に関する統計の動的分析に基づいて、指定された実行に最適なコンピュートリソースのサイズを決定します。
制限事項¶
サーバーレスタスクの最大コンピュートサイズは X2LARGE 仮想ウェアハウス に相当します。
サーバーレス・コンピュート・モデルを使ったタスクの作成¶
CREATE TASK または ALTER TASK を使用する場合は、 WAREHOUSE パラメーターを省略します。
タスクを実行するロールは、グローバル EXECUTE MANAGED TASK 権限を持っている必要があります。タスクのアクセス制御要件の詳細については、 タスクセキュリティ をご参照ください。
以下のパラメーターをセットすることで、サーバーレスタスクのコストとパフォーマンスをある程度コントロールすることができます。
SERVERLESS_TASK_MAX_STATEMENT_SIZE:想定外のコストを防ぐため、ウェアハウスの最大サイズを設定します。
SERVERLESS_TASK_MIN_STATEMENT_SIZE:予測可能なパフォーマンスのためのウェアハウスの最小サイズ。
TARGET_COMPLETION_INTERVAL:タスクの完了時間を指定します。
これらのセットが指定された場合、優先順位は以下のようになります。
SERVERLESS_TASK_MAX_STATEMENT_SIZE
SERVERLESS_TASK_MIN_STATEMENT_SIZE
TARGET_COMPLETION_INTERVAL
Snowflakeがサーバーレスのコンピュートリソースを推定する方法¶
Snowflakeは、ターゲット時間枠と以前のタスク実行のパフォーマンスに基づいて、タスクを完了するために必要な計算リソースを自動的に推定します。
ターゲットの時間枠は TARGET_COMPLETION_INTERVAL でセットできます。この値がセットされていない場合、Snowflakeはサーバーレスのコンピュートリソースのサイズを変更して、次の実行スケジュール時刻までに完了するようにします。
タスクが完了すると、Snowflakeは必要な計算リソースを次のように見積もります。
例¶
例1:1 時間ごとに実行するサーバーレスタスクを作成し、完了間隔を 120 分にターゲットします。
CREATE TASK SCHEDULED_T1 SCHEDULE='USING CRON 0 * * * * America/Los_Angeles'
TARGET_COMPLETION_INTERVAL='120 MINUTE' AS SELECT 1;
TARGET_COMPLETION_INTERVAL に比較的長い継続時間をセットすることで、タスクの実行時間が長くなっても構わないことを示します。Snowflake は、タスクの実行が指定した TARGET_COMPLETION_INTERVAL 内で完了するように、サーバーレスコンピュートのサイズを自動的に調整します。
例2: 1時間ごとに実行するサーバーレスタスクを作成し、完了時間を10分にターゲットします。
CREATE TASK SCHEDULED_T2 SCHEDULE='USING CRON 0 * * * * UTC'
TARGET_COMPLETION_INTERVAL='10 MINUTE'
SERVERLESS_TASK_MAX_STATEMENT_SIZE='LARGE'
AS SELECT 1;
TARGET_COMPLETION_INTERVAL に比較的短い時間をセットすることで、タスクを早く完了させることを好むことを示しています。Snowflakeは、 SERVERLESS_TASK_MAX_STATEMENT_SIZE に達するまで、タスクの実行が指定された TARGET_COMPLETION_INTERVAL 内で完了するように、サーバーレスコンピュートのサイズを自動的に調整します。
例3: 1日1回、ターゲット完了間隔と最小・最大ウェアハウスサイズの範囲内でスケジュールされるサーバーレスタスクを作成します。
CREATE TASK SCHEDULED_T3 SCHEDULE='USING CRON 0 0 * * * UTC'
TARGET_COMPLETION_INTERVAL='180 M'
SCHEDULING_MODE = 'FLEXIBLE'
SERVERLESS_TASK_MIN_STATEMENT_SIZE='MEDIUM' SERVERLESS_TASK_MAX_STATEMENT_SIZE='LARGE' AS SELECT 1;
この構成では、サーバーレスタスクは少なくとも中規模ウェアハウスで1日1回深夜に実行され、 TARGET_COMPLETION_INTERVAL は3時間です。Snowflakeは、 SERVERLESS_TASK_MAX_STATEMENT_SIZE に達するまで、タスクの実行が指定された TARGET_COMPLETION_INTERVAL 内で完了するように、サーバーレスコンピュートのサイズを自動的に調整します。SCHEDULING_MODE をフレキシブルにセットすることで、タスクは日中いつでも開始できます。
例4: 1日1回、ターゲット完了間隔なしでスケジュールされるサーバーレスタスクを作成します。
CREATE TASK SCHEDULED_T4 SCHEDULE='USING CRON 0 0 * * * UTC'
SERVERLESS_TASK_MAX_STATEMENT_SIZE='LARGE' AS SELECT 1;
この構成では、サーバーレスタスクは1日1回深夜に実行されます。一連のタスク実行時間が次のスケジュール時間までに完了しない場合、Snowflakeは自動的にサーバーレスコンピュートサイズを設定し、 SERVERLESS_TASK_MAX_STATEMENT_SIZE に達するまで指定された SCHEDULE 内でタスク実行が完了するようにします。
パラメーターと構文の詳細については、 CREATE TASK と ALTER TASK をご参照ください。
ユーザー管理型仮想ウェアハウスモデル¶
このモデルでは、各ワークロードに使用されるコンピュートリソースを完全に制御できます。
このモデルは、コンピュートリソースの予測不可能な負荷を手動で管理したい場合に推奨されます。 マルチ・クラスタ・ウェアハウス 自動サスペンドおよび自動再開 を有効にすると、クレジット消費を抑えることもできます。
ウェアハウスのサイズの選択¶
既存のウェアハウスを使用して個々のタスクにコンピューティングリソースを提供することを選択する場合は、 ウェアハウスに関する考慮事項 で説明されているベストプラクティスに従ってください。タスクに必要なコンピューティングクラスタを理解するには、ウェアハウスのサイズとクラスタリングに基づいて異なるウェアハウスを使用して、単一のタスクまたは タスクグラフ の平均実行時間を分析します。ウェアハウスが複数のプロセスで共有されているかどうかも考慮する必要があります。
タスクの平均実行時間を分析するには、 TASK_HISTORY アカウント使用状況表示 をクエリします。タスクのスケジュールされた時間と完了した時間の平均差は、タスクの予想される平均実行時間です。この差には、他のプロセスがウェアハウスのコンピューティングリソースを使用している間、タスクがキューに入っていた時間も含まれます。
タスクグラフの場合、先行タスクの実行が完了し、子タスクが起動された後、短いラグがあります。ウェアハウスの大きさは、複数の子タスクが同時に実行できる大きさを選びます。
次の図は、20秒間キューに入れられた単一のタスクが40秒間実行された、1分間のウィンドウを示しています。これは、タスクがスケジュールされてから最初の20秒間、他のプロセスがウェアハウスのリソースを使用していたことを意味します。

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

タスクの実行¶
このセクションでは、タスクがスケジュールされ実行されるさまざまな方法、タスクの失敗がどのように処理されるか、タスクのバージョンがどのように決定されるかについて説明します。
タスクのスケジュール¶
通常、タスクはスケジュールに基づいて実行されます。
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は計算リソースを使用せずに実行をスキップします。
トリガータスクの作成¶
CREATE TASK を使用し、 WHEN
句を使用してターゲット・ストリームを定義します。(SCHEDULE
パラメーターは含めないでください)。
以下のいずれかを選択して、タスク の計算リソースを割り当てます。
リソースを手動で管理(ユーザー管理ウェアハウスタスク)するには、
WAREHOUSE
パラメーターを追加します。Snowflakeによるリソース管理(サーバーレスタスク)を許可するには、
TARGET_COMPLETION_INTERVAL
パラメーターを追加します。Snowflakeは必要なリソースを見積もり、この時間でタスクを完了できるように調整します。
スケジュールタスクからトリガータスクへの移行¶
タスクを中断し、 SCHEDULE
パラメーターの設定を解除して、タスクを再開します。既存のタスクには、 WHEN
句で定義されたターゲットストリームが必要です。
ALTER TASK task SUSPEND;
ALTER TASK task UNSET SCHEDULE;
ALTER TASK task RESUME;
ユーザー管理のトリガータスクからサーバーレスのトリガータスクへの移行¶
タスクを中断します。 WAREHOUSE
パラメーターを削除し、 TARGET_COMPLETION_INTERVAL
パラメーターを追加します。タスクを再開します。
トリガータスクに関する考察¶
SHOW TASKS
とDESC TASK
出力では、SCHEDULE
プロパティはトリガータスクのためにNULL
を表示します。information_schemaスキーマとaccount_usageスキーマのtask_historyビューの出力では、SCHEDULED_FROM列がTRIGGERと表示されます。
複数のデータストリームを扱う場合、
WHEN … AND
とWHEN … OR
という条件パラメーターを使用することで、タスクの開始タイミングを管理できます。
トリガータスクの制限¶
デフォルトでは、トリガータスクは最大30秒ごとに実行されます。USER_TASK_MINIMUM_TRIGGER_INTERVAL_IN_SECONDS パラメーターを変更することで、より頻繁に、最大10秒ごとに実行することができます。
ディレクトリテーブル、外部テーブル、ハイブリッドテーブルのストリームはサポートされていません。
トリガータスクの例¶
例1:2 つのス ト リ ームのいずれかでデータが変更されるときに実行されるユーザー管理タスク を作成します。
CREATE TASK my_task
WHEN SYSTEM$STREAM_HAS_DATA('my_return_stream')
OR SYSTEM$STREAM_HAS_DATA('my_order_stream')
WAREHOUSE = my_warehouse
AS
INSERT INTO customer_activity
SELECT customer_id, return_total, return_date, ‘return’
FROM my_return_stream
UNION ALL
SELECT customer_id, order_total, order_date, ‘order’
FROM my_order_stream;
例2:2つの異なるデータストリームでデータ変更が検出されたときに実行するタスクを作成します。このタスクは AND 条件を使用するため、2つのストリームの一方にしか新しいデータがない場合、タスクはスキップされます。
TARGET_COMPLETION_INTERVAL は 120 分であるため、Snowflake はこの時間内にタスクを完了するために必要なコンピュートリソースを見積もり、調整します。
CREATE TASK triggeredTask
WHEN SYSTEM$STREAM_HAS_DATA('orders_stream')
TARGET_COMPLETION_INTERVAL='120 MINUTES'
AS
INSERT INTO completed_promotions
SELECT order_id, order_total, order_time, promotion_id
FROM orders_stream
WHERE promotion_id IS NOT NULL;
タスクを手動で実行¶
CREATE TASK または ALTER TASK を使って新しいタスクを作成し、タスクパラメーターをセットします。
タスクの1回の実行をトリガーするには、 EXECUTE TASK を使用します。この 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.';
from snowflake.core.role import Role
root.session.use_role("SYSADMIN")
my_role = Role(
name="warehouse_task_creation",
comment="This role can create user-managed tasks."
)
root.roles.create(my_role)
USE ACCOUNTADMIN;
GRANT CREATE TASK
ON SCHEMA schema1
TO ROLE warehouse_task_creation;
from snowflake.core.role import Securable
root.session.use_role("ACCOUNTADMIN")
root.roles['warehouse_task_creation'].grant_privileges(
privileges=["CREATE TASK"], securable_type="schema", securable=Securable(name='schema1')
)
GRANT USAGE
ON WAREHOUSE warehouse1
TO ROLE warehouse_task_creation;
from snowflake.core.role import Securable
root.roles['warehouse_task_creation'].grant_privileges(
privileges=["USAGE"], securable_type="warehouse", securable=Securable(name='warehouse1')
)
サーバーレスタスクを作成できるロールの例として、 serverless_task_creation
というカスタムロールを作成し、そのロールに CREATE TASK 権限とアカウントレベル EXECUTE MANAGED TASK 権限を付与します。
USE SYSADMIN;
CREATE ROLE serverless_task_creation
COMMENT = 'This role can create serverless tasks.';
from snowflake.core.role import Role
root.session.use_role("SYSADMIN")
my_role = Role(
name="serverless_task_creation",
comment="This role can create serverless tasks."
)
root.roles.create(my_role)
USE ACCOUNTADMIN;
GRANT CREATE TASK
ON SCHEMA schema1
TO ROLE serverless_task_creation;
from snowflake.core.role import Securable
root.session.use_role("ACCOUNTADMIN")
root.roles['serverless_task_creation'].grant_privileges(
privileges=["CREATE TASK"], securable_type="schema", securable=Securable(name='schema1')
)
GRANT EXECUTE MANAGED TASK ON ACCOUNT
TO ROLE serverless_task_creation;
root.roles['serverless_task_creation'].grant_privileges(
privileges=["EXECUTE MANAGED TASK"], securable_type="account"
)
タスクを管理するカスタムロールの作成¶
EXECUTE TASK権限を持つカスタムロールを作成するか、このカスタムロールを任意のタスク所有者ロールに付与して、自身のタスクの変更を許可できます。タスク所有者ロールがタスクを実行する機能を削除するには、このカスタムロールをタスク所有者ロールから取り消します。
たとえば、カスタムロール名 taskadmin
を作成し、そのロールに EXECUTE TASK 権限を付与します。 myrole
という名前のタスク所有者ロールに taskadmin
ロールを割り当てます。
USE ROLE securityadmin;
CREATE ROLE taskadmin;
from snowflake.core.role import Role
root.session.use_role("securityadmin")
root.roles.create(Role(name="taskadmin"))
新しいロールにアカウントレベルの権限を付与する前に、アクティブなロールをACCOUNTADMINに設定します。
USE ROLE accountadmin;
GRANT EXECUTE TASK, EXECUTE MANAGED TASK ON ACCOUNT TO ROLE taskadmin;
root.session.use_role("accountadmin")
root.roles['taskadmin'].grant_privileges(
privileges=["EXECUTE TASK", "EXECUTE MANAGED TASK"], securable_type="account"
)
このロールが他のロールにロールを付与できることを示すために、アクティブなロールをSECURITYADMINに設定します。
USE ROLE securityadmin;
GRANT ROLE taskadmin TO ROLE myrole;
from snowflake.core.role import Securable
root.session.use_role("securityadmin")
root.roles['myrole'].grant_role(role_type="ROLE", role=Securable(name='taskadmin'))
カスタムロールとロール階層の作成の詳細については、 アクセス制御の構成 をご参照ください。
タスク所有者ロールのドロップ¶
タスクの所有者ロールをドロップすると、タスクは所有者ロールをドロップしたロールに所有権を移します。タスクの所有権が移ると、タスクは自動的に一時停止され、新しい所有者がタスクを再開するまで新しい実行はスケジュールされません。
タスクの実行中にロールを削除すると、タスクの実行はドロップされたロールの下で完了します。
システムサービスタスクの実行¶
Snowflakeは、タスク所有者の権限でタスクを実行しますが、タスクの実行はユーザーに関連付けられていません。代わりに、各実行はシステムサービスによって実行されます。タスクは特定のユーザーから切り離され、ユーザーのドロップ、認証の問題が原因によるロック、ロールの削除などにより発生する可能性のある複雑さを回避します。
タスクの実行はユーザーから切り離されているため、タスクの実行のクエリ履歴はシステムサービスに関連付けられています。そのため、このサービスにはユーザー認証情報がなく、いかなる個人もそのIDを引き受けることはできません。システムサービスのアクティビティはアカウントに制限されています。他の操作に適用されるのと同じ暗号化保護および他のセキュリティプロトコルがこのサービスに組み込まれています。
タスク DDL¶
タスクの作成と管理をサポートするために、Snowflakeは以下の特別な DDL 操作セットを提供します。
さらに、プロバイダーは、次の標準アクセス制御 DDL を使用して、ELT に必要なデータベースオブジェクトへのアクセスを表示、許可、または取り消すことができます。
DatabaseRoleResource メソッド:
grant_future_privileges
grant_privileges
grant_privileges_on_all
grant_role
iter_future_grants_to
iter_grants_to
revoke_future_privileges
revoke_grant_option_for_future_privileges
revoke_grant_option_for_privileges
revoke_grant_option_for_privileges_on_all
revoke_privileges
revoke_privileges_on_all
revoke_role
RoleResource (アカウントロール) メソッドを使用します:
grant_future_privileges
grant_privileges
grant_privileges_on_all
grant_role
iter_future_grants_to
iter_grants_of
iter_grants_on
iter_grants_to
revoke_future_privileges
revoke_grant_option_for_future_privileges
revoke_grant_option_for_privileges
revoke_grant_option_for_privileges_on_all
revoke_privileges
revoke_privileges_on_all
revoke_role
UserResource メソッド:
grant_role
iter_grants_to
revoke_role
タスク関数¶
タスクに関する情報の取得をサポートするために、Snowflakeは次の関数のセットを提供します。