Snowflakeのデータに基づくアラートの設定¶
このトピックでは、Snowflake内のデータに基づいて、特定の条件下で定期的にアクションを実行するアラートを設定する方法について説明します。
概要¶
場合によっては、Snowflakeのデータが特定の条件を満たしたときに、通知を受信するか、アクションを実行することができます。たとえば、次の場合に通知を受信できるようにします。
- ウェアハウスのクレジット使用状況が、現在のクォータの指定された割合だけ増加したとき。 
- パイプライン、タスク、マテリアライズドビューなどのリソース消費が、指定された量を超えて増加したとき。 
- データが、設定した特定のビジネスルールに準拠していないとき。 
これを実行するには、Snowflakeアラートを設定できます。Snowflakeアラートは、以下を指定するスキーマレベルのオブジェクトです。
- アラートをトリガーする条件(例: 完了するまでに1秒以上かかるクエリの存在)。 
- 条件が満たされたときに実行するアクション(例: メール通知を送信する、テーブル内のデータをキャプチャする、など)。 
- 条件を評価する時期と頻度(例: 24時間ごと、毎週日曜日の深夜、など)。 
たとえば、クレジット消費がウェアハウスの特定の制限を超えたときにメール通知を送信するとします。これを30分ごとにチェックするとします。次のプロパティを使用してアラートを作成できます。
- 条件: ウェアハウス(ACCOUNT_USAGE にある WAREHOUSE_METERING_HISTORY ビューの - credits_used列の合計)スキーマのクレジット消費量が、指定された制限を超えている。
- アクション: 管理者にメールを送信する。 
- 頻度/スケジュール: 30分ごとにこの条件をチェックする。 
アラートタイプの選択¶
以下のタイプのアラートを作成できます。
- スケジュールのアラート: Snowflakeは、スケジュールに基づいて既存のデータに対して条件を評価します。 - 例えば、テーブルの既存の行に指定した値を超える列があるかどうかをチェックするアラートをスケジュールにセットできます。 
- 新しいデータのアラート: Snowflakeは、指定したテーブルまたはビュー内の新しい行に対して条件を評価します。 - 例えば、エラーメッセージの新しい行がアカウントの イベントテーブル に挿入された場合に通知するアラートを新しいデータにセットできます。動的なテーブルの更新やタスクの実行によりイベントテーブルに対してイベントがログ記録されるため、アラートを新しいデータにをセットアップできます。 
スケジュールのアラート¶
スケジュールのアラートでは、 n 分ごと、またはcron式で指定したスケジュールでアラートの実行をセットアップできます。
アラートの条件が全てのデータに対して評価されます(新しいデータのアラートとは異なり、条件は挿入された新しい行のみに対して評価されます)。
新しいデータのアラート¶
新しいデータのアラートでは、新しい行がテーブルに挿入された場合またはビューに表示された場合にのみアラートを実行するようセットアップできます。
新しい行が挿入されるたびに、アラートが実行されて新しい行に対してのみ条件が評価されます。条件評価がTRUEの場合にアクションが実行されます。
新しく挿入された行に対して条件を評価したい場合は、スケジュール上のアラート(データが追加されたかどうかに関係なく、固定スケジュールで実行される)ではなく、新しいデータのアラートを使用してください。
アラートはテーブルやビューで新しく挿入された行に対してのみ動作するため、指定できる条件には制限があります。
- SELECTステートメントでは、FROM句で指定できるのは通常のテーブル、ビュー、イベントテーブルのいずれか1つのみです。 
- そのテーブルまたはビューで 変更の追跡を有効にする 必要があります。 
- 次は使用できません。 
- ストアドプロシージャの呼び出し 
- 結合 
 
