見出し画像

Snowflakeさわってみた。Snowflake Alerts試してみた。【2023年2月新機能】

分析屋の下滝です。

Snowflakeをさわってみよう、の7回目です。

2023年2月リリースの新機能Snowflake Alerts(Preview)を公式ドキュメントをもとに試してみたいと思います。短くなるように書いていますので、詳しい注意点などは公式ドキュメントを参照してください。

Snowflake Alertsは、次のような機能です。Snowflake Alertsは、スキーマレベルのオブジェクトであり、以下を指定します。
アラートのトリガーとなる条件(例:完了までに1秒以上かかるクエリが存在する)。
条件を満たしたときに実行するアクション(メール通知の送信、テーブル内のデータの取得など)。
条件を評価するタイミングと頻度(24時間ごと、毎週日曜の午前0時など)。

アラートの作成には CREATE ALERT を使います。たとえば、次のようしてアラートを作成できます。

create or replace alert myalert
  warehouse = mywarehouse
  schedule = '1 minute'
  if( exists(
    select gauge_value from gauge where gauge_value>200))
  then
    insert into gauge_value_exceeded_history values (current_timestamp());

次のような内容を指定しています。
・warehouse :対象となるウェアハウス
・schedule :条件を評価するタイミングと頻度
・if( exists()):アラートのトリガーとなる条件のSQL文
・then:条件のSQL文が1またはそれ以上の行を返したときに実行されるSQL文

なお、公式ドキュメントでは、次のような使用例が記載されています。
・ウェアハウスのクレジットの使用量が、現在のクォータに対して指定された割合で増加している。
・パイプライン、タスク、マテリアライズドビューなどのリソース消費量が指定された量より多くなった。
・不正なユーザーからのデータアクセス要求があった。
・設定した特定のビジネスルールにデータが準拠しない。

アラートの作成

アラートの作成には、まずは、権限設定の準備が必要です。

アラート用のロールを作ります。

use role accountadmin;

create role my_alert_role;

作成したロールにアラートの権限を与えます。

grant execute alert on account to role my_alert_role;

作成したロールをユーザーに割り当てます。

grant role my_alert_role to user my_user;

対象のスキーマに対するアラート作成の権限をロールに与えます。

grant create alert on schema my_schema to role my_alert_role;

権限の設定は以上です。

では続いて、簡単なアラートを作っていきます。次のようなProductテーブルがあるとします。

+----+------+-------+
| ID | NAME | PRICE |
|----+------+-------|
|  1 | aaa  |  1000 |
|  2 | bbb  |  2000 |
|  3 | ccc  |  3000 |
+----+------+-------+

このテーブルに対するアラートを作ります。

create or replace alert myalert
  warehouse = "テストウェアハウス"
  schedule = '1 minute'
  if( exists(
    select * from product where id = 1))
  then
    delete from product where id = 1;

ここでは、myalert というアラートを作成しており、
「テストウェアハウス」というウェアハウスに上で、
1分間隔のスケジュールを指定しています。
アラートの条件として、id が「1」の行が存在するかどうかを条件にしています。もし存在すれば、その行を削除しています。

作成されたアラートは show alerts; で確認できます。

show alerts; 

作成されたアラートは、作成時点では停止状態のため、起動(再開)する必要があります。

alter alert myalert resume;

再開後、1分後にアラートが実行され、IDが「1」のレコードが削除されます。

+----+------+-------+
| ID | NAME | PRICE |
|----+------+-------|
|  2 | bbb  |  2000 |
|  3 | ccc  |  3000 |
+----+------+-------+

アラートの実行履歴は、ALERT_HISTORY テーブルをもとに、次のようなSELECT文で確認できます。

select *
from
  table(information_schema.alert_history(
    scheduled_time_range_start
      => dateadd('hour',-1,current_timestamp())))
order by scheduled_time desc;


今回は以上です。

今回は、then のアクションとしてdelete文を使いましたが、他にもメールを送るなどもできます。Snowflake alert の詳しい説明は、公式ドキュメントを参照してください。

・アラートの停止
・アラートの再開
・アラートの変更
・アラートの削除

snowflakeの他の記事はマガジンにまとめています。

株式会社分析屋について

ホームページはこちら。

noteでの会社紹介記事はこちら。

【データ分析で日本を豊かに】
分析屋はシステム分野・ライフサイエンス分野・マーケティング分野の知見を生かし、多種多様な分野の企業様のデータ分析のご支援をさせていただいております。 「あなたの問題解決をする」をモットーに、お客様の抱える課題にあわせた解析・分析手法を用いて、問題解決へのお手伝いをいたします!
【マーケティング】
マーケティング戦略上の目的に向けて、各種のデータ統合及び加工ならびにPDCAサイクル運用全般を支援や高度なデータ分析技術により複雑な課題解決に向けての分析サービスを提供いたします。
【システム】
アプリケーション開発やデータベース構築、WEBサイト構築、運用保守業務などお客様の問題やご要望に沿ってご支援いたします。
【ライフサイエンス】
機械学習や各種アルゴリズムなどの解析アルゴリズム開発サービスを提供いたします。過去には医療系のバイタルデータを扱った解析が主でしたが、今後はそれらで培った経験・技術を工業など他の分野の企業様の問題解決にも役立てていく方針です。
【SES】
SESサービスも行っております。