Snowflake

Snowflake Serverless Tasks 完全ガイド: ウェアハウス不要のタスク実行

2026-03-26
更新: 2026-03-27
NicheeLab編集部

Snowflake Serverless Tasksは、仮想ウェアハウスを事前に作成・管理することなく、SnowflakeがSQL文やストアドプロシージャを自動実行するタスク基盤です。 コンピュートの起動・サイジング・停止をSnowflakeが自動管理するため、運用オーバーヘッドが大幅に削減されます。

Serverless Tasks vs User-managed Tasks

SnowflakeのタスクにはServerless Tasks(ウェアハウス不要)とUser-managed Tasks(WAREHOUSE句でウェアハウスを指定)の2種類があります。 違いを正確に理解することが試験対策でも実務設計でも重要です。

比較項目Serverless TasksUser-managed Tasks
ウェアハウス指定不要(USER_TASK_MANAGED_INITIAL_WAREHOUSE_SIZEで初期サイズのみ指定)WAREHOUSE = <name> で明示指定が必須
サイズ自動調整Snowflakeが実行履歴に基づき自動リサイズ手動でALTER WAREHOUSE ... SET WAREHOUSE_SIZEが必要
課金モデルServerless Credit(1.5倍の倍率)× 実行時間ウェアハウスのCredit × 稼働時間(最低60秒課金)
アイドルコスト実行時間のみ課金(アイドルコスト0)AUTO_SUSPENDまでのアイドル時間も課金
起動遅延Snowflake管理のプールから迅速起動ウェアハウスがSUSPENDED状態だとresume待ち
必要権限EXECUTE MANAGED TASK(アカウントレベル)USAGE on WAREHOUSE + CREATE TASK
適するケース低頻度バッチ、短時間タスク、個別タスク常時稼働パイプライン、大規模長時間バッチ

Serverless Taskの作成SQL

Serverless TaskではWAREHOUSE句を省略し、代わりにUSER_TASK_MANAGED_INITIAL_WAREHOUSE_SIZEパラメータでコンピュートの初期サイズを指定します。

-- Serverless Task の作成
CREATE OR REPLACE TASK etl_daily_aggregate
  USER_TASK_MANAGED_INITIAL_WAREHOUSE_SIZE = 'MEDIUM'
  SCHEDULE = 'USING CRON 0 2 * * * Asia/Tokyo'
  ERROR_ON_NONDETERMINISTIC_MERGE = FALSE
AS
  MERGE INTO analytics.daily_summary AS tgt
  USING (
    SELECT
      event_date,
      COUNT(*) AS event_count,
      SUM(revenue) AS total_revenue
    FROM raw.events
    WHERE event_date = CURRENT_DATE() - 1
    GROUP BY event_date
  ) AS src
  ON tgt.event_date = src.event_date
  WHEN MATCHED THEN UPDATE SET
    event_count = src.event_count,
    total_revenue = src.total_revenue
  WHEN NOT MATCHED THEN INSERT
    (event_date, event_count, total_revenue)
    VALUES (src.event_date, src.event_count, src.total_revenue);

対比として、User-managed Taskは以下のようにWAREHOUSE句を指定します。

-- User-managed Task の作成
CREATE OR REPLACE TASK etl_daily_aggregate_wh
  WAREHOUSE = etl_warehouse
  SCHEDULE = 'USING CRON 0 2 * * * Asia/Tokyo'
AS
  MERGE INTO analytics.daily_summary AS tgt
  USING (...) AS src
  ON tgt.event_date = src.event_date
  WHEN MATCHED THEN UPDATE SET ...
  WHEN NOT MATCHED THEN INSERT ...;

タスクDAG(依存関係チェーン)

Serverless TasksでもAFTER句でタスクの依存関係を定義してDAGを構築できます。 ルートタスク(SCHEDULEを持つ最上位タスク)の実行完了後に子タスクが順次起動します。

-- ルートタスク(Serverless)
CREATE OR REPLACE TASK dag_root
  USER_TASK_MANAGED_INITIAL_WAREHOUSE_SIZE = 'SMALL'
  SCHEDULE = 'USING CRON 0 3 * * * Asia/Tokyo'
