❄️

【Snowflake】「自動化」におけるタスクとビューの意味と用途

に公開

初めに

shioです。研修としてSnowflakeに触れて3週間になります。
そんなSnowflake初心者の私は「自動化」処理を行う際に、ビューとは?タスクとは?と、用語の意味から何が何やら……という状態でした。

そこで本記事では、Snowflakeの「自動化」について意味と用途をまとめてみます。
Snowflakeには様々な自動化機能がありますが、今回は私が研修でぶつかった壁、タスクビューについて紹介します。

Snowflakeの「自動化」の方法

先ほどSnowflakeには様々な自動化機能があると述べましたが、自動化する対象や、複数機能を組み合わせた結果自動化しているように見える、など「自動化」の意味が異なります。そこでまずは「自動化」の種類や、私が研修で行った「自動化」について整理します。

Snowflakeで「自動化」と呼ばれる処理には、複数の種類があります。

  • データの取り込みの自動化(例:Snowpipe)
  • 処理の実行の自動化(例:タスク)
  • 最新の値を自動的に返す(例:ビュー)
  • アラートを自動で飛ばす(例:Snowflakeアラート)
    このように、「自動化」といってもどの部分を自動にするのかによって役割が異なります。

研修では、

  1. 外部ストレージからSnowflakeへのデータ取り込みをタスク
  2. 取り込んだデータの最新状態の参照をビュー
  3. ダッシュボードへ反映するデータの抽出をTableau

の組み合わせで自動化しました。

以下は研修で実装した自動化パイプラインをまとめたものです。

それでは研修で作成したものを例に、タスクとビューの「自動化」と、その役割について詳しく紹介します。

タスクとは

タスクは、トリガーをもとに処理を実行する実行の自動化 を行います。

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

以下は研修で作成したタスクになります。

-- タスク作成
CREATE OR REPLACE TASK t_raw_load
    WAREHOUSE = TEST
    SCHEDULE = 'USING CRON 0 9 * * * Asia/Tokyo'
    AS
        CALL p_raw_load();

これは毎日9:00(アジア/東京時間)に、処理(p_raw_load())を自動実行するタスク(t_raw_load)を意味します。ここでは毎日9:00という時間が実行のトリガーとして設定されています。

ここでp_raw_load()という処理を実行していますが、これは事前に作成していたストアドプロシージャです。タスクと組み合わせて使われることが多い機能として、ストアドプロシージャについても少し紹介します。

ストアドプロシージャとは、複雑な処理を関数化したものです。ストアドプロシージャを呼び出すと、作成した処理を実行してくれます。

https://docs.snowflake.com/ja/developer-guide/stored-procedure/stored-procedures-overview

以下は研修で作成したストアドプロシージャです。

-- ストアドプロシージャの作成
CREATE OR REPLACE PROCEDURE P_RAW_LOAD()
    RETURNS VARCHAR
    LANGUAGE SQL
AS
$$
BEGIN
    COPY INTO RAW_SAMPLE
    FROM '@raw.external_stage/sample/dummy_data.csv'
    FILE_FORMAT = (FORMAT_NAME = ff_csv);
END;
$$
;

これは外部ステージにあるdummy_data.csvをRAW_SAMPLEに取り込むという処理を意味します。この処理にP_RAW_LOAD()という名前を付けて、ストアドプロシージャとして定義づけています。

それでは改めて、タスクの紹介で載せたSQLを再確認してみます。

-- タスク作成
CREATE OR REPLACE TASK t_raw_load
    WAREHOUSE = TEST
    SCHEDULE = 'USING CRON 0 9 * * * Asia/Tokyo'
    AS
        CALL p_raw_load();

ここで呼び出しているp_raw_load()が、先ほど紹介したストアドプロシージャです。そのためSQL全体の意味は「毎日9:00にdummy_data.csvをRAW_SAMPLEに取り込む処理を自動実行する」となります。

ストアドプロシージャを使えば処理をまとめて呼び出せるため、タスクと組み合わせることで複雑な処理も自動化することができます。

ビューとは

ビューは、SELECT文に名前を付けた仮想テーブルです。呼び出すと最新のデータから再計算して結果の更新を行います。ビュー自体が勝手に再計算する「自動実行」ではなく、参照された時点で最新データを用いた再計算を行うという点に注意が必要です。

https://docs.snowflake.com/ja/user-guide/views-introduction

以下は研修で作成したビューです。

-- ビューの作成
CREATE OR REPLACE VIEW STG_SAMPLE AS
SELECT
    sample_code
    , sample_name
FROM RAW.RAW_SAMPLE
;

sample_codeとsample_nameを持つビューを、STG_SAMPLEとして定義しています。参照元のRAW.RAW_SAMPLEのデータが更新されると、STG_SAMPLEを呼び出した際に再計算が行われ、最新の値を返します。

初めに、ビューはSELECT文に名前を付けた「仮想テーブル」と述べました。ここでテーブルとの違いについても整理しておきます。

テーブルは、データを保存しておくための実体を持つ表のことで、データを入れておく箱のような役割を持ちます。

対してビューは、SELECT文を保持した見せ方の定義であり、データそのものは保持しません。そのため、参照するたびに最新のデータを取得し再計算が行われます。

研修では、TableauによりSnowflakeのDM層のデータを自動抽出する設定にしました。
この抽出処理のタイミングでビューが参照され、その際に DM → DW → STG ...と依存関係をたどって再計算が行われるため、最新の値を返すようになっています。

つまりビュー単体では値の更新の「自動化」は行われず、
Tableauの自動抽出×ビューの組み合わせの結果として値が自動的に更新されて見える仕組みになっています。

まとめ

以上、「自動化」におけるタスクとビューの紹介でした。

  • タスクは、トリガーをもとに処理を実行する実行の自動化
  • ビューは、参照された際に最新のデータから再計算する結果の更新

Snowflake初心者として、用語の定義や機能の使い分けを少しずつ学んでいこうと思います。

truestarテックブログ
設定によりコメント欄が無効化されています