Snowflakeタスク(Task)って何ができるの?
「毎日深夜に集計テーブルを更新したい」「1時間ごとにステージのファイルを取り込みたい」——こんな 定期実行ジョブ をSnowflakeの中だけで完結させたいと思ったことはありませんか?そんなときに登場するのが タスク (Task) です。
タスクは、SQL文やストアドプロシージャ、スクリプトを スケジュール実行 してくれるSnowflake標準の機能。AirflowやcronをわざわざEC2に立てなくても、Snowflake内部だけでバッチ処理パイプラインを組めるのがうれしいポイントです。

タスクの基本概念
タスク=「定刻になったら走る小さなロボット」
タスクは「いつ動くか(スケジュール)」と「何をするか(SQL本体)」をセットで定義したオブジェクトです。一度 CREATE TASK で作って RESUME すれば、あとはSnowflakeが勝手に時間通りに動かしてくれます。
2種類のスケジュール指定
- INTERVAL方式:
SCHEDULE = '5 MINUTE'のように間隔で指定 - CRON方式:
SCHEDULE = 'USING CRON 0 9 * * * Asia/Tokyo'のように曜日・時刻指定
タスクが使うコンピュート
タスク実行には2つの選択肢があります。
①自分で仮想ウェアハウスを指定する従来型、②Snowflakeが裏で自動的にリソースを割り当てる サーバーレスタスク。短い処理ならサーバーレスのほうが安く済むケースも多いです。
実際にタスクを作ってみよう
例1: 5分おきに集計テーブルを更新
CREATE OR REPLACE TASK refresh_sales_summary
WAREHOUSE = COMPUTE_WH
SCHEDULE = '5 MINUTE'
AS
INSERT INTO sales_summary
SELECT product_id, SUM(amount), CURRENT_TIMESTAMP()
FROM sales
WHERE created_at >= DATEADD('minute', -5, CURRENT_TIMESTAMP())
GROUP BY product_id;
例2: 平日朝9時にプロシージャを実行(CRON)
CREATE OR REPLACE TASK daily_etl_task
WAREHOUSE = ETL_WH
SCHEDULE = 'USING CRON 0 9 * * MON-FRI Asia/Tokyo'
AS
CALL run_daily_etl();
作成した直後のタスクは SUSPENDED(停止状態) なので、必ず以下で開始しましょう。
ALTER TASK refresh_sales_summary RESUME;

タスクツリー: 複数タスクをつなげてパイプライン化
タスクの強みは 親子関係(タスクツリー / DAG) を作れること。AFTER 句で前のタスクを指定すれば、「Aが終わったらBを実行」という依存関係を簡単に表現できます。
CREATE OR REPLACE TASK child_task
WAREHOUSE = ETL_WH
AFTER parent_task
AS
CALL aggregate_step();
これで、ロード→クレンジング→集計のような ETLパイプライン がSnowflake内で完結します。Snowpipeでファイルを取り込み、タスクで集計、という組み合わせも王道パターンです。
実行履歴を確認するには
SELECT *
FROM TABLE(INFORMATION_SCHEMA.TASK_HISTORY())
ORDER BY scheduled_time DESC
LIMIT 20;
よくあるユースケースと注意点
- 定期集計: 売上サマリやKPIテーブルの更新
- データ品質チェック: 毎朝の異常値検知
- 古いデータの削除: 90日以上前のログを定期的に
DELETE - 外部関数呼び出し: 通知やメール送信
注意点として、タスクは作成直後は止まっています。RESUME 忘れは初心者あるある。また、リアルタイム性が必要なら動的テーブルのほうが向いていることも覚えておきましょう。
まとめ
Snowflakeのタスクを使えば、外部スケジューラなしで 定期実行ジョブ を構築できます。CREATE TASK + SCHEDULE + RESUME の3点セットで、まずは1つ作ってみるのがおすすめ。慣れてきたらタスクツリーでパイプラインを組み、Snowflake内でETLを完結させましょう!
参考リンク
関連記事
- Snowflakeストアドプロシージャ入門|SQLとJavaScript版の使い方 – タスクから呼び出す処理本体を作るならまずこちら。
- Snowflake動的テーブル入門|自動更新されるテーブルの仕組み – タスクと比較される自動更新の仕組み。使い分けの参考に。
- Snowpipeで自動取り込み!ファイルアップロードを検知する方法 – タスクと組み合わせるとETLパイプラインが完成します。
- Snowflakeウェアハウスとは?サイズと使い分けを初心者向けに解説 – タスクで使うコンピュートの基礎知識。
- Snowflake UDF入門|SQL・JavaScript・Pythonで関数を自作する方法 – タスク内で活用できる自作関数の作り方。

