Configuração de alertas com base em dados no Snowflake¶
Este tópico explica como configurar um alerta que periodicamente executa uma ação sob condições específicas, com base em dados dentro do Snowflake.
Introdução¶
Em alguns casos, você pode querer ser notificado ou tomar medidas quando os dados no Snowflake atenderem a certas condições. Por exemplo, você pode querer receber uma notificação quando:
O uso de crédito do warehouse aumenta em uma porcentagem especificada de sua cota atual.
O consumo de recursos para suas pipelines, tarefas, exibições materializadas etc. aumenta além de uma quantidade especificada.
Seus dados não cumprem uma regra comercial específica que você definiu.
Para fazer isso, você pode configurar um alerta do Snowflake. Um alerta do Snowflake é um objeto em nível de esquema que especifica:
Uma condição que aciona o alerta (por exemplo, a presença de consultas que levam mais de um segundo para serem concluídas).
A ação a ser executada quando a condição for atendida (por exemplo, enviar uma notificação por e-mail, capturar alguns dados em uma tabela etc.).
Quando e com que freqüência a condição deve ser avaliada (por exemplo, a cada 24 horas, todos os domingos à meia-noite etc.).
Por exemplo, suponha que você queira enviar uma notificação por e-mail quando o consumo de crédito exceder um determinado limite para um warehouse. Suponha que você queira verificar isso a cada 30 minutos. Você pode criar um alerta com as seguintes propriedades:
Condição: o consumo de crédito para um warehouse (a soma da coluna
credits_used
na exibição WAREHOUSE_METERING_HISTORY no esquema ACCOUNT_USAGE) excede um limite especificado.Ação: enviar um e-mail ao administrador.
Frequência/programação: verifique esta condição a cada 30 minutos.
Escolha do tipo de alerta¶
Você pode criar os seguintes tipos de alertas:
Alerta em um cronograma: o Snowflake avalia a condição em relação aos dados existentes com base em cronograma.
Por exemplo, você pode configurar um alerta em um cronograma para verificar se alguma das linhas existentes em uma tabela tem um valor de coluna que excede um valor especificado.
Alerta sobre novos dados: o Snowflake avalia a condição em relação a qualquer nova linha em uma tabela ou exibição especificada.
Por exemplo, você pode configurar um alerta sobre novos dados para notificá-lo quando novas linhas de mensagens de erro forem inseridas na tabela de eventos de sua conta. Como as atualizações dinâmicas da tabela e as execuções de tarefas registram eventos na tabela de eventos, você pode configurar um alerta sobre novos dados:
Alertas em um cronograma¶
Com um alerta em um cronograma, você pode definir um alerta para ser executado a cada n
minutos ou em um cronograma especificado por uma expressão cron.
A condição do alerta é avaliada em todos os dados (ao contrário dos alertas sobre novos dados, em que as condições são avaliadas somente em relação às novas linhas que foram inseridas).
Alertas sobre novos dados¶
Com um alerta sobre novos dados, você pode configurar um alerta para ser executado somente quando novas linhas forem inseridas em uma tabela ou disponibilizadas em uma exibição.
Sempre que novas linhas são inseridas, o alerta é executado, avaliando a condição em relação apenas às novas linhas e executando a ação se a condição for avaliada como TRUE.
Se você quiser avaliar uma condição em linhas recém-inseridas, use um alerta em novos dados, em vez de configurar um alerta em um cronograma (que é executado em um cronograma fixo, independentemente de os dados terem sido adicionados ou não).
Como o alerta opera somente em linhas recém-inseridas em uma tabela ou exibição, há restrições quanto à condição que você pode especificar:
Na instrução SELECT, a cláusula FROM pode especificar apenas uma tabela regular, uma exibição ou uma tabela de eventos.
Você deve ativar o controle de alterações nessa tabela ou exibição.
Você não pode usar:
Chamadas para procedimentos armazenados
Junções
Nota
Você não pode usar o comando EXECUTE ALERT para executar um alerta sobre novos dados.
Escolha do warehouse para alertas¶
Um alerta requer um warehouse para execução. Você pode usar o modelo de computação sem servidor ou um warehouse virtual que você especifica.
Uso do modelo de computação sem servidor (alertas sem servidor)¶
Alertas que usam o modelo de computação sem servidor chamado alertas sem servidor. Se você usar o modelo de computação sem servidor, o Snowflake irá redimensionar e escalar automaticamente os recursos de computação necessários para o alerta. O Snowflake determina o tamanho ideal dos recursos de computação para uma determinada execução com base em uma análise dinâmica de estatísticas para as execuções mais recentes do mesmo alerta. O tamanho máximo para uma execução de alerta sem servidor é equivalente a um warehouse XXLARGE. Múltiplos carregamentos de trabalho em sua conta possuem um conjunto comum de recursos de computação.
O faturamento é semelhante a outros recursos sem servidor (como tarefas sem servidor). Consulte Explicação dos custos dos alertas.
Nota
Se estiver criando um alerta sobre novos dados que são adicionados com pouca frequência, considere a possibilidade de configurá-lo como um alerta sem servidor. Se você configurar o alerta para usar um warehouse, até mesmo uma simples ação que envia uma notificação por e-mail incorre em pelo menos um minuto de custo de warehouse.
Uso de um warehouse virtual especificado por você¶
Se você deseja especificar um warehouse virtual, deve escolher um warehouse com o tamanho adequado para ações SQL executadas pelo alerta. Para obter orientações sobre como escolher um warehouse, consulte Considerações sobre warehouses.
Explicação dos custos dos alertas¶
Os custos associados à execução de um alerta para execução de código SQL difere dependendo dos recursos de computação usados para o alerta:
Para alertas sem servidor, o Snowflake cobra sua conta com base no uso de recursos de computação. As cobranças são calculadas com base em seu uso total dos recursos, incluindo o uso do serviço de nuvem, medido em uso de créditos de horas de computação. O custo das horas de computação muda com base no tamanho do warehouse e no tempo de execução da consulta. Para obter mais informações, consulte Uso de crédito sem servidor.
Para saber quantos créditos são consumidos pelos alertas, consulte a “Tabela de créditos de recursos sem servidor” na Tabela de consumo de serviços do Snowflake.
Para visualizar o histórico de uso dos alertas sem servidor, é possível:
Chame a função SERVERLESS_ALERT_HISTORY.
Consultar Exibição SERVERLESS_ALERT_HISTORY.
Para alertas que usarem um warehouse virtual especificado por você, o Snowflake cobra sua conta por uso de crédito com base no uso do warehouse quando um alerta estiver em execução. Isso é semelhante ao uso do warehouse para executar as mesmas instruções SQL em um cliente ou no Snowsight. O faturamento de crédito por segundo e a suspensão automática do warehouse lhe dão a flexibilidade de começar com tamanhos de warehouse maiores e depois ajustar o tamanho para corresponder às cargas de trabalho de seus alertas.
Dica
Se você quiser configurar um alerta que avalie as novas linhas adicionadas a uma tabela ou exibição, use um alerta sobre novos dados, em vez de um alerta em um cronograma. Um alerta em um cronograma será executado em um horário programado, independentemente de novas linhas terem sido inseridas ou não.
Concessão de privilégios para criar alertas¶
A fim de criar um alerta, você deve usar uma função que tenha os seguintes privilégios:
O privilégio EXECUTEALERT na conta.
Nota
Este privilégio só pode ser concedido por um usuário com a função ACCOUNTADMIN.
Um dos seguintes privilégios:
O privilégio EXECUTE MANAGED ALERT na conta, se você estiver criando um alerta sem servidor.
O privilégio USAGE no warehouse usado para executar o alerta, se você estiver especificando um warehouse virtual para o alerta.
Os privilégios USAGE e CREATE ALERT no esquema no qual se deseja criar o alerta.
O privilégio USAGE no banco de dados contendo o esquema.
O privilégio SELECT na tabela ou exibição que você deseja consultar na condição de alerta (se estiver criando um alerta sobre novos dados).
Para conceder estes privilégios a uma função, use o comando GRANT <privilégios> … TO ROLE.
Por exemplo, suponha que você queira criar uma função personalizada chamada my_alert_role
que tenha os privilégios de criar um alerta no esquema chamado my_schema
. Você quer que o alerta use o warehouse my_warehouse
.
Para fazer isso:
Para ter um usuário com a função ACCOUNTADMIN, faça o seguinte:
-
Por exemplo:
USE ROLE ACCOUNTADMIN; CREATE ROLE my_alert_role;
Conceda o privilégio global EXECUTE ALERT a essa função personalizada.
Por exemplo:
GRANT EXECUTE ALERT ON ACCOUNT TO ROLE my_alert_role;
Se você quiser criar um alerta sem servidor, conceda o privilégio global EXECUTE MANAGED ALERT a essa função personalizada.
Por exemplo:
GRANT EXECUTE MANAGED ALERT ON ACCOUNT TO ROLE my_alert_role;
Conceda a função personalizada a um usuário.
Por exemplo:
GRANT ROLE my_alert_role TO USER my_user;
-
Fazer com que os proprietários do banco de dados, esquema e warehouse concedam os privilégios necessários para criar o alerta para a função personalizada:
O proprietário do esquema deve conceder os privilégios CREATE ALERT e USAGE no esquema:
GRANT CREATE ALERT ON SCHEMA my_schema TO ROLE my_alert_role; GRANT USAGE ON SCHEMA my_schema TO ROLE my_alert_role;
O proprietário do banco de dados deve conceder o privilégio USAGE no banco de dados:
GRANT USAGE ON DATABASE my_database TO ROLE my_alert_role;
Se você quiser especificar um warehouse para o alerta, o proprietário desse warehouse deve conceder o privilégio USAGE no warehouse:
GRANT USAGE ON WAREHOUSE my_warehouse TO ROLE my_alert_role;
Como criar um alerta¶
As seções a seguir fornecem as etapas básicas e um exemplo de criação de diferentes tipos de alertas:
Criação de um alerta em um cronograma¶
Suponha que sempre que uma ou mais linhas em uma tabela chamada gauge
tiver um valor na coluna gauge_value
que exceda 200, você queira inserir o carimbo de data/hora atual em uma tabela chamada gauge_value_exceeded_history
.
Você pode criar um alerta para isso:
Avalia a condição que
gauge_value
excede 200.Insere o carimbo de data/hora em
gauge_value_exceeded_history
se esta condição for avaliada como verdadeira.
Para criar um alerta chamado my_alert
que faz isso:
Verifique se você está usando uma função que tenha os privilégios para criar um alerta.
Se você não estiver usando essa função, execute o comando USE ROLE para usar essa função.
Verifique se você está usando o banco de dados e o esquema em que planeja criar o alerta.
Se você não estiver usando esse banco de dados e esquema, execute os comandos USE DATABASE e USE SCHEMA para usar esse banco de dados e esquema.
Execute o comando CREATE ALERT para criar o alerta:
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());
Se quiser criar um alerta sem servidor, omita o parâmetro 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());
Para a descrição completa do comando CREATE ALERT, consulte CREATE ALERT.
Nota
Quando você cria um alerta, o alerta é suspenso por padrão. Você deve retomar o alerta recém-criado para que o alerta possa ser executado.
Retomar o alerta executando o comando ALTER ALERT … RESUME. Por exemplo:
ALTER ALERT my_alert RESUME;
Criação de um alerta sobre novos dados¶
Suponha que você queira receber uma notificação por e-mail quando um procedimento armazenado chamado my_stored_proc
no banco de dados e no esquema my_db.my_schema
registrar uma mensagem FATAL na tabela de eventos ativos da sua conta.
Para criar um alerta chamado my_alert
que faz isso:
Encontre o nome da tabela de eventos ativa de sua conta:
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 | +-------------+---------------------------+----------------------------+---------+-----------------------------------------+--------+
Habilite o controle de alterações na tabela ou exibição que você planeja consultar na condição de alerta.
ALTER TABLE my_db.my_schema.my_events SET CHANGE_TRACKING = TRUE;
Verifique se você está usando uma função que tenha os privilégios para criar um alerta.
Se você não estiver usando essa função, execute o comando USE ROLE para usar essa função.
Verifique se você está usando o banco de dados e o esquema no qual você planeja criar o alerta.
Se você não estiver usando esse banco de dados e esquema, execute os comandos USE DATABASE e USE SCHEMA para usar esse banco de dados e esquema.
Execute o comando CREATE ALERT para criar o alerta e omita o parâmetro SCHEDULE.
Por exemplo, o exemplo a seguir cria um alerta sobre novos dados que monitora a tabela de eventos em busca de erros nas atualizações dinâmicas da tabela e envia uma notificação para um canal do Slack. O exemplo pressupõe o seguinte:
Sua tabela de eventos ativa é a tabela de eventos padrão (SNOWFLAKE.TELEMETRY.EVENTS).
Você definiu o nível de gravidade para capturar eventos da sua tabela dinâmica.
Você configurou uma integração de notificação por webhook para esse canal do Slack.
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_ARG(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;
Se quiser criar um alerta sem servidor, omita o parâmetro 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_ARG(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;
Para a descrição completa do comando CREATE ALERT, consulte CREATE ALERT.
Nota
Quando você cria um alerta, o alerta é suspenso por padrão. Você deve retomar o alerta recém-criado para que o alerta possa ser executado.
Retomar o alerta executando o comando ALTER ALERT … RESUME. Por exemplo:
ALTER ALERT my_alert RESUME;
Especificação de carimbos de data/hora com base nos cronogramas de alerta¶
Em alguns casos, talvez seja necessário definir uma condição ou ação com base no cronograma de alerta.
Por exemplo, suponha que uma tabela tenha uma coluna de carimbo de data/hora que represente quando uma linha foi adicionada, e você deseja enviar um alerta se alguma nova linha foi adicionada entre o último alerta que foi avaliado com sucesso e o alerta programado atual. Em outras palavras, você quer avaliar:
<now> - <last_execution_of_the_alert>
Se você usar CURRENT_TIMESTAMP e a hora programada do alerta para calcular este intervalo de tempo, o intervalo calculado não contabiliza a latência entre a hora que o alerta é programado e a hora em que a condição de alerta é realmente avaliada.
Em vez disso, quando você precisar dos carimbos de data/hora do alerta do horário atual e do último alerta que foi avaliado com sucesso, use as seguintes funções:
SCHEDULED_TIME retorna o carimbo de data/hora que representa quando o alerta atual foi programado.
LAST_SUCCESSFUL_SCHEDULED_TIME retorna o carimbo de data/hora que representa quando o último alerta avaliado com sucesso foi programado.
Estas funções estão definidas no esquema SNOWFLAKE.ALERT. Para chamar estas funções, você precisa usar uma função que tenha sido concedida à função SNOWFLAKE.ALERT_VIEWER do banco de dados. Para conceder esta função a outra função, use o comando GRANT DATABASE ROLE. Por exemplo, para conceder esta função à função personalizada alert_role
, execute:
GRANT DATABASE ROLE SNOWFLAKE.ALERT_VIEWER TO ROLE alert_role;
O exemplo a seguir envia uma mensagem de e-mail se alguma nova linha for adicionada ao my_table
entre a hora em que o último alerta avaliado com sucesso foi programado e a hora em que o alerta atual foi programado:
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(...);
Verificação dos resultados da instrução SQL para a condição na ação de alerta¶
Dentro da ação de um alerta, se você precisar verificar os resultados da instrução SQL para a condição:
Chame a função GET_CONDITION_QUERY_UUID para obter o ID da consulta da instrução SQL da condição.
Passe o ID da consulta para a função RESULT_SCAN para obter os resultados da execução dessa instrução SQL.
Por exemplo:
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;
Execução manual de alertas¶
Em alguns casos, pode ser necessário executar um alerta manualmente. Por exemplo:
Se estiver criando um novo alerta, talvez você queira verificar se o alerta funciona conforme o esperado.
Talvez você queira executar o alerta em um ponto específico do pipeline de dados. Por exemplo, talvez você queira executar o alerta no fim de uma chamada de procedimento armazenado.
Para executar um alerta manualmente, execute o comando EXECUTE ALERT:
EXECUTE ALERT my_alert;
Nota
Você não pode usar EXECUTE ALERT para executar um alerta em novos dados.
O comando EXECUTE ALERT aciona manualmente uma única execução de um alerta, independentemente da programação definida para o alerta.
Você pode executar este comando interativamente. Você também pode executar este comando de dentro de um procedimento armazenado ou de um bloco do Script Snowflake.
Para obter detalhes sobre os privilégios necessários para executar esse comando e o efeito dele em alertas suspensos, em execução e programados, consulte EXECUTE ALERT.
Suspensão e retomada de um alerta¶
Se você precisar impedir que um alerta seja executado temporariamente, você pode suspender o alerta executando o comando ALTER ALERT … SUSPEND. Por exemplo:
ALTER ALERT my_alert SUSPEND;
Para retomar um alerta suspenso, execute o comando ALTER ALERT … RESUME. Por exemplo:
ALTER ALERT my_alert RESUME;
Nota
Se você não for o proprietário do alerta, deverá ter o privilégio OPERATE no alerta para suspender ou retomar o alerta.
Modificação de um alerta¶
Para modificar as propriedades de um alerta, execute o comando ALTER ALERT.
Nota
Você deve ser o proprietário do alerta para modificar as propriedades do alerta.
Você não pode alterar um alerta sobre novos dados para um alerta em um cronograma. Da mesma forma, você não pode alterar um alerta em um cronograma para um alerta em novos dados.
Por exemplo:
Para mudar o warehouse para o alerta chamado
my_alert
paramy_other_warehouse
, execute:ALTER ALERT my_alert SET WAREHOUSE = my_other_warehouse;
Para mudar a programação do alerta chamado
my_alert
a ser avaliado a cada 2 minutos, execute:ALTER ALERT my_alert SET SCHEDULE = '2 minutes';
Para alterar a condição do alerta chamado
my_alert
para que você seja alertado se alguma linha da tabela chamadagauge
tiver valores maiores que300
na colunagauge_value
, execute:ALTER ALERT my_alert MODIFY CONDITION EXISTS (SELECT gauge_value FROM gauge WHERE gauge_value>300);
Para mudar a ação do alerta chamado
my_alert
paraCALL my_procedure()
, execute:ALTER ALERT my_alert MODIFY ACTION CALL my_procedure();
Descarte de um alerta¶
Para descartar um alerta, execute o comando DROP ALERT. Por exemplo:
DROP ALERT my_alert;
Para descartar um alerta sem gerar um erro se o alerta não existir, execute:
DROP ALERT IF EXISTS my_alert;
Nota
Você deve ser o proprietário do alerta para descartá-lo.
Visualização de detalhes sobre um alerta¶
Para listar os alertas que foram criados em uma conta, banco de dados ou esquema, execute o comando SHOW ALERTS. Por exemplo, para listar os alertas que foram criados no esquema atual, execute o seguinte comando:
SHOW ALERTS;
Este comando lista os alertas que você possui e os alertas nos quais você tem privilégio MONITOR ou OPERATE.
Para ver os detalhes sobre um alerta específico, execute o comando DESCRIBE ALERT. Por exemplo:
DESC ALERT my_alert;
Nota
Se você não for o proprietário do alerta, deverá ter o privilégio MONITOR ou OPERATE no alerta para visualizar os detalhes do alerta.
Como clonar um alerta¶
Você pode clonar um alerta (usando CREATE ALERT … CLONE ou clonando o banco de dados ou esquema com o alerta).
Se você estiver clonando um alerta sem servidor, não precisará usar uma função com o privilégio global EXECUTE MANAGED ALERT. No entanto, você não poderá retomar esse alerta até que a função proprietária do alerta tenha recebido o privilégio EXECUTE MANAGED ALERT.
Monitoramento da execução de alertas¶
Para monitorar a execução dos alertas, você pode:
Verificar os resultados da ação que foi especificada para o alerta. Por exemplo, se a ação tiver inserido linhas em uma tabela, você poderá verificar a existência de novas linhas na tabela.
Veja o histórico das execuções de alerta usando uma das seguintes opções:
A função de tabela ALERT_HISTORY no esquema INFORMATION_SCHEMA.
Por exemplo, para ver as execuções de alertas na última hora, execute a seguinte instrução:
SELECT * FROM TABLE(INFORMATION_SCHEMA.ALERT_HISTORY( SCHEDULED_TIME_RANGE_START =>dateadd('hour',-1,current_timestamp()))) ORDER BY SCHEDULED_TIME DESC;
A exibição ALERT_HISTORY no esquema ACCOUNT_USAGE no banco de dados SNOWFLAKE compartilhado.
No histórico de consultas, o nome do usuário que executou a consulta será SYSTEM. (Os alertas são executados pelo serviço do sistema.)
Visualização do histórico de consultas de um alerta sem servidor¶
Para visualizar o histórico de consultas de um alerta sem servidor, você deve ser o proprietário do alerta ou deve usar uma função com o privilégio MONITOR ou OPERATE no próprio alerta. (Isso difere dos alertas que usam um de seus warehouses, o que exige o privilégio MONITOR ou OPERATOR no warehouse.)
Por exemplo, suponha que você queira usar a função my_alert_role
ao visualizar o histórico de consulta do alerta my_alert
. Se my_alert_role
não for a proprietária de my_alert
, você deve conceder a essa função o privilégio MONITOR ou OPERATE no alerta:
GRANT MONITOR ON ALERT my_alert TO ROLE my_alert_role;
Depois que a função receber esse privilégio, você poderá usá-la para visualizar o histórico de consultas do alerta:
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;