AS
  INSERT INTO staging.raw_data
  SELECT * FROM external_table WHERE loaded = FALSE;

-- 子タスク1(Serverless)
CREATE OR REPLACE TASK dag_transform
  USER_TASK_MANAGED_INITIAL_WAREHOUSE_SIZE = 'MEDIUM'
  AFTER dag_root
AS
  INSERT INTO analytics.transformed
  SELECT ... FROM staging.raw_data WHERE ...;

-- 子タスク2(Serverless)
CREATE OR REPLACE TASK dag_quality_check
  USER_TASK_MANAGED_INITIAL_WAREHOUSE_SIZE = 'XSMALL'
  AFTER dag_transform
AS
  CALL quality_check_sp('analytics.transformed');

-- DAGの起動(ルートからRESUME)
ALTER TASK dag_quality_check RESUME;
ALTER TASK dag_transform RESUME;
ALTER TASK dag_root RESUME;

権限設計

Serverless Tasksを使用するには、タスクの所有ロールに対して アカウントレベルのEXECUTE MANAGED TASK権限を付与する必要があります。 User-managed TasksのUSAGE ON WAREHOUSE権限とは異なる権限体系です。

-- Serverless Task用の権限付与
GRANT EXECUTE MANAGED TASK ON ACCOUNT
  TO ROLE etl_role;

-- タスク作成権限(Serverless/User-managed共通)
GRANT CREATE TASK ON SCHEMA analytics
  TO ROLE etl_role;

-- User-managed Taskの場合はウェアハウス権限が必要
GRANT USAGE ON WAREHOUSE etl_warehouse
  TO ROLE etl_role;

コスト見積もり

Serverless Tasksのコスト履歴はSNOWFLAKE.ACCOUNT_USAGE.SERVERLESS_TASK_HISTORYビューで確認できます。 User-managed TasksのコストはWAREHOUSE_METERING_HISTORYから確認します。

-- Serverless Taskのクレジット消費を日別に集計
SELECT
  DATE_TRUNC('DAY', START_TIME) AS exec_date,
  TASK_NAME,
  COUNT(*) AS exec_count,
  SUM(CREDITS_USED) AS total_credits
FROM SNOWFLAKE.ACCOUNT_USAGE.SERVERLESS_TASK_HISTORY
WHERE START_TIME >= DATEADD('DAY', -30, CURRENT_TIMESTAMP())
GROUP BY exec_date, TASK_NAME
ORDER BY total_credits DESC;

-- タスクの実行履歴を確認
SELECT *
FROM TABLE(INFORMATION_SCHEMA.TASK_HISTORY(
  TASK_NAME => 'ETL_DAILY_AGGREGATE',
  SCHEDULED_TIME_RANGE_START => DATEADD('DAY', -7, CURRENT_TIMESTAMP())
))
ORDER BY SCHEDULED_TIME DESC;

運用モニタリング

タスクが失敗した場合はALERT機能やNotification Integrationと組み合わせて検知します。 TASK_HISTORYのSTATE列が'FAILED'の場合にERROR_MESSAGEから原因を特定します。

-- 直近の失敗タスクを抽出
SELECT
  NAME,
  SCHEDULED_TIME,
  STATE,
  ERROR_CODE,
  ERROR_MESSAGE
FROM TABLE(INFORMATION_SCHEMA.TASK_HISTORY(
  RESULT_LIMIT => 100
))
WHERE STATE = 'FAILED'
ORDER BY SCHEDULED_TIME DESC;

試験で問われるポイント

  • Serverless TaskではWAREHOUSE句を指定せず、USER_TASK_MANAGED_INITIAL_WAREHOUSE_SIZEを使う
  • 必要な権限はEXECUTE MANAGED TASK ON ACCOUNT(User-managedのUSAGE ON WAREHOUSEとは異なる)
  • Serverless Credit倍率(1.5倍)だがアイドルコスト0の課金特性
  • AFTER句によるDAG構築はServerless/User-managed両方で可能
  • コスト確認はSERVERLESS_TASK_HISTORYビュー

問題で確認

SnowPro

問題 1

