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"]
}
}'
);
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')
)
);
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"]
}
}'
);
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')
)
);
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')
)
);
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>" }'
"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": {} }'
);
Para construir o objeto JSON para a mensagem, é possível usar as seguintes funções auxiliares:
Para uma mensagem HTML, chamada TEXT_HTML.
Para uma mensagem de texto simples, chame TEXT_HTML.
Para uma mensagem JSON, chame APPLICATION_JSON.
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')
);
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')
);
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')
);
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":{}}',
)
);
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')
)
);
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')
)
);