Snowflake において、cron のように定期的に SQL を実行する仕組みとして Task が提供されています。基本的な使い方を記載します。
サンプル
データベースとテーブルを作成しておきます。
CREATE DATABASE mydb;
CREATE TABLE mytbl (c1 DATETIME, c2 STRING);
1分毎に INSERT を実行する task を作成します。WAREHOUSE
パラメータを省略すると、Snowflake-managed な Compute リソースを利用して稼働します。
CREATE TASK mytask
SCHEDULE = '1 MINUTE'
USER_TASK_MANAGED_INITIAL_WAREHOUSE_SIZE = XSMALL
AS
INSERT INTO mytbl (c1, c2) VALUES (CURRENT_TIMESTAMP(), system$current_user_task_name());
初期状態では開始されていないため、以下の SQL を実行します。
ALTER TASK mytask RESUME;
参考資料:
- CREATE TASK
- SYSTEM$CURRENT_USER_TASK_NAME
- Task 名を返す関数です。
ログ、ステータス
Task は schema オブジェクトの配下に位置するオブジェクトです。USE されている schema に関する task を show するコマンドは以下のとおりです。
USE DATABASE mydb;
SHOW TASKS;
USE されていない schema の task も表示するためには以下のようにします。
SHOW TASKS IN ACCOUNTS;
タスクの実行履歴は以下のコマンドで確認します。
SELECT * FROM TABLE(information_schema.task_history());
SELECT * FROM TABLE(information_schema.serverless_task_history());
監査用の Snowflake DB から SELECT する場合は以下のようにします。
SELECT * FROM snowflake.account_usage.task_history LIMIT 10;
snowflake database を利用する場合は遅延が発生します。Information Schema を利用する場合は、保持期限が存在することに注意します。
参考資料:
- SHOW TASKS
- DESCRIBE TASK
- TASK_HISTORY
- TASK_HISTORY View
- SERVERLESS_TASK_HISTORY
- SERVERLESS_TASK_HISTORY View
権限
ACCOUNTADMIN を用いずに、他のロールに権限を委譲する設定を記載します。
Task History の閲覧
Task が格納される database および schema の USAGE 権限に加えて、Task の OWNERSHIP 権限を持つ場合、以下のクエリが実行できます。
SELECT * FROM TABLE(information_schema.task_history());
または MONITOR EXECUTION
権限を持つ場合にも、上記クエリを実行可能です。
GRANT MONITOR EXECUTION ON ACCOUNT TO ROLE myrole;
上記は Information Schema に関する記載です。
参考資料:
作成、実行
以下のようなカスタムロール taskadmin
を作成して、権限を委譲できます。
// accountadmin である必要はありません。
USE ROLE securityadmin;
// ロールの作成。
CREATE ROLE taskadmin;
// useradmin が grant できるように、OWNERSHIP を移管しています。
GRANT OWNERSHIP ON ROLE taskadmin TO ROLE useradmin;
// accountadmin の直下に配置することで、taskadmin が OWNERSHIP を持つオブジェクトが発生しても accountadmin で管理できるようにしておきます。
GRANT ROLE taskadmin TO ROLE accountadmin;
// 以下の grant には accountadmin が必要です。
USE ROLE accountadmin;
GRANT EXECUTE TASK, EXECUTE MANAGED TASK ON ACCOUNT TO ROLE taskadmin;
上記 taskadmin
に加えて、必要な権限は以下のとおりです。
- database および schema の USAGE 権限。
- warehouse の USAGE 権限。 ← Snowflake-managed な Compute リソースを利用しない Task の場合。
- Task で定期実行する SQL に必要な権限。
補足1
Task の OWNERSHIP 権限は user ではなく role が持ちます。特定の user が管理する task というものはなく、role を持つ複数の user で管理する task ということになります。
例えば ACCOUNTADMIN で create した task の OWNERSHIP は ACCOUNTADMIN となるため、taskadmin
では drop 等ができません。
補足2
shared database 配下に task を作成することはできませんが、task の SQL 内で参照することはできます。
CREATE TASK mytask
SCHEDULE = '1 MINUTE'
USER_TASK_MANAGED_INITIAL_WAREHOUSE_SIZE = XSMALL
AS
INSERT INTO mytbl (c1, c2) SELECT CURRENT_TIMESTAMP(), query_text FROM snowflake.account_usage.query_history LIMIT 1;
参考資料:
関連記事
- Snowflake におけるアクセス制御の設定Snowflake について、アクセス制御の設定を記載します。 参考資料: Access Control in Snowflake user と role の関係 [Role Hierarchy and Privilege
- Snowflake におけるセキュリティ関連の機能Snowflake のセキュリティ関連の機能について記載します。 パラメータ管理 Snowflake における設定値はパラメータとよばれます。設定する対象によって分類すると、以下の三種類が存在します。 Account パラメータ。 Account-level でのみ設定可能です。 Session パラメータ。 Account-level および User-level, Session-level ...
- Looker から Snowflake への OAuth 接続Looker から Snowflake の DB を OAuth 認証で参照する設定例を記載します。 参考資料: Looker / feedbackSnowflake / Configuring OAuth for Snowflake connections Snowflake 内の Looker 用 Role/User/Warehouse/DB 作成 Role と
- Snowflake に対する SSO 設定 (Auth0)Snowflake に対して、外部の ID 基盤 (IdP; ID Provider) による認証でログインするための設定例を記載します。IdP としては Auth0 を用います。 参考資料: [HOWTO: CONFIGURE AUTH0 AS IDENTITY PROVIDER FOR SNOWFLAKE SINGLE SIGN-ON](https://community.snowflake....
- Snowflake Custom Role による ACCOUNTADMIN からの権限委譲Snowflake アカウントの運用時において、ACCOUNTADMIN は必要な場合以外は利用しないことが推奨されます。SYSADMIN 直下ではなく ACCOUNTADMIN 直下に位置付けた Custom Role を作成することで、ACCOUNTADMIN が持つ権限を委譲する例を記載します。 関連資料: [Access Control Privileges](https://docs.s...