Serverless Taskを作成する際、正しいSQL構文はどれですか?

  1. CREATE TASK t1 WAREHOUSE = compute_wh USER_TASK_MANAGED_INITIAL_WAREHOUSE_SIZE = 'SMALL' SCHEDULE = '5 MINUTE' AS SELECT 1;
  2. CREATE TASK t1 USER_TASK_MANAGED_INITIAL_WAREHOUSE_SIZE = 'SMALL' SCHEDULE = '5 MINUTE' AS SELECT 1;
  3. CREATE TASK t1 SERVERLESS = TRUE WAREHOUSE_SIZE = 'SMALL' SCHEDULE = '5 MINUTE' AS SELECT 1;
  4. CREATE TASK t1 COMPUTE_POOL = serverless_pool SCHEDULE = '5 MINUTE' AS SELECT 1;

正解: B

Serverless TaskではWAREHOUSE句を省略し、USER_TASK_MANAGED_INITIAL_WAREHOUSE_SIZEパラメータで初期コンピュートサイズを指定します。AのようにWAREHOUSEとUSER_TASK_MANAGED_INITIAL_WAREHOUSE_SIZEを同時に指定することはできません。SERVERLESS = TRUEやCOMPUTE_POOLは存在しないパラメータです。

よくある質問

Serverless TasksのコストはUser-managed Tasksと比べて高いですか?

Serverless Tasksは1.5倍のServerless Credit倍率が適用されますが、ウェアハウスの待機コスト(アイドル時間や起動の最低1分課金)が不要です。タスクの実行頻度が低い場合(例:1時間に1回、実行時間10秒程度)はServerlessの方がトータルコストが低くなるケースが多く、反対に常時バッチが走り続けるパイプラインではUser-managedの方が有利です。SERVERLESS_TASK_HISTORYビューでクレジット消費を確認し判断します。

USER_TASK_MANAGED_INITIAL_WAREHOUSE_SIZEはどのサイズを選べばよいですか?

このパラメータはServerless Taskが初回実行時に使用するコンピュートサイズの目安です。XSMALL〜XXLARGEを指定でき、Snowflakeはその後の実行履歴に基づいてサイズを自動調整します。初期値は処理対象のデータ量で決めるのが基本で、数百万行以下のINSERT/MERGEならXSMALL〜SMALL、数十億行規模のGROUP BY集計ならMEDIUM〜LARGEが目安です。

Serverless Tasksでタスクツリー(DAG)は使えますか?

はい。Serverless Tasksでも通常のタスクと同様にAFTERキーワードで親子関係を定義してDAGを構築できます。ルートタスクをServerlessにし、子タスクもServerlessまたはUser-managedで混在させることが可能です。ルートタスクにSCHEDULEを設定し、ALTER TASK ... RESUMEで起動する点はUser-managed Tasksと同じです。

この記事で学んだ内容を問題で確認しましょう

16,000問以上の問題で実力チェック

無料で問題を解いてみる
この記事の著者

NicheeLab編集部

データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。


関連記事
Snowflake

Snowflake資格一覧|全11試験(SnowPro)の難易度・費用

Snowflake認定資格(SnowPro)全11試験の一覧・難易度・費用・出題範囲を徹底解説。...

Snowflake

Snowflake試験の難易度ランキング|全11資格を徹底比較

Snowflake(SnowPro)認定全11試験の難易度をランキング形式で比較。学習時間・合格に必要なスキルから分析。...

Snowflake

Snowflake資格の勉強方法|効率的な学習ルートと合格のコツ

Snowflake認定資格(SnowPro)に最短で合格するための勉強方法。公式リソース・学習スケジュールを徹底ガイド。...

Snowflake

SnowPro Core試験完全解説|出題範囲・問題例・合格戦略

SnowPro Core Certification(COF-C03)を徹底解説。出題範囲・100問の試験形式・合格ライ...

Snowflake

SnowPro Platform Associate完全解説|入門試験の攻略

SnowPro Associate: Platform Certification(SOL-C01)を徹底解説。最も簡単...

Snowflakeの記事一覧 (102件)
© 2026 NicheeLab All rights reserved.