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;
Copy
+-------------------------+------------------+--------------------------------------+---------------------------------------------------------------------------------+
| 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;
Copy
+-------------------------+-----------------+-------------------------+-------+----------+-------------------------------------------------+-------+------------------+-------------+-----------------------------+-------------------+-------------------------------+-----------+
| 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;
    
    Copy

    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;
    
    Copy

    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;
    
    Copy

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.

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:

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;
Copy

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

TIMESTAMP_NTZ

O carimbo de data/hora UTC em que um evento foi criado.

observed_timestamp

TIMESTAMP_NTZ

Uma hora UTC usada para registros. Atualmente, esse é o mesmo valor que está na coluna timestamp.

resource_attributes

OBJECT

Atributos que identificam a tabela dinâmica que foi atualizada.

record_type

STRING

O tipo de evento, que é EVENT para atualizações dinâmicas de tabelas.

record

OBJECT

Detalhes sobre o status da atualização da tabela dinâmica.

value

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

snow.database.id

INTEGER

O identificador interno/gerado pelo sistema do banco de dados que contém a tabela dinâmica.

12345

snow.database.name

VARCHAR

O nome do banco de dados que contém a tabela dinâmica.

MY_DATABASE

snow.executable.id

INTEGER

O identificador interno/gerado pelo sistema da tabela dinâmica que foi atualizada.

12345

snow.executable.name

VARCHAR

O nome da tabela dinâmica que foi atualizada.

MY_DYNAMIC_TABLE

snow.executable.type

VARCHAR

O tipo do objeto. O valor é DYNAMIC_TABLE para eventos de tabela dinâmica.

DYNAMIC_TABLE

snow.owner.id

INTEGER

O identificador interno/gerado pelo sistema da função com o privilégio OWNERSHIP na tabela dinâmica.

12345

snow.owner.name

VARCHAR

O nome da função com o privilégio OWNERSHIP na tabela dinâmica.

MY_ROLE

snow.owner.type

VARCHAR

O tipo de função que possui o objeto, por exemplo ROLE. . Se um Snowflake Native App possui o objeto, o valor é APPLICATION. . Snowflake retorna NULL se você excluir o objeto porque um objeto excluído não tem uma função de proprietário.

ROLE

snow.query.id

VARCHAR

ID da consulta que atualizou a tabela dinâmica.

01ba7614-0107-e56c-0000-a995024f304a

snow.schema.id

INTEGER

O identificador interno/gerado pelo sistema do esquema que contém a tabela dinâmica.

12345

snow.schema.name

VARCHAR

O nome do esquema que contém a tabela dinâmica.

MY_SCHEMA

snow.warehouse.id

INTEGER

O identificador interno/gerado pelo sistema do warehouse usado para atualizar a tabela dinâmica.

12345

snow.warehouse.name

VARCHAR

O nome do warehouse usado para atualizar a tabela dinâmica.

MY_WAREHOUSE

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

name

VARCHAR

O nome do evento. O valor é refresh_status para atualizações dinâmicas de tabelas.

refresh_status

severity_text

VARCHAR

O nível de gravidade do evento, que é um dos seguintes valores:

  • INFO: a atualização foi bem-sucedida.

  • ERROR: a atualização falhou.

  • WARN: a atualização de uma tabela dinâmica upstream falhou.

INFO

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

state

VARCHAR

O estado da atualização, que pode ser um dos seguintes valores:

  • SUCCEEDED: a atualização foi bem-sucedida.

  • ERROR: a atualização falhou.

  • UPSTREAM_FAILURE: a atualização falhou devido a uma falha na atualização de uma tabela dinâmica da qual essa tabela dinâmica depende.

SUCCEEDED

message

VARCHAR

Se o valor em state for ERROR, essa coluna incluirá a mensagem de erro.

SQL compilation error:\nFailure during expansion of view 'MY_DYNAMIC_TABLE': SQL compilation error:\nObject 'MY_DB.MY_SCHEMA.MY_BASE_TABLE' does not exist or not authorized.