Monitoramento de tabelas de eventos e alertas para tabelas dinâmicas¶
Este tópico discute como consultar uma tabela de eventos que fornece informações sobre seu status de atualização e como configurar alertas sobre novos dados em uma tabela de eventos.
Consulte uma tabela de eventos para monitorar as atualizações¶
Quando uma tabela dinâmica é atualizada, você pode configurar o Snowflake para registrar um evento que forneça informações sobre o status da operação de atualização. O evento é registrado na tabela de evento ativa associada à tabela dinâmica.
Por exemplo, suponha que você tenha associado uma tabela de eventos a um banco de dados. Quando uma tabela dinâmica nesse banco de dados é atualizada, o Snowflake registra um evento nessa tabela de evento.
Você pode consultar os eventos registrados nessa tabela de evento ativa para monitorar as atualizações da tabela dinâmica.
Por exemplo, para obter o carimbo de data/hora, o nome da tabela dinâmica, o ID de consulta e a mensagem de erro para erros com tabelas dinâmicas no banco de dados my_db
, faça o seguinte:
SELECT
timestamp,
resource_attributes:"snow.executable.name"::VARCHAR AS dt_name,
resource_attributes:"snow.query.id"::VARCHAR AS query_id,
value:message::VARCHAR AS error
FROM my_event_table
WHERE
resource_attributes:"snow.executable.type" = 'DYNAMIC_TABLE' AND
resource_attributes:"snow.database.name" = 'MY_DB' AND
value:state = 'FAILED'
ORDER BY timestamp DESC;
+-------------------------+------------------+--------------------------------------+---------------------------------------------------------------------------------+
| TIMESTAMP | DT_NAME | QUERY_ID | ERROR |
|-------------------------+------------------+--------------------------------------+---------------------------------------------------------------------------------|
| 2025-02-17 21:40:45.444 | MY_DYNAMIC_TABLE | 01ba7614-0107-e56c-0000-a995024f304a | SQL compilation error: |
| | | | Failure during expansion of view 'MY_DYNAMIC_TABLE': SQL compilation error: |
| | | | Object 'MY_DB.MY_SCHEMA.MY_BASE_TABLE' does not exist or not authorized. |
+-------------------------+------------------+--------------------------------------+---------------------------------------------------------------------------------+
O exemplo a seguir recupera todas as colunas de erros upstream com tabelas dinâmicas no esquema my_schema
:
SELECT *
FROM my_event_table
WHERE
resource_attributes:"snow.executable.type" = 'DYNAMIC_TABLE' AND
resource_attributes:"snow.schema.name" = 'MY_SCHEMA' AND
value:state = 'UPSTREAM_FAILURE'
ORDER BY timestamp DESC;
+-------------------------+-----------------+-------------------------+-------+----------+-------------------------------------------------+-------+------------------+-------------+-----------------------------+-------------------+-------------------------------+-----------+
| TIMESTAMP | START_TIMESTAMP | OBSERVED_TIMESTAMP | TRACE | RESOURCE | RESOURCE_ATTRIBUTES | SCOPE | SCOPE_ATTRIBUTES | RECORD_TYPE | RECORD | RECORD_ATTRIBUTES | VALUE | EXEMPLARS |
|-------------------------+-----------------+-------------------------+-------+----------+-------------------------------------------------+-------+------------------+-------------+-----------------------------+-------------------+-------------------------------+-----------|
| 2025-02-17 21:40:45.486 | NULL | 2025-02-17 21:40:45.486 | NULL | NULL | { | NULL | NULL | EVENT | { | NULL | { | NULL |
| | | | | | "snow.database.id": 49, | | | | "name": "refresh.status", | | "state": "UPSTREAM_FAILURE" | |
| | | | | | "snow.database.name": "MY_DB", | | | | "severity_text": "WARN" | | } | |
| | | | | | "snow.executable.id": 487426, | | | | } | | | |
| | | | | | "snow.executable.name": "MY_DYNAMIC_TABLE_2", | | | | | | | |
| | | | | | "snow.executable.type": "DYNAMIC_TABLE", | | | | | | | |
| | | | | | "snow.owner.id": 2601, | | | | | | | |
| | | | | | "snow.owner.name": "DATA_ADMIN", | | | | | | | |
| | | | | | "snow.owner.type": "ROLE", | | | | | | | |
| | | | | | "snow.schema.id": 411, | | | | | | | |
| | | | | | "snow.schema.name": "MY_SCHEMA" | | | | | | | |
| | | | | | } | | | | | | | |
+-------------------------+-----------------+-------------------------+-------+----------+-------------------------------------------------+-------+------------------+-------------+-----------------------------+-------------------+-------------------------------+-----------+
Para obter informações sobre a função que você precisa usar para consultar a tabela de eventos e as condições que podem ser usadas para filtrar os resultados, consulte Configure um alerta sobre novos dados.
Configure alertas sobre novos dados para monitorar as atualizações¶
Conforme mencionado anteriormente, quando uma tabela dinâmica é atualizada, um evento é registrado na tabela de eventos para indicar se a atualização foi bem-sucedida ou não. Você pode configurar um alerta sobre novos dados para monitorar a tabela de eventos. Você pode configurar o alerta para enviar uma notificação quando houver falha na atualização.
As próximas seções explicam como configurar o registro de eventos para capturar os eventos, como configurar o alerta e como interpretar os eventos registrados na tabela de eventos:
Nota
O registro de eventos para tabelas dinâmicas gera custos. Consulte Custos da coleta de dados de telemetria.
Defina o nível de gravidade dos eventos a serem capturados¶
Nota
Se você não definir o nível de gravidade, nenhum evento será capturado.
Para configurar os eventos da tabela dinâmica a serem registrados na tabela de eventos, defina o nível de gravidade dos eventos que você deseja capturar na tabela de eventos. Os eventos são capturados nos seguintes níveis:
ERROR
: atualizar eventos de falha.WARN
: falhas na atualização de tabelas dinâmicas upstream e eventos de falha de atualização.INFO
: eventos de atualização bem-sucedidos, falhas na atualização de tabelas dinâmicas upstream e eventos de falha de atualização.
Para definir o nível, defina o parâmetro LOG_LEVEL para a conta ou o objeto. Você pode definir o nível para:
Todos os objetos da conta.
Todos os objetos em um banco de dados ou esquema.
Uma tabela dinâmica específica.
Por exemplo:
Para capturar eventos e mensagens ao nível de ERROR para todos os objetos da conta, execute ALTER ACCOUNT SET LOG_LEVEL:
ALTER ACCOUNT SET LOG_LEVEL = ERROR;
Observe que esse nível afeta todos os tipos de objetos na conta, inclusive UDFs, procedimentos armazenados, tabelas dinâmicas e tarefas.
Para capturar eventos e mensagens ao nível de INFO para todos os objetos no banco de dados
my_db
, execute ALTER DATABASE … SET LOG_LEVEL:ALTER DATABASE my_db SET LOG_LEVEL = INFO;
De modo semelhante ao caso da definição do nível na conta, a configuração do nível no banco de dados afeta todos os tipos de objetos no banco de dados, inclusive UDFs, procedimentos armazenados, tabelas dinâmicas e tarefas.
Para capturar eventos ao nível WARN da tabela dinâmica
my_dynamic_table
, execute ALTER DYNAMIC TABLE … SET LOG_LEVEL:ALTER DYNAMIC TABLE my_dynamic_table SET LOG_LEVEL = WARN;
Configure um alerta sobre novos dados¶
Após definir o nível de gravidade dos eventos de registro, você pode configurar um alerta sobre novos dados para monitorar a tabela de eventos em busca de novos eventos que indiquem uma falha em uma atualização dinâmica da tabela. Um alerta sobre novos dados é acionado quando novas linhas na tabela de eventos são inseridas e atendem à condição especificada no alerta.
Nota
Para criar o alerta sobre novos dados, você deve usar uma função que tenha recebido os privilégios necessários para consultar a tabela de eventos.
Se a condição de alerta consultar a tabela de eventos padrão (SNOWFLAKE.TELEMETRY.EVENTS) ou a exibição predefinida (exibição SNOWFLAKE.TELEMETRY.EVENTS_VIEW), consulte Funções para acesso à tabela de evento padrão e EVENTS_VIEW.
Para gerenciar o acesso à exibição EVENTS_VIEW, consulte Gerenciar o acesso à exibição EVENTS_VIEW.
Se a condição de alerta consultar uma tabela de eventos personalizada, consulte Privilégios de controle de acesso para tabelas de evento.
Para gerenciar o acesso a uma tabela de eventos personalizada, consulte Gerenciamento de acesso a dados de tabela de eventos.
Na condição de alerta, para consultar os eventos da tabela dinâmica, selecione as linhas em que resource_attributes:"snow.executable.type" = 'DYNAMIC_TABLE'
. Para restringir a lista de eventos, você pode filtrar nas seguintes colunas:
Para restringir os resultados a tabelas dinâmicas em um banco de dados específico, use
resource_attributes:"snow.database.name"
.Para retornar eventos em que a atualização falhou devido a um erro na tabela dinâmica, use
value:state = 'FAILED'
.Para retornar eventos em que a atualização falhou devido a um erro em uma tabela dinâmica upstream, use
value:state = 'UPSTREAM_FAILURE'
.
Para obter informações sobre os valores registrados para um evento de tabela dinâmica, consulte Informações registradas para eventos de tabela dinâmica.
Por exemplo, a instrução a seguir cria um alerta sobre novos dados que executa uma ação quando as atualizações falham para tabelas dinâmicas no banco de dados my_db
. O exemplo pressupõe que:
Sua tabela de eventos ativa é a tabela de eventos padrão (SNOWFLAKE.TELEMETRY.EVENTS).
Você configurou uma integração de notificação por webhook para esse canal do Slack.
CREATE ALERT my_alert_on_dt_refreshes
IF( EXISTS(
SELECT * FROM SNOWFLAKE.TELEMETRY.EVENT_TABLE
WHERE resource_attributes:"snow.executable.type" = 'dynamic_table'
AND resource_attributes:"snow.database.name" = 'my_db'
AND record_attributes:"event.name" = 'refresh.status'
AND record:"severity_text" = 'ERROR'
AND value:"state" = 'FAILED'))
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;
Informações registradas para eventos de tabela dinâmica¶
Quando uma tabela dinâmica é atualizada, um evento é registrado na tabela de eventos. As seções a seguir descrevem a linha da tabela de eventos que representa o evento:
Valores da coluna da tabela de eventos¶
Quando uma tabela dinâmica é atualizada, uma linha com os seguintes valores é inserida na tabela de eventos.
Nota
Se uma coluna não estiver listada abaixo, o valor da coluna será NULL para o evento.
Coluna |
Tipo de dados |
Descrição |
---|---|---|
|
TIMESTAMP_NTZ |
O carimbo de data/hora UTC em que um evento foi criado. |
|
TIMESTAMP_NTZ |
Uma hora UTC usada para registros. Atualmente, esse é o mesmo valor que está na coluna |
|
OBJECT |
Atributos que identificam a tabela dinâmica que foi atualizada. |
|
STRING |
O tipo de evento, que é |
|
OBJECT |
Detalhes sobre o status da atualização da tabela dinâmica. |
|
VARIANT |
O status da atualização da tabela dinâmica e, se a atualização falhar, a mensagem de erro da falha. |
Pares chave-valor na coluna resource_attributes
¶
A coluna resource_attributes
contém um valor OBJECT com os seguintes pares chave-valor:
Nome de atributo |
Tipo de atributo |
Descrição |
Exemplo |
---|---|---|---|
|
INTEGER |
O identificador interno/gerado pelo sistema do banco de dados que contém a tabela dinâmica. |
|
|
VARCHAR |
O nome do banco de dados que contém a tabela dinâmica. |
|
|
INTEGER |
O identificador interno/gerado pelo sistema da tabela dinâmica que foi atualizada. |
|
|
VARCHAR |
O nome da tabela dinâmica que foi atualizada. |
|
|
VARCHAR |
O tipo do objeto. O valor é |
|
|
INTEGER |
O identificador interno/gerado pelo sistema da função com o privilégio OWNERSHIP na tabela dinâmica. |
|
|
VARCHAR |
O nome da função com o privilégio OWNERSHIP na tabela dinâmica. |
|
|
VARCHAR |
O tipo de função que possui o objeto, por exemplo |
|
|
VARCHAR |
ID da consulta que atualizou a tabela dinâmica. |
|
|
INTEGER |
O identificador interno/gerado pelo sistema do esquema que contém a tabela dinâmica. |
|
|
VARCHAR |
O nome do esquema que contém a tabela dinâmica. |
|
|
INTEGER |
O identificador interno/gerado pelo sistema do warehouse usado para atualizar a tabela dinâmica. |
|
|
VARCHAR |
O nome do warehouse usado para atualizar a tabela dinâmica. |
|
Pares chave-valor na coluna record
¶
A coluna record
contém um valor OBJECT com os seguintes pares chave-valor:
Chave |
Tipo |
Descrição |
Exemplo |
---|---|---|---|
|
VARCHAR |
O nome do evento. O valor é |
|
|
VARCHAR |
O nível de gravidade do evento, que é um dos seguintes valores:
|
|
Pares chave-valor na coluna value
¶
A coluna value
contém um valor VARIANT com os seguintes pares chave-valor:
Chave |
Tipo |
Descrição |
Exemplo |
---|---|---|---|
|
VARCHAR |
O estado da atualização, que pode ser um dos seguintes valores:
|
|
|
VARCHAR |
Se o valor em |
|