Enviando notificações sobre problemas de qualidade de dados

O Snowflake fornece os seguintes recursos que identificam quando o valor retornado por uma função de métrica de dados (Data Metric Function, DMF) indica um problema de qualidade de dados:

  • Expectativas: permitem que você use uma expressão booliana para comparar a saída de uma DMF com um valor esperado. Um valor de retorno que não corresponde à expressão booliana é considerado uma violação de expectativa.

  • Detecção de anomalias: o Snowflake detecta automaticamente quando a saída da DMF constitui uma anomalia. Uma anomalia ocorre quando o valor retornado por uma DMF está acima ou abaixo de um intervalo esperado com base em dados históricos.

Você pode usar uma integração de notificação para enviar uma notificação quando qualquer um desses recursos identificar um problema de qualidade de dados. Depois que o Snowflake é configurado, uma notificação é enviada sempre que uma expectativa é violada ou quando o Snowflake identifica uma anomalia.

Você habilita as notificações no nível do banco de dados. Quando habilitadas, todos os objetos com uma DMF associada nesse banco de dados geram notificações quando há um problema de qualidade. Em um banco de dados com as notificações habilitadas, você pode desativá-las para uma associação específica entre um objeto no banco de dados e uma DMF.

Fluxo de trabalho

A configuração do Snowflake para enviar notificações em caso de problemas de qualidade de dados consiste nas seguintes tarefas:

  1. Crie uma integração de notificação.

  2. Conceder privilégios de controle de acesso ao proprietário do banco de dados.

  3. Modificar o banco de dados para ativar as notificações e especificar a integração de notificação que as enviará.

Para obter um exemplo completo desse fluxo de trabalho, consulte Exemplo estendido.

Criação de uma integração de notificação

Uma integração de notificação é um objeto Snowflake que estabelece a interface entre o Snowflake e os serviços de mensagens de terceiros. Para enviar notificações sobre problemas de qualidade de dados, crie uma integração de notificação para o serviço de mensagens. O monitoramento da qualidade dos dados oferece suporte aos seguintes tipos de notificações:

  • Notificações por e-mail

  • Notificações enviadas por sistemas externos, como Slack, usando webhooks

Enviar notificações por e-mail

Para enviar notificações para uma lista de endereços de e-mail, execute uma instrução CREATE NOTIFICATION INTEGRATION para criar uma integração do tipo EMAIL. A integração deve usar o parâmetro ALLOWED_RECIPIENTS para especificar uma lista dos endereços de e-mail aos quais as notificações são enviadas. Você só pode adicionar endereços de e-mail que sejam verificados. Para obter informações sobre a verificação de um endereço de e-mail, consulte Verificar os endereços de e-mail dos destinatários da notificação por e-mail.

Dica

Você pode enviar notificações por e-mail para uma lista ou grupo de distribuição gerenciado fora do Snowflake. Para obter mais informações, consulte o artigo da base de conhecimento relacionado.

Por exemplo, para criar uma integração de notificação para que o usuário joe.smith@example.com possa receber um e-mail quando houver um problema de qualidade de dados, execute o seguinte comando:

CREATE NOTIFICATION INTEGRATION my_email_int
  TYPE=EMAIL
  ENABLED=TRUE
  ALLOWED_RECIPIENTS = ('joe.smith@example.com');
Copy

Nota

As notificações por e-mail são processadas por meio das implementações do Amazon Web Services (AWS) do Snowflake, usando o AWS Simple Email Service (SES). O conteúdo de uma mensagem de e-mail enviada usando AWS pode ser retido pela Snowflake por até trinta dias para gerenciar a entrega da mensagem. Após esse período, o conteúdo da mensagem é excluído.

Enviar notificações usando um webhook para um sistema externo

Você pode enviar notificações de qualidade de dados por meio de um sistema externo criando uma integração de webhook. Para obter uma lista dos sistemas externos que você pode usar, consulte Envio de notificações de webhook.

Para usar webhooks para enviar notificações de qualidade de dados, conclua as etapas a seguir:

  1. Criar um segredo para um URL de webhook.

  2. Criar uma integração de notificação de webhook.

Por exemplo, se quiser usar o Slack para enviar notificações, você poderá executar os seguintes comandos:

CREATE OR REPLACE SECRET my_slack_webhook_secret
  TYPE = GENERIC_STRING
  SECRET_STRING = 'T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX';

CREATE OR REPLACE NOTIFICATION INTEGRATION my_slack_webhook_int
  TYPE=WEBHOOK
  ENABLED=TRUE
  WEBHOOK_URL='https://hooks.slack.com/services/SNOWFLAKE_WEBHOOK_SECRET'
  WEBHOOK_SECRET=my_db.sch1.my_slack_webhook_secret
  WEBHOOK_BODY_TEMPLATE='{"text": "SNOWFLAKE_WEBHOOK_MESSAGE"}'
  WEBHOOK_HEADERS=('Content-Type'='application/json');
Copy

Privilégios Grant

Para configurar notificações para objetos em um banco de dados, o proprietário do banco de dados deve ter os seguintes privilégios:

  • MANAGE DATA QUALITY na conta

  • USAGE na integração de notificação

