1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Snowflakeでのストアドプロシージャ作成と定期実行タスクの設定方法

Posted at

はじめに

Snowflakeでは、ストアドプロシージャを使ってデータ操作を自動化し、タスク機能を使ってその処理を定期的に実行することが可能です。本記事では、ストアドプロシージャでデータ変換処理を行い、例として毎日朝9時にその処理を自動的に実行するタスクの設定方法を紹介します。

1. ストアドプロシージャの作成手順

まず、ストアドプロシージャを作成して、必要なデータ操作を自動化します。この例では、MY_SCHEMA.MY_TABLE というテーブルに対してカラムを変換する処理を行います。

ストアドプロシージャの作成

次のSQLコードで、MY_SCHEMA.MY_TABLE にストアドプロシージャを作成します。このストアドプロシージャは、number_column というNUMBER型のカラムをDATE型に変換して、新しいカラムにデータを移行し、元のカラムを削除します。

CREATE OR REPLACE PROCEDURE MY_SCHEMA.update_column()
RETURNS STRING
LANGUAGE SQL
AS
$$
BEGIN
   -- 新しいDATE型のカラムを追加
   ALTER TABLE MY_SCHEMA.MY_TABLE ADD new_date_column DATE;

   -- 元のNUMBER型のカラムからDATE型に変換して新しいカラムにデータを移行
   UPDATE MY_SCHEMA.MY_TABLE
   SET new_date_column = TO_DATE(TO_CHAR(number_column), 'YYYYMM');

   -- 元のnumber_columnを削除
   ALTER TABLE MY_SCHEMA.MY_TABLE DROP COLUMN number_column;

   -- 新しいDATE型のカラムの名前をnumber_columnに変更
   ALTER TABLE MY_SCHEMA.MY_TABLE RENAME COLUMN new_date_column TO number_column;
   
   -- 処理が成功した場合のメッセージを返す
   RETURN 'Procedure executed successfully.';
END;
$$;

ストアドプロシージャの実行

作成したストアドプロシージャは以下のコマンドで実行できます。

CALL MY_SCHEMA.update_column();

これにより、MY_TABLE のカラム変換処理が実行されます。
スクリーンショット 2024-10-22 12.02.23.png

2. タスクの作成とスケジュール設定

次に、このストアドプロシージャを定期的に実行するために、Snowflakeのタスク機能を使用して毎日朝9時に自動的に実行するよう設定します。

タスクの作成

タスクを作成して、毎日朝9時にストアドプロシージャを実行します。日本標準時 (JST) の朝9時に実行するために、UTCの0時に相当するスケジュールを設定します。

CREATE OR REPLACE TASK MY_SCHEMA.update_column_task
  WAREHOUSE = my_warehouse  -- 実行に使用するウェアハウスを指定
  SCHEDULE = 'USING CRON 0 0 * * * UTC'  -- 毎日UTC 0時に実行(JSTの朝9時に相当)
  COMMENT = '毎日朝9時にupdate_columnを実行'
AS
  CALL MY_SCHEMA.update_column();

タスクの有効化

タスクを有効化して、指定したスケジュールに従って実行されるようにします。

ALTER TASK MY_SCHEMA.update_column_task RESUME;

3. タスクの確認と管理

作成したタスクが正しく設定されているかどうかは、以下のコマンドで確認できます。

SHOW TASKS LIKE 'update_column_task';

必要に応じて、タスクの一時停止や再開も可能です。

  • タスクを一時停止する場合:

    ALTER TASK MY_SCHEMA.update_column_task SUSPEND;
    
  • タスクを再開する場合:

    ALTER TASK MY_SCHEMA.update_column_task RESUME;
    

設定後GUIからもデータセット配下のタスクとストアドプロシージャを管理できます。
スクリーンショット 2024-10-22 11.59.21.png

まとめ

この記事では、Snowflakeでストアドプロシージャを作成し、それを毎日朝9時に定期的に実行するタスクを設定する方法を紹介しました。ストアドプロシージャとタスクを組み合わせることで、複雑なデータ操作を自動化し、効率的なメンテナンスやデータ処理を実現することができます。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?