注釈
新しいデータのアラート実行に EXECUTE ALERT コマンドは使用できません。
アラート用ウェアハウスの選択¶
アラートの実行には ウェアハウス が必要です。 サーバーレスコンピューティングモデル を使うか、 指定したバーチャルウェアハウス を使います。
サーバーレスコンピューティングモデルの使用(サーバーレスアラート)¶
サーバーレスアラート と呼ばれるサーバーレスコンピューティングモデルを使用するアラート。サーバーレスコンピューティングモデルを使用する場合、Snowflakeはアラートに必要なコンピューティングリソースのサイズ変更とスケーリングを自動的に行います。Snowflakeは、同じアラートの最近の実行に対する統計の動的分析に基づいて、特定の実行に対するコンピューティングリソースの理想的なサイズを決定します。サーバーレスタスク実行の最大サイズは、XXLARGEウェアハウスに相当します。アカウント内の複数のワークロードが、共通のコンピューティングリソースのセットを共有します。
課金は他のサーバーレス機能(サーバーレスタスクなど)に似ています。 警告のコストの理解 をご参照ください。
注釈
頻繁には追加されない 新しいデータのアラート を作成する場合は、サーバーレスアラートとして設定することを検討してください。代わりにウェアハウスを使用するようにアラートを設定した場合、電子メール通知を送信する単純なアクションであっても最低1分のウェアハウスコストが発生します。
指定した仮想ウェアハウスの使用¶
仮想ウェアハウスを指定する場合は、アラートで実行されるSQLアクションに適したサイズのウェアハウスを選択する必要があります。ウェアハウス選びのガイドラインについては、 ウェアハウスに関する考慮事項 をご参照ください。
警告のコストの理解¶
SQLコードを実行するためにアラートを実行することに関連するコストは、アラートに使用されるコンピューティングリソースによって異なります。
- サーバーレスアラートでは、Snowflakeはコンピューティングリソースの使用量に基づいてアカウントに請求します。料金は、 コンピューティング時間 のクレジット使用状況で測定されたリソースの合計使用状況(クラウドサービスの使用状況を含む)に基づいて計算されます。計算時間はウェアハウスのサイズとクエリの実行時間によって変わります。詳細については、 サーバーレスのクレジット使用状況 をご参照ください。 - アラートにより消費されたクレジット量を知る方法については、 Snowflakeサービス利用テーブル の「サーバーレス機能クレジットテーブル」をご参照ください。 - サーバーレスアラートの使用履歴を表示するには、以下の方法があります。 - SERVERLESS_ALERT_HISTORY 関数を呼び出す。 
- SERVERLESS_ALERT_HISTORY ビュー をクエリする。 
 
- 指定した仮想ウェアハウスを使用するアラートについては、Snowflakeは、アラート実行中のウェアハウスの使用状況に基づいて、 クレジット使用状況 をアカウントに請求します。これは、クライアントや Snowsight で同じ SQL ステートメントを実行するウェアハウスの使い方に似ています。秒あたりのクレジット請求と自動中断により、より大きなウェアハウスサイズから始めて、アラートワークロードに合わせてサイズを調整する柔軟性が得られます。 
Tip
テーブルやビューに追加された新しい行を評価するアラートをセットアップしたい場合は、スケジュールのアラートではなく、 新しいデータのアラート を使用してください。スケジュールのアラートは、新しい行が挿入されたかどうかに関係なく、スケジュールされた時間に実行されます。
アラートを作成する権限の付与¶
アラートを作成するには、次の権限を持つロールを使用する必要があります。
- アカウントに対する EXECUTE ALERT 権限。 - 注釈 - この権限は、 ACCOUNTADMIN ロールを持つユーザーのみが付与できます。 
- 次の権限のいずれかです。 - サーバーレスアラートを作成する場合は、アカウントのEXECUTEMANAGEDALERT権限。 
- アラートに仮想ウェアハウスを指定している場合は、アラートの実行に使用されるウェアハウスのUSAGE権限。 
 
- アラートを作成するスキーマに対する USAGE および CREATE ALERT 権限。 
- スキーマを含むデータベースに対する USAGE 権限。 
- アラート条件でクエリするテーブルまたはビューのSELECT権限(新しいデータのアラート を作成する場合)。 
これらの権限をロールに付与するには、 GRANT <権限> ... TO ROLE コマンドを使用します。
たとえば、 my_schema という名前のスキーマでアラートを作成する権限を持つ、 my_alert_role という名前のカスタムロールを作成するとします。アラートでウェアハウス my_warehouse を使用するとします。
これを実行するには、
- ACCOUNTADMIN ロールを持つユーザーに、次を実行してもらいます。 - 
例: USE ROLE ACCOUNTADMIN; CREATE ROLE my_alert_role; 
- そのカスタムロールに EXECUTE ALERT グローバル権限を付与します。 - 例: - GRANT EXECUTE ALERT ON ACCOUNT TO ROLE my_alert_role; 
- サーバレスアラートを作成したい場合は、EXECUTEMANAGEDALERTグローバル権限をそのカスタムロールに付与してください。 - 例: - GRANT EXECUTE MANAGED ALERT ON ACCOUNT TO ROLE my_alert_role; 
- ユーザーにカスタムロールを付与します。 - 例: - GRANT ROLE my_alert_role TO USER my_user; 
 