Por exemplo, suponha que um usuário com a função data_steward seja proprietário do banco de dados my_db. Para usar a integração de notificação my_email_int para enviar notificações sobre problemas de qualidade descobertos pelas DMFs associadas a tabelas e exibições no my_db, execute os seguintes comandos:

GRANT MANAGE DATA QUALITY ON ACCOUNT TO ROLE data_steward;
GRANT USAGE ON INTEGRATION my_email_int TO ROLE data_steward;
Copy

Definir as configurações de banco de dados para notificações de qualidade de dados

Depois de criar uma integração de notificação e conceder os privilégios necessários, você poderá ativar as notificações para um banco de dados executando a instrução ALTER DATABASE com a propriedade DATA_QUALITY_MONITORING_SETTINGS. Essa propriedade utiliza uma especificação YAML entre cifrões para definir as configurações de notificação.

Ao definir essa propriedade, você controla três aspectos das notificações de qualidade de dados:

  • Se as notificações estão habilitadas ou desabilitadas para o banco de dados.

  • Quais integrações de notificação enviam as notificações. Você pode especificar várias integrações de notificação para enviar notificações por canais diferentes.

  • Se as notificações incluem o nome da tabela ou exibição específica que tem o problema de qualidade de dados. Esses metadados ajudam a identificar e resolver o problema rapidamente.

Por exemplo:

ALTER DATABASE my_db SET DATA_QUALITY_MONITORING_SETTINGS =
  $$
  notification:
    enabled: TRUE
    integrations:
      - EMAIL_NOTIFY_INT
      - WEBHOOK_NOTIFY_INT
    metadata_included: TRUE
  $$
Copy
  • As notificações estão habilitadas para o banco de dados my_db.

  • As notificações são enviadas por duas integrações de notificação: email_notify_int e webhook_notify_int. Isso significa que os problemas de qualidade de dados acionam notificações por meio dos dois canais.

  • As notificações incluem metadados que identificam o objeto e a DMF associada.

Desativar as notificações para uma associação de DMF específica

Por padrão, depois que você ativa as notificações para um banco de dados, os problemas de qualidade de dados em qualquer objeto no banco de dados geram uma notificação. Você pode desativar as notificações para uma associação específica entre um objeto e uma DMF para impedir o envio das notificações. Para desativar as notificações referentes a uma associação, execute a instrução ALTER <object> MODIFY DATA METRIC FUNCTION para definir o parâmetro DATA_QUALITY_NOTIFICATION como FALSE.

Por exemplo, suponha que as notificações estejam ativadas para o banco de dados que contém a exibição v2. Se você não quiser que as notificações sejam enviadas quando a DMF BLANK_COUNT encontrar problemas de qualidade na coluna c1, execute o seguinte comando:

ALTER VIEW v2
  MODIFY DATA METRIC FUNCTION SNOWFLAKE.CORE.BLANK_COUNT ON (c1)
    SET DATA_QUALITY_NOTIFICATION = FALSE;
Copy

Determinar se as notificações estão ativadas

A função DATA_METRIC_FUNCTION_REFERENCES retorna informações sobre a associação entre um objeto e uma DMF. A saída inclui uma coluna data_quality_notification_status, que você pode usar para determinar se as notificações estão ativadas para a associação.

Exemplo estendido

Suponha que você tenha os seguintes itens em sua conta:

  • Um banco de dados my_db que contém duas tabelas (t1 e t2) e uma exibição (v1).

  • As tabelas t1 e t2 associadas à DMF ROW_COUNT, e a detecção de anomalias está ativada para ambas as associações.

  • A função analyst é proprietária do my_db.

  • A exibição v1 está associada à DMF NULL_COUNT, e há uma expectativa definida para a associação.

Você quer que os usuários recebam um e-mail quando houver uma anomalia nas tabelas t1 ou t2, mas não quer que uma notificação seja enviada quando houver um problema de qualidade com a exibição v1.

  1. Crie a integração de notificação que indica quem deve receber notificações em caso de problemas de qualidade de dados:

    CREATE NOTIFICATION INTEGRATION notify_int
      TYPE=EMAIL
      ENABLED=TRUE
      ALLOWED_RECIPIENTS=('joe.smith@example.com');
    
    Copy
  2. Conceda os privilégios na nova integração de notificação para a função analyst, que é proprietária do my_db:

    GRANT MANAGE DATA QUALITY ON ACCOUNT TO ROLE analyst;
    GRANT USAGE ON INTEGRATION notify_int TO ROLE analyst;
    
    Copy
  3. Defina as configurações do banco de dados para ativar as notificações. Essas notificações incluirão o nome do objeto que teve o problema de qualidade de dados.

    ALTER DATABASE my_db SET DATA_QUALITY_MONITORING_SETTINGS =
      $$
      notification:
        enabled: TRUE
        integrations:
          - NOTIFY_INT
        metadata_included: TRUE
      $$
    
    Copy
  4. Desative as notificações para uma associação entre a exibição v1 e a DMF NULL_COUNT:

    ALTER VIEW v1
      MODIFY DATA METRIC FUNCTION SNOWFLAKE.CORE.NULL_COUNT ON (c1)
        SET DATA_QUALITY_NOTIFICATION = FALSE;
    
    Copy