💨
アラートを通知する
はじめに
アラートを使ってメールで飛ばせるようになったため触ってみました。最後にこんなこともできたらいいな〜ということを書きました。内容はほぼほぼ公式ドキュメントに書いてある内容です。
諸々の確認
ALERT の確認
ALERT を作成するために CREATE ALERT
を確認します。
create or replace alert <alert_name>
warehouse = <warehouse_name>
schedule = <schedule>
if (exists (
<condition>
))
then <action>
:
パラメーター
- <alert_name> alertの名称(アラートが作成されるスキーマに対して一意じゃないとだめ)
- <warehouse_name> 使用するウェアハウス
- <schedule> 以下のいずれかで時間を指定します
- cron
- minute
# Cron式
# __________ minute (0-59)
# | ________ hour (0-23)
# | | ______ day of month (1-31, or L)
# | | | ____ month (1-12, JAN-DEC)
# | | | | _ day of week (0-6, SUN-SAT, or L)
# | | | | |
# | | | | |
* * * * *
- <condition> アラートの条件を設定します
- SELECT
- SHOW <オブジェクト>
- CALL
- <action> 条件があった際に実行するSQLを書きます
- メール通知を送信するには、 SYSTEM$SEND_EMAIL() ストアドプロシージャを呼び出します(今回はメールを飛ばします)
SYSTEM$SEND_EMAIL の確認
SYSTEM$SEND_EMAIL()
を使うので、その中身も確認して行きます〜
call system$send_email(
'<integration_name>',
'<email_address_1> [ , ... <email_address_n> ]',
'<email_subject>',
'<email_content>'
);
パラメーター
- <integration_name> 通知統合の名前
- <email_address_1> 受信するためのメールアドレス
- <email_subject> 件名
- <email_content> 本文
通知統合 の確認
SYSTEM$SEND_EMAIL()
で通知統合を作成しました。なので、通知統合についてもみていきます。
create notification integration
<name>
type = email
enabled = true
allowed_recipients = ( '<email_address>' )
パラメーター
- <name> 統合の名前
- ALLOWED_RECIPIENTS 統合からの通知メールを受信できるメールアドレス
サンプル
私がお試しで使用したコードを載せておきます。
-- 通知統合 の確認
create notification integration daisuke_email
type=email
enabled=true
allowed_recipients=('xxxx@xxxx.jp')
;
-- ALERT の作成
create or replace alert d_harato_db.sf_demo.alert_new_rows
warehouse = d_harato_wh
schedule = '1 minute'
if
(exists
(
select *
from d_harato_db.sf_demo.dummy_table
group by id
having count(id) > 0
)
)
then call system$send_email(
'daisuke_email',
'xxxx@xxxx.jp',
'テーブルにレコードがあるぞい',
'なんでレコードがあるの???'
)
-- 作成した ALERT を起動
alter alert d_harato_db.sf_demo.alert_new_rows resume;
-- 通知を飛ばすための処理
create or replace table d_harato_db.sf_demo.dummy_table (
id number
);
insert into d_harato_db.sf_demo.dummy_table
values (1)
;
無事メールが来ました!(止め忘れると当たり前ですが、毎分メールが飛んできます!!)
ALERT を使う上での注意
もっとほしい
- 1つの ALERT で複数内容のメッセージを送信できるようになればと思いました
-- イメージ
create or replace alert <name>
****
-- 条件①
if
(exists
( レコードがある条件 )
)
-- 条件①
then call system$send_email(
'daisuke_email_one',
'xxxx@xxxx.jp',
'テーブルにレコードがあるぞい',
'なんでレコードがあるの???'
)
-- 条件②
else
then call system$send_email(
'daisuke_email_two',
'yyyy@yyyy.jp',
'テーブルにレコードがないぞい',
'なんでレコードがないの???'
)
;
- ウェアハウスの指定をしなくても、Snowflake側でよしなにウェアハウスサイズを決定してほしいなぁ
Discussion