- 
- データベース、スキーマ、およびウェアハウスの所有者により、アラートの作成に必要な権限をカスタムロールに付与してもらいます。 - スキーマの所有者は、スキーマに対する CREATE ALERT および USAGE 権限を付与する必要があります。 - GRANT CREATE ALERT ON SCHEMA my_schema TO ROLE my_alert_role; GRANT USAGE ON SCHEMA my_schema TO ROLE my_alert_role; 
- データベースの所有者は、データベースに対する USAGE 権限を付与する必要があります。 - GRANT USAGE ON DATABASE my_database TO ROLE my_alert_role; 
- アラートにウェアハウスを指定する場合は、そのウェアハウスの所有者がUSAGE権限を付与する必要があります。 - GRANT USAGE ON WAREHOUSE my_warehouse TO ROLE my_alert_role; 
 
アラートの作成¶
以下のセクションでは、各種のアラートタイプを作成するための基本的な手順と例を示します。
スケジュールのアラート作成¶
gauge という名前のテーブルにある1つ以上の行の gauge_value 列に200を超える値がある場合には常に、現在のタイムスタンプを gauge_value_exceeded_history という名前のテーブルに挿入するとします。
次のアラートを作成できます。
- gauge_valueが200を超える条件を評価する。
- この条件がtrueと評価された場合は、タイムスタンプを - gauge_value_exceeded_historyに挿入する。
これを実行する my_alert という名前のアラートを作成するには、
- アラートを作成する権限 を持つロールを使用していることを確認してください。 - そのロールを使用していない場合は、 USE ROLE コマンドを実行してそのロールを使用します。 
- アラートを作成する予定のデータベースとスキーマを使用していることを確認してください。 - そのデータベースとスキーマを使用していない場合は、 USE DATABASE および USE SCHEMA コマンドを実行して、そのデータベースとスキーマを使用します。 
- CREATE ALERT コマンドを実行して、アラートを作成します。 - CREATE OR REPLACE ALERT my_alert 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パラメーターを省略します。 - CREATE OR REPLACE ALERT my_alert SCHEDULE = '1 minute' IF( EXISTS( SELECT gauge_value FROM gauge WHERE gauge_value>200)) THEN INSERT INTO gauge_value_exceeded_history VALUES (current_timestamp()); - CREATE ALERT コマンドの包括的な説明については、 CREATE ALERT をご参照ください。 - 注釈 - アラートを作成すると、アラートはデフォルトで中断されます。アラートを実行するには、新しく作成したアラートを再開する必要があります。 
- ALTER ALERT ... RESUME コマンドを実行してアラートを再開します。例: - ALTER ALERT my_alert RESUME; 
新しいデータのアラートの作成¶
データベース内の my_stored_proc という名前のストアドプロシージャと my_db.my_schema スキーマがFATALメッセージを アカウントのアクティブなイベントテーブル ににログ記録した場合に電子メール通知を受け取りたいとします。
これを実行する my_alert という名前のアラートを作成するには、
- アカウントのアクティブなイベントテーブル名を検索します。 - SHOW PARAMETERS LIKE 'EVENT_TABLE' IN ACCOUNT; - +-------------+---------------------------+----------------------------+---------+-----------------------------------------+--------+ | key | value | default | level | description | type | |-------------+---------------------------+----------------------------+---------+-----------------------------------------+--------| | EVENT_TABLE | my_db.my_schema.my_events | snowflake.telemetry.events | ACCOUNT | Event destination for the given target. | STRING | +-------------+---------------------------+----------------------------+---------+-----------------------------------------+--------+ 
- アラート条件でクエリする予定のテーブルまたはビューで 変更の追跡を有効 にします。 - ALTER TABLE my_db.my_schema.my_events SET CHANGE_TRACKING = TRUE; 
- アラートを作成する権限 を持つロールを使用していることを確認してください。 - そのロールを使用していない場合は、 USE ROLE コマンドを実行してそのロールを使用します。 
- アラートを作成する予定のデータベースとスキーマを使用していることを確認します。 - そのデータベースとスキーマを使用していない場合は、 USE DATABASE および USE SCHEMA コマンドを実行して、そのデータベースとスキーマを使用します。 
- アラートを作成する CREATE ALERT コマンドを実行して、SCHEDULEパラメーターを省略します。 - たとえば、次の例では、動的なテーブルの更新におけるエラーをイベントテーブルで監視し、Slackチャネルに通知を送信する新しいデータのアラートを作成しています。この例では以下を想定しています。 - アクティブなイベントテーブルが デフォルトのイベントテーブル (SNOWFLAKE.TELEMETRY.EVENTS)になる。 
- 動的テーブルのイベントをキャプチャするため 重大度レベルをセット している。 
- そのSlackチャンネルに対して Webhook通知統合をセット している。 
 - CREATE OR REPLACE ALERT my_alert WAREHOUSE = mywarehouse IF( EXISTS( SELECT * FROM SNOWFLAKE.TELEMETRY.EVENTS WHERE resource_attributes:"snow.executable.type" = 'DYNAMIC_TABLE' AND record_type='EVENT' AND value:"state"='ERROR' )) THEN BEGIN LET result_str VARCHAR; (SELECT ARRAY_TO_STRING(ARRAY_AGG(name)::ARRAY, ',') INTO :result_str FROM ( SELECT resource_attributes:"snow.executable.name"::VARCHAR name FROM TABLE(RESULT_SCAN(SNOWFLAKE.ALERT.GET_CONDITION_QUERY_UUID())) LIMIT 10 ) ); CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION( SNOWFLAKE.NOTIFICATION.TEXT_PLAIN(:result_str), '{"my_slack_integration": {}}' ); END; - サーバーレスアラートを作成する場合は、WAREHOUSEパラメーターを省略します。 - CREATE OR REPLACE ALERT my_alert IF( EXISTS( SELECT * FROM SNOWFLAKE.TELEMETRY.EVENTS WHERE resource_attributes:"snow.executable.type" = 'DYNAMIC_TABLE' AND record_type='EVENT' AND value:"state"='ERROR' )) THEN BEGIN LET result_str VARCHAR; (SELECT ARRAY_TO_STRING(ARRAY_AGG(name)::ARRAY, ',') INTO :result_str FROM ( SELECT resource_attributes:"snow.executable.name"::VARCHAR name FROM TABLE(RESULT_SCAN(SNOWFLAKE.ALERT.GET_CONDITION_QUERY_UUID())) LIMIT 10 ) ); CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION( SNOWFLAKE.NOTIFICATION.TEXT_PLAIN(:result_str), '{"my_slack_integration": {}}' ); END; - CREATE ALERT コマンドの包括的な説明については、 CREATE ALERT をご参照ください。 - 注釈 - アラートを作成すると、アラートはデフォルトで中断されます。アラートを実行するには、新しく作成したアラートを再開する必要があります。 
