【Snowflake】Snowflake ~ Task ~

■ はじめに

Snowflake の タスク(Task) に調べてみた

目次

【1】タスク(Task)
【2】使用上の注意
【3】SQL文
 1)CREATE TASK
 2)ALTER TASK
 3)SHOW TASKS
【4】サンプル
 例1:Hello world

【1】タスク(Task)

* Snowflakeにおいて、以下を実行可能
 + 単一の SQL ステートメント
 + ストアドプロシージャへの呼び出し
 + Snowflakeスクリプト を使用した手続き型ロジック

* タスクを テーブルストリーム(※1) と組み合わせて、
 連続して ELT ワークフローを実行し、処理可能

https://docs.snowflake.com/ja/user-guide/tasks
https://docs.snowflake.com/ja/user-guide/tasks-intro

【2】使用上の注意

* あくまで「【単一】のSQL」で、1つのSQL文しか実行できない
 => 複数なら、「ストアドプロシージャ」などで対応する

* CREATE TASKした際は、状態「suspended(一時停止)」なので
 再開したい場合は、ALTER TASK などを実行する必要がある

【3】SQL

1)CREATE TASK

* タスクの作成

https://docs.snowflake.com/ja/sql-reference/sql/create-task
SCHEDULE

[1] USING CRON expr time_zone:クローン形式
[2] num MINUTE:分刻み

WHEN boolean_expr

* タスクがトリガーされると、式の条件を検証して、実行するかどうかを決定
 => 式の条件が 満たされない 場合、タスクは現在の実行をスキップ

2)ALTER TASK

* タスクの変更

https://docs.snowflake.com/ja/sql-reference/sql/alter-task

-- 再開/一時停止
ALTER TASK [ IF EXISTS ] <name> RESUME | SUSPEND;

3)SHOW TASKS

* タスクの一覧表示

https://docs.snowflake.com/ja/sql-reference/sql/show-tasks

【4】サンプル

例1:Hello world

CREATE OR REPLACE TASK hello_world_task
  WAREHOUSE = your_warehouse
  SCHEDULE = 'USING CRON 0 */1 * * * Asia/Tokyo'
  TIMEZONE = 'Asia/Tokyo'
  COMMENT = ' This is a sample'
AS
  SELECT sysdate();

-- 「state=suspended」になっている
SHOW TASKS;

-- Task 再開
ALTER TASK hello_world_task RESUME;

-- 1時間以内の直近10件のタスク履歴見るやつ
select *
  from table(information_schema.task_history(
    scheduled_time_range_start=>dateadd('hour',-1,current_timestamp()),
    result_limit => 10,
    task_name=>'hello_world_task'));

-- 停止    
ALTER TASK hello_world_task SUSPEND

参考文献

https://zenn.dev/yuucu/scraps/7daedac475c65a
https://dev.classmethod.jp/articles/snowflake-copy-task/

関連記事

Snowflake ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2021/11/02/130111
Snowflake ~ 入門編 / Hello world
https://dk521123.hatenablog.com/entry/2021/11/22/212520
Snowflake ~ Snowpipe ~
https://dk521123.hatenablog.com/entry/2023/04/15/225515