こんにちは。t.ozawaです。
今回はSnowflake上で、SQLでメールを送信する方法を紹介します。
Snowflakeのサービスとして、リソースモニターにおけるメール送信機能といった例もありますが、
今回紹介するシステム関数を使う方法は、コードベースでありプロシージャやタスクに組み込むことができるため、あらゆる条件下で用いることができる利点があります。
メールを送信する手順
公式ドキュメントはこちら
Snowflakeからメールを送信するためには、3点のステップが必要です。
- ユーザのプロフィールにメールアドレスを設定
- 送信許可されたメールアドレスリストを作成
- メールを送信
ステップ1の中で設定されたメールアドレスのみが、ステップ2のメールアドレスリストに格納することができます。
そして、ステップ2のリストに格納されたメールアドレスに対してのみ、メールを送信することができます。
つまり、ステップ1と2は、メールの送信先を設定するうえで不可欠です。
1. ユーザのプロフィールにメールアドレスを設定
左上の自分のユーザ名のアイコンをクリックし、プロフィールを選択します。
Email欄にメールアドレスを記述し登録します。その際、メール認証が求められます。
メールを送信したいユーザが複数いる場合、ユーザ各々が自身のメールアドレスを登録します。
2. 送信許可されたメールアドレスリストを作成
ステップ1で登録したメールアドレスを、NOTIFICATION INTEGRATIONと呼ばれる、通知を送信したい一覧のようなオブジェクトに登録します。
ソースコードは以下の通りです。この作業には、ACCOUNTADMINが必要です。
--ACCOUNTADMINで操作
use role ACCOUNTADMIN;
--今回はメールの送信先のリスト情報を一覧化したmy_email_listを作成
CREATE or REPLACE NOTIFICATION INTEGRATION my_email_int
TYPE=EMAIL
ENABLED=TRUE
ALLOWED_RECIPIENTS=('x_ozawa@xxx.xx', 'y_ozawa@yyy.yy');
--作成したmy_email_listを表示してみる。
SHOW NOTIFICATION INTEGRATIONS;
SHOWで表示して、MY_EMAIL_INTというリストが作成されていればOKです!
3. メールを送信
ステップ2で送信可能なメールアドレスリストMY_EMAIL_INTを作成したので、いよいよメールを送信していきます。
今回、SYSADMINを使ってメール送信してみます。そのため、MY_EMAIL_INTを閲覧できるように権限を付与します。
メールを送信するためには、システム関数SYSTEM$SEND_EMAILを使います。
--メール送信をSYSADMINで実施
--作成したmy_email_listをSYSADMINでも使えるように権限を付与
GRANT USAGE ON INTEGRATION my_email_int TO ROLE sysadmin;
--メールを送信
CALL SYSTEM$SEND_EMAIL(
'my_email_int', --メールアドレスリスト
'x_ozawa@xxx.xx, y_ozawa@yyy.yy', --メールアドレス(my_email_listに入っているものが有効)
'テストメール送信', --メールタイトル
'メール送信に成功しました。' --メール本文
);
メールが届いたら、大成功です!!!
おわりに
今回は、システム関数SYSTEM$SEND_EMAILを使って、メールを送信する方法を紹介しました。
メールアドレスリストを複数生成することで、お客様用やアラート用といった用途別のリストが作成でき、人的ミスを減らすことができるメリットがありそうです。
また、定期更新で予期せぬ不具合が生じたときに、メールアラートを通知する、といった仕組化もできそうですね!
それでは!