- ALTER ALERT ... RESUME コマンドを実行してアラートを再開します。例: - ALTER ALERT my_alert RESUME; 
アラートスケジュールに基づくタイムスタンプの指定¶
場合によっては、アラートスケジュールに基づいて条件またはアクションを定義する必要があります。
たとえば、テーブルに行が追加された時刻を表すタイムスタンプ列があり、正常に評価された最後のアラートと現在スケジュールされているアラートの間に新しい行が追加された場合にアラートを送信するとします。つまり、以下を評価します。
<now> - <last_execution_of_the_alert>
CURRENT_TIMESTAMP とアラートのスケジュールされた時刻を使用してこの時間範囲を計算する場合、計算された範囲には、アラートがスケジュールされた時刻とアラート条件が実際に評価される時刻との間の待ち時間が考慮されません。
代わりに、現在のスケジュールアラートと正常に評価された最後のアラートのタイムスタンプが必要な場合は、次の関数を使用します。
- SCHEDULED_TIME は、現在のアラートがいつスケジュールされたかを表すタイムスタンプを返します。 
- LAST_SUCCESSFUL_SCHEDULED_TIME は、最後に正常に評価されたアラートがスケジュールされた時刻を表すタイムスタンプを返します。 
これらの関数は、 SNOWFLAKE.ALERT スキーマ で定義されています。これらの関数を呼び出すには、 SNOWFLAKE.ALERT_VIEWER データベースロール が付与されたロールを使用する必要があります。このロールを別のロールに付与するには、 GRANT DATABASE ROLE コマンドを使用します。たとえば、このロールをカスタムロール alert_role に付与するには、次を実行します。
GRANT DATABASE ROLE SNOWFLAKE.ALERT_VIEWER TO ROLE alert_role;
次の例では、正常に評価されたアラートが最後にスケジュールされてから現在のアラートがスケジュールされているまでの間に新しい行が my_table に追加された場合に、メールメッセージを送信します。
CREATE OR REPLACE ALERT alert_new_rows
  WAREHOUSE = my_warehouse
  SCHEDULE = '1 MINUTE'
  IF (EXISTS (
      SELECT *
      FROM my_table
      WHERE row_timestamp BETWEEN SNOWFLAKE.ALERT.LAST_SUCCESSFUL_SCHEDULED_TIME()
       AND SNOWFLAKE.ALERT.SCHEDULED_TIME()
  ))
  THEN CALL SYSTEM$SEND_EMAIL(...);
