使用 SYSTEM$SEND_SNOWFLAKE_NOTIFICATION 向电子邮件地址和云提供商队列发送通知

备注

所有 Snowflake 客户都可以使用此功能发送电子邮件。通过 Snowflake 的 Amazon Web Services (AWS) 部署,使用 AWS Simple Email Service (SES),处理从通知系统存储过程发送的电子邮件。使用 AWS 发送的电子邮件内容可由 Snowflake 保留最多三十天,以便管理消息的传递。此期限过后,消息内容将会删除。

如果您需要将通知发送到云服务(Amazon SNS、Google Cloud PubSub 或 Azure 事件网格)提供的电子邮件地址或队列,请使用 SYSTEM$SEND_SNOWFLAKE_NOTIFICATION 存储过程。

只需调用一次此存储过程,您就可以:

  • 将消息发送至多种类型的目的地(电子邮件地址和队列)。

  • 向多个电子邮件地址和队列发送消息。

  • 根据通知集成的类型,以指定格式发送消息(对于电子邮件为纯文本或 HTML,对于队列为 JSON)。

例如,只需一次调用,您就可以向多个电子邮件地址和多个 SNS、PubSub 以及事件网格主题,发送纯文本、HTML 和 JSON 格式的消息。

您可以使用多个通知集成,将通知发送到不同的队列。您还可以创建具有不同电子邮件地址和主题行的多个电子邮件通知集成,从而更轻松地为不同的收件人配置电子邮件消息。

发送通知

在发送通知之前,您必须具有将用于发送通知的通知集成。如果您要发送电子邮件通知,您还必须验证收件人的电子邮件地址。有关详细信息,请参阅 Snowflake 中的通知

要向电子邮件地址或队列发送通知,请调用 SYSTEM$SEND_SNOWFLAKE_NOTIFICATION 存储过程,指定要使用的消息和通知集成。

以下是调用此存储过程的示例:

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

如上例所示,您传入 JSON 格式的字符串作为实参,来指定要发送的消息和要使用的通知集成。

有关这些字符串的语法,请参阅 SYSTEM$SEND_SNOWFLAKE_NOTIFICATION

为了构建这些 JSON 格式的字符串,您可以调用辅助函数,例如调用 TEXT_HTML 指定消息,调用 EMAIL_INTEGRATION_CONFIG 指定通知集成、主题行和电子邮件地址。例如:

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

有关可以使用的辅助函数列表,请参阅 SYSTEM$SEND_SNOWFLAKE_NOTIFICATION

覆盖电子邮件通知集成中的默认值

要使用与 电子邮件通知集成中指定的默认值 不同的收件人组或不同的主题行,请设置您传递给 SYSTEM$SEND_SNOWFLAKE_NOTIFICATION 的集成配置对象的以下属性:

  • subject (长度不能超过 256 个字符)

  • toAddress

  • ccAddress

  • bccAddress

例如,使用电子邮件通知集成 my_email_int 并替换主题行、“To:”行、“Cc:”行和“Bcc:”行:

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

要构建 JSON 格式的字符串以用于集成配置,您可以调用 EMAIL_INTEGRATION_CONFIG 辅助函数。

例如,要将主题为“Service down”的电子邮件消息发送到 oncall-a@snowflake.comoncall-b@snowflake.com,请执行以下语句:

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

要在电子邮件消息中包含“Cc:”和“Bcc:”行,需传递额外的实参,这些实参是以电子邮件地址数组的形式给出的:

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

如果您只想设置“抄送:”或“密送:”行(而不是两者全设置),请传入一个空数组或 NULL 作为相应的实参。如果您正在构建 JSON 对象而不使用辅助函数,请省略来自 JSON 对象的 ccAddress 或者 bccAddress 属性。

发送 HTML、纯文本和 JSON 消息

要发送 HTML、纯文本或 JSON 格式的消息,请传入一个包含消息类型作为属性名、消息内容作为属性值的 JSON 对象:

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

"message_type" 可以是以下值之一:

  • "text/html"

  • "text/plain"

  • "application/json"

例如:

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

要构建消息的 JSON 对象,您可以使用以下辅助函数:

以下示例发送一个 HTML 消息,使用 my_email_int 电子邮件通知集成:

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

以下示例发送纯文本消息,使用相同的集成:

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

以下示例发送 JSON 消息到 my_queue_int 通知集成指定的队列。有关为队列创建通知集成的说明,请参阅以下主题:

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

使用多个集成发送通知

在以下情况下,您可以使用多个集成来发送消息:

  • 您希望在同一函数调用中发送电子邮件消息并发送到一个主题。

  • 您想要向不同电子邮件通知集成指定的不同电子邮件地址发送消息。

要使用多个集成,请调用 ARRAY_CONSTRUCT 函数构建一个集成配置数组,并将该数组作为 SYSTEM$SEND_SNOWFLAKE_NOTIFICATION 存储过程的第二个实参传递。

例如,要向队列和在不同通知集成中配置的电子邮件地址发送纯文本消息:

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

备注

该数组不能包含同一通知集成的多个对象。

如果您更喜欢使用辅助函数来构建集成配置,则可以将辅助函数返回的值传递给 ARRAY_CONSTRUCT 函数。例如:

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

以下示例将不同格式的消息发送到队列和电子邮件地址:

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
语言: 中文