Uso de SYSTEM$SEND_SNOWFLAKE_NOTIFICATION para enviar notificações

Nota

Todos os clientes do Snowflake podem enviar mensagens de e-mail usando esse recurso. As mensagens de e-mail enviadas do procedimento armazenado do sistema de notificações são processadas por meio das implantações do Amazon Web Services do Snowflake (AWS) usando 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.

Se você precisar enviar notificações para um endereço de e-mail, um webhook ou uma fila fornecida por um serviço de nuvem (Amazon SNS, Google Cloud PubSub ou Azure Event Grid), use o procedimento armazenado SYSTEM$SEND_SNOWFLAKE_NOTIFICATION.

Com uma única chamada a este procedimento armazenado, você pode:

  • Enviar uma mensagem para vários tipos de destinos (endereços de e-mail, webhooks e filas).

  • Enviar uma mensagem para vários endereços de e-mail, webhooks e filas.

  • Enviar uma mensagem em um formato específico, de acordo com o tipo de integração de notificação (texto simples ou HTML para e-mail e JSON para filas).

Por exemplo, com uma única chamada, você pode enviar mensagens em texto simples, formatos HTML e JSON para vários endereços de e-mail e vários tópicos SNS, PubSub e Event Grid.

Você pode usar várias integrações de notificação para enviar a notificação para diferentes filas. Você também pode criar várias integrações de notificação por e-mail que tenham diferentes conjuntos de endereços de e-mail e linhas de assunto, facilitando a configuração de mensagens de e-mail para diferentes destinatários.

Enviar uma notificação

Antes de enviar uma notificação, você deve ter uma integração de notificação que será usada para enviar a notificação. Se você estiver enviando uma notificação por e-mail, é necessário validar os endereços de e-mail dos destinatários. Para obter mais detalhes, consulte Notificações no Snowflake.

Para enviar uma notificação para endereços de e-mail ou filas, chame o procedimento armazenado SYSTEM$SEND_SNOWFLAKE_NOTIFICATION, especificando as mensagens e integrações de notificação a serem usadas.

A seguir está um exemplo de uma chamada para este procedimento armazenado:

CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION(
   -- Message type and content.
  '{ "text/html": "<p>This is a message.</p>" }',
  -- Integration used to send the notification and values used for the subject and recipients.
  -- These values override the defaults specified in the integration.
  '{
    "my_email_int": {
      "subject": "Status update",
      "toAddress": ["person_a@example.com", "person_b@example.com"],
      "ccAddress": ["person_c@example.com"],
      "bccAddress": ["person_d@example.com"]
    }
  }'
);
Copy

Conforme mostrado no exemplo acima, você passa cadeias de caracteres no formato JSON como argumentos para especificar a mensagem a ser enviada e a integração de notificação a ser usada.

Para a sintaxe dessas cadeias de caracteres, consulte SYSTEM$SEND_SNOWFLAKE_NOTIFICATION.

Para criar essas cadeias de caracteres no formato JSON, é possível chamar funções auxiliares como TEXT_HTML para especificar a mensagem e EMAIL_INTEGRATION_CONFIG para especificar a integração de notificação, linha de assunto e endereços de e-mail. Por exemplo:

CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION(
  SNOWFLAKE.NOTIFICATION.TEXT_HTML('<p>a message</p>'),
  SNOWFLAKE.NOTIFICATION.EMAIL_INTEGRATION_CONFIG(
    'my_email_int',
    'Status update',
    ARRAY_CONSTRUCT('person_a@example.com', 'person_b@example.com'),
    ARRAY_CONSTRUCT('person_c@example.com'),
    ARRAY_CONSTRUCT('person_d@example.com')
  )
);
Copy

Para obter a lista de funções auxiliares que você pode usar, consulte SYSTEM$SEND_SNOWFLAKE_NOTIFICATION.

Substituir os valores padrão na integração de notificação por e-mail

Para usar um conjunto diferente de destinatários ou uma linha de assunto diferente do padrão especificado na integração de notificação por e-mail, defina as seguintes propriedades do objeto de configuração de integração que você passa para SYSTEM$SEND_SNOWFLAKE_NOTIFICATION:

  • subject (não pode exceder 256 caracteres de comprimento)

  • toAddress

  • ccAddress

  • bccAddress

Por exemplo, para usar a integração de notificação por e-mail my_email_int e substituir a linha de assunto, a linha “To:”, a linha “Cc:” e a linha “Cco:”:

CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION(
  '{ "text/html": "<p>This is a message.</p>" }',
  '{
    "my_email_int": {
      "subject": "Status update",
      "toAddress": ["person_a@example.com", "person_b@example.com"],
      "ccAddress": ["person_c@example.com"],
      "bccAddress": ["person_d@example.com"]
    }
  }'
);
Copy

Para construir a cadeia de caracteres no formato JSON para a configuração de integração, você pode chamar a função EMAIL_INTEGRATION_CONFIG auxiliar.

Por exemplo, para enviar a mensagem de e-mail para oncall-a@snowflake.com e oncall-b@snowflake.com com o assunto “Service down”, execute a seguinte instrução:

CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION(
  SNOWFLAKE.NOTIFICATION.TEXT_PLAIN('Your message'),
  SNOWFLAKE.NOTIFICATION.EMAIL_INTEGRATION_CONFIG(
    'my_email_int,
    'Service down',
    ARRAY_CONSTRUCT('oncall-a@example.com', 'oncall-b@example.com')
  )
);
Copy

Para incluir as linhas “Cc:” e “Bcc:” na mensagem de e-mail, passe argumentos adicionais com matrizes de endereços de e-mail para essas linhas:

CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION(
  SNOWFLAKE.NOTIFICATION.TEXT_PLAIN('Your message'),
  SNOWFLAKE.NOTIFICATION.EMAIL_INTEGRATION_CONFIG(
    'my_email_int,
    'Service down',
    ARRAY_CONSTRUCT('oncall-a@example.com', 'oncall-b@example.com'),
    ARRAY_CONSTRUCT('cc-a@example.com', 'cc-b@example.com'),
    ARRAY_CONSTRUCT('bcc-a@example.com', 'bcc-b@example.com')
  )
);
Copy

Se você deseja definir apenas a linha “Cc:” ou “Bcc:” (não ambas), passe uma matriz vazia ou NULL aos argumentos correspondentes. Se estiver construindo o objeto JSON sem usar a função auxiliar, omita a propriedade ccAddress ou bccAddress do objeto JSON.

Enviar HTML, texto simples e mensagens JSON

Para enviar uma mensagem em HTML, texto simples ou JSON, passe um objeto JSON com o tipo de mensagem como o nome da propriedade e a mensagem como o valor da propriedade:

'{ "<message_type>": "<message>" }'
Copy

"message_type" pode ser um dos seguintes valores:

  • "text/html"

  • "text/plain"

  • "application/json"

Por exemplo:

CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION(
  '{ "text/html": "<p>This is a message.</p>" }',
  '{ "my_email_int": {} }'
);
Copy

Para construir o objeto JSON para a mensagem, é possível usar as seguintes funções auxiliares:

O exemplo a seguir envia uma mensagem HTML, usando a integração de notificação por e-mail my_email_int:

CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION(
  SNOWFLAKE.NOTIFICATION.TEXT_HTML('<p>a message</p>'),
  SNOWFLAKE.NOTIFICATION.INTEGRATION('my_email_int')
);
Copy

O exemplo a seguir envia uma mensagem de texto simples, usando a mesma integração:

CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION(
  SNOWFLAKE.NOTIFICATION.TEXT_PLAIN('A message'),
  SNOWFLAKE.NOTIFICATION.INTEGRATION('my_email_int')
);
Copy

O exemplo a seguir envia uma mensagem JSON para a fila especificada pela integração de notificações my_queue_int. Para obter instruções sobre como criar uma integração de notificação para uma fila, consulte os seguintes tópicos:

CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION(
  SNOWFLAKE.NOTIFICATION.APPLICATION_JSON('{ "name": "value" }'),
  SNOWFLAKE.NOTIFICATION.INTEGRATION('my_sns_int')
);
Copy

Enviar uma notificação usando várias integrações

Você pode usar várias integrações para enviar mensagens quando:

  • Deseja enviar uma mensagem por e-mail e para um tópico na mesma chamada de função.

  • Deseja enviar uma mensagem para diferentes endereços de e-mail especificados por diferentes integrações de notificação por e-mail.

Para usar integrações múltiplas, chame a função ARRAY_CONSTRUCT para criar uma matriz de configurações de integração e passar a matriz como o segundo argumento do procedimento armazenado SYSTEM$SEND_SNOWFLAKE_NOTIFICATION.

Por exemplo, para enviar uma mensagem de texto simples para uma fila e endereços de e-mail configurados em diferentes integrações de notificação:

CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION(
  '{"text/plain":"A message"}',
  ARRAY_CONSTRUCT(
    '{"my_sns_int":{}}',
    '{"my_email_int":{}}',
 )
);
Copy

Nota

A matriz não pode conter mais de um objeto para a mesma integração de notificação.

Se você preferir usar as funções auxiliares para construir as configurações de integração, poderá passar os valores retornados pelas funções auxiliares para a função ARRAY_CONSTRUCT. Por exemplo:

CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION(
  SNOWFLAKE.NOTIFICATION.TEXT_PLAIN('A message'),
  ARRAY_CONSTRUCT(
    SNOWFLAKE.NOTIFICATION.INTEGRATION('my_sns_int'),
    SNOWFLAKE.NOTIFICATION.INTEGRATION('my_email_int')
  )
);
Copy

O exemplo a seguir envia mensagens em diferentes formatos para uma fila e endereços de e-mail:

CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION(
  ARRAY_CONSTRUCT(
    SNOWFLAKE.NOTIFICATION.TEXT_PLAIN('A message'),
    SNOWFLAKE.NOTIFICATION.TEXT_HTML('<p>A message</p>'),
    SNOWFLAKE.NOTIFICATION.APPLICATION_JSON('{ "name": "value" }')
  ),
  ARRAY_CONSTRUCT(
    SNOWFLAKE.NOTIFICATION.INTEGRATION('my_sns_int'),
    SNOWFLAKE.NOTIFICATION.INTEGRATION('my_email_int')
  )
);
Copy