アラートアクションの条件に対するSQLステートメントの結果のチェック¶
アラートのアクションの中で、 SQL ステートメントの結果をチェックする必要がある場合:
- GET_CONDITION_QUERY_UUID 関数を呼び出して、 SQL ステートメントの条件に対するクエリ ID を取得します。 
- クエリ ID を RESULT_SCAN 関数に渡して、 SQL ステートメントの実行結果を取得します。 
例:
CREATE ALERT my_alert
  WAREHOUSE = my_warehouse
  SCHEDULE = '1 MINUTE'
  IF (EXISTS (
    SELECT * FROM my_source_table))
  THEN
    BEGIN
      LET condition_result_set RESULTSET :=
        (SELECT * FROM TABLE(RESULT_SCAN(SNOWFLAKE.ALERT.GET_CONDITION_QUERY_UUID())));
      ...
    END;
手動によるアラートの実行¶
場合によっては、手動でアラートを実行する必要があります。例:
- 新しいアラートを作成する場合、アラートが期待通りに機能するかどうかを確認することをお勧めします。 
- データパイプラインの特定のポイントでアラートを実行したい場合があります。たとえば、ストアドプロシージャの呼び出しの最後にアラートを実行したい場合です。 
アラートを手動で実行するには、 EXECUTE ALERT コマンドを実行します。
EXECUTE ALERT my_alert;
注釈
EXECUTE ALERTを使用して 新しいデータのアラート を実行することはできません。
EXECUTE ALERT コマンドは、アラート用に定義されたスケジュールとは無関係に、アラートの単一実行を手動でトリガーします。
このコマンドはインタラクティブに実行できます。このコマンドは、ストアドプロシージャまたはSnowflakeスクリプトブロック内から実行することもできます。
このコマンドを実行するために必要な権限と、中断、実行中、およびスケジュールされたアラートに対するこのコマンドの効果の詳細については、 EXECUTE ALERT を参照してください。
アラートの中断と再開¶
アラートが一時的に実行されないようにする必要がある場合は、 ALTER ALERT ... SUSPEND コマンドを実行してアラートを中断できます。例:
ALTER ALERT my_alert SUSPEND;
中断したのアラートを再開するには、 ALTER ALERT ... RESUME コマンドを実行します。例:
ALTER ALERT my_alert RESUME;
注釈
アラートの所有者でない場合、アラートを中断または再開するには、アラートの OPERATE 権限が必要です。
アラートの変更¶
アラートのプロパティを変更するには、 ALTER ALERT コマンドを実行します。
注釈
- アラートのプロパティを変更するには、アラートの所有者である必要があります。 
- 新しいデータののアラート を スケジュールのアラート に変更することはできません。同様に、スケジュールのアラートを新しいデータのアラートに変更することもできません。 
例:
- my_alertという名前のアラートのウェアハウスを- my_other_warehouseに変更するには、次のコマンドを実行します。- ALTER ALERT my_alert SET WAREHOUSE = my_other_warehouse; 
- my_alertという名前のアラートが2分ごとに評価されるようにスケジュールを変更するには、次のコマンドを実行します。- ALTER ALERT my_alert SET SCHEDULE = '2 minutes'; 
- my_alertという名前のアラートの条件を変更して、- gaugeという名前のテーブルにある行の- gauge_value列に- 300より大きい値がある場合にアラートを受け取るようにするには、次のコマンドを実行します。- ALTER ALERT my_alert MODIFY CONDITION EXISTS (SELECT gauge_value FROM gauge WHERE gauge_value>300); 
- my_alertという名前のアラートのアクションを- CALL my_procedure()に変更するには、次のコマンドを実行します。- ALTER ALERT my_alert MODIFY ACTION CALL my_procedure(); 
アラートのドロップ¶
アラートをドロップするには、 DROP ALERT コマンドを実行します。例:
DROP ALERT my_alert;
アラートが存在しない場合にエラーを出さずにアラートをドロップするには、次のように実行します。
DROP ALERT IF EXISTS my_alert;
注釈
アラートをドロップするには、アラートの所有者である必要があります。
アラートに関する詳細の表示¶
アカウント、データベース、またはスキーマで作成されたアラートをリストするには、 SHOW ALERTS コマンドを実行します。たとえば、現在のスキーマで作成されたアラートをリストするには、次のコマンドを実行します。
SHOW ALERTS;
このコマンドは、自分が所有するアラートと、 MONITOR または OPERATE 権限を持つアラートをリストします。
特定のアラートに関する詳細を表示するには、 DESCRIBE ALERT コマンドを実行します。例:
DESC ALERT my_alert;
注釈
アラートの所有者でない場合、アラートの詳細を表示するには、アラートの MONITOR または OPERATE 権限が必要です。
アラーとのクローニング¶
アラートをクローンすることができます(CREATE ALERT ... CLONE を使用するか、アラートを含むデータベースまたはスキーマをクローンします)。
サーバレスアラートのクローンを作成する場合、グローバルEXECUTEMANAGEDALERT権限を持つロールを使用する必要はありません。ただし、アラートを所有するロールにEXECUTEMANAGEDALERT権限が付与されるまでは、そのアラートを再開することはできません。
アラートの実行のモニター¶
アラートの実行をモニターするには、次を実行します。
- アラートに対して指定されたアクションの結果を確認します。たとえば、アクションによってテーブルに行が挿入された場合は、テーブルに新しい行があるかどうかを確認できます。 
- 次のいずれかを使用して、アラート実行の履歴を表示します。 - INFORMATION_SCHEMA スキーマの ALERT_HISTORY テーブル関数をクエリします。 - たとえば、過去1時間のアラートの実行を表示するには、次のステートメントを実行します。 - SELECT * FROM TABLE(INFORMATION_SCHEMA.ALERT_HISTORY( SCHEDULED_TIME_RANGE_START =>dateadd('hour',-1,current_timestamp()))) ORDER BY SCHEDULED_TIME DESC; 
- 共有 SNOWFLAKE データベースにある ACCOUNT_USAGE スキーマの ALERT_HISTORY ビューをクエリします。 
 
クエリ履歴では、クエリを実行したユーザーの名前は SYSTEM になります。(アラートは システムサービス によって実行されます。)
サーバーレスアラートのクエリ履歴の表示¶
サーバーレスアラートのクエリ履歴を表示するには、アラートの所有者であるか、アラート自体のMONITORまたはOPERATE権限を持つロールを使用する必要があります。(これは、ウェアハウスのMONITORまたはOPERATOR権限を必要とする、ウェアハウスを使用するアラートとは異なります)。
たとえば、アラート my_alert のクエリ履歴を表示する際に my_alert_role ロールを使用するとします。 my_alert_role が my_alert の所有者でない場合、そのロールに警告に対する MONITOR または OPERATE 権限を 付与 する必要があります。
GRANT MONITOR ON ALERT my_alert TO ROLE my_alert_role;
ロールにこの権限が付与されると、そのロールを使用してアラートのクエリ履歴を表示できます。
USE ROLE my_alert_role;
SELECT query_text FROM TABLE(INFORMATION_SCHEMA.QUERY_HISTORY())
  WHERE query_text LIKE '%Some condition%'
    OR query_text LIKE '%Some action%'
  ORDER BY start_time DESC;