发送数据质量问题通知

Snowflake 提供的以下功能可用于识别数据指标函数 (DMF) 返回的值何时表明存在数据质量问题:

  • 预期值 – 允许您使用布尔表达式将 DMF 的输出值与预期值进行比较。与布尔表达式不匹配的返回值被视为违反预期。

  • 异常检测 – Snowflake 会自动检测 DMF 的输出是否构成异常。当 DMF 返回的值高于或低于基于历史数据的预期范围时,即发生异常。

当这两个功能中的任何一个识别出数据质量问题时,您都可以发送通知。配置 Snowflake 后,只要违反期望或 Snowflake 发现异常,就会发送通知。

您可以在数据库级别启用通知。启用后,该数据库中所有具有关联 DMF 的对象在出现质量问题时都会生成通知。在已启用通知的数据库中,您可以针对数据库中某个对象与 DMF 之间的特定关联关闭通知。

工作流程

配置 Snowflake 以发送数据质量问题通知包括以下任务:

  1. 配置接收通知的人员

  2. 授予访问控制权限 给数据库所有者。

  3. 修改数据库以 配置并开启通知功能

有关此工作流程的端到端示例,请参阅 扩展示例

配置接收通知的人员

通过直接添加电子邮件地址或创建通知集成来定义通知接收人。

通知集成是 Snowflake 对象,它在 Snowflake 与第三方消息服务之间提供接口。要发送数据质量问题通知,请为消息服务创建通知集成。数据质量监控支持以下类型的通知:

  • 电子邮件通知

  • 通过 Webhook 使用 Slack 等外部系统发送的通知。

如果您想在不创建电子邮件集成的情况下添加电子邮件地址,请参阅 为数据质量通知配置数据库设置

通过电子邮件发送通知

要向电子邮件地址列表发送通知,请执行 CREATE NOTIFICATION INTEGRATION 语句,以创建类型为 EMAIL 的集成。您的集成必须使用 ALLOWED_RECIPIENTS 参数,指定接收通知的电子邮件地址列表。您只能添加已验证的电子邮件地址。有关验证电子邮件地址的信息,请参阅 验证电子邮件通知收件人的电子邮件地址

小技巧

您可以向在 Snowflake 外部管理的分发列表或组发送电子邮件通知。有关更多信息,请参阅相关 知识库文章 (https://community.snowflake.com/s/article/How-to-send-Alerts-and-Notifications-to-an-email-distribution-list-or-group-and-manage-the-group-membership-outside-of-Snowflake)。

例如,要创建通知集成,以便在存在数据质量问题时向用户 joe.smith@example.com 发送电子邮件,请运行以下命令:

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

备注

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

使用外部系统的 Webhook 发送通知

您可以通过创建 Webhook 集成,通过外部系统发送数据质量通知。有关可使用的外部系统列表,请参阅 发送 Webhook 通知

要使用 Webhook 发送数据质量通知,请完成以下步骤:

  1. 为 Webhook URL 创建密钥

  2. 创建 Webhook 通知集成

例如,如果要使用 Slack 发送通知,可以运行以下命令:

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');

授予权限

要为数据库中的对象设置通知,数据库所有者必须具备以下权限:

  • 对账户的 MANAGE DATA QUALITY 权限

  • 在任何用于发送通知的通知集成上拥有 USAGE 权限。仅当使用通知集成时才需要这样做。

例如,假设拥有 data_steward 角色的用户是数据库 my_db 的所有者。若要使用通知集成 my_email_int,针对与 my_db 中的表和视图相关联的 DMFs 所发现的质量问题发送通知,请运行以下命令:

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

为数据质量通知配置数据库设置

您可以通过运行带有 DATA_QUALITY_MONITORING_SETTINGS 属性的 ALTER DATABASE 语句来为数据库开启通知功能。该属性使用 美元符号引用的 YAML 规范来定义通知设置。

DATA_QUALITY_MONITORING_SETTINGS 指定了数据质量通知的以下几个方面:

  • 是否为该数据库启用或禁用通知。

  • 哪些电子邮件地址接收通知(在未集成通知的情况下指定)。

  • 指定哪些 :doc:`通知集成 </sql-reference/sql/create-notification-integration>`(如有)用于发送通知。您可以指定多个通知集成,以便通过不同的渠道发送通知。

  • 发送通知的频率。

  • 通知是否包含存在数据质量问题的特定表或视图的名称。此元数据有助于快速识别并解决问题。

例如:

ALTER DATABASE my_db SET DATA_QUALITY_MONITORING_SETTINGS =
  $$
  notification:
    enabled: TRUE
    email_recipients: [ 'joe@example.com', 'mary@example.com']
    integrations:
      - WEBHOOK_NOTIFY_INT
    cooldown_hours: 4
    metadata_included: TRUE
  $$;

此示例指定以下配置:

  • 已为数据库 my_db 启用通知。

  • 通知将发送到两个电子邮件地址和一个外部通道。

  • 通知的发送频率不会超过每四个小时一次。

  • 通知包含用于标识对象及其关联 DMF 的元数据。

关闭特定 DMF 关联的通知

默认情况下,在为数据库开启通知后,数据库内任何对象产生的数据质量问题都会生成通知。您可以针对对象与 DMF 之间的特定关联关闭通知,以防止发送通知。若要关闭关联的通知,请运行 ALTER <object> MODIFY DATA METRIC FUNCTION 语句,将 DATA_QUALITY_NOTIFICATION 参数设置为 FALSE。

例如,假设已为包含视图 v2 的数据库启用了通知。如果您不希望在 BLANK_COUNT DMF 发现列 c1 的质量问题时发送通知,请运行以下命令:

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

确定通知是否已开启

DATA_METRIC_FUNCTION_REFERENCES 函数会返回有关对象与 DMF 之间关联的信息。输出包含 data_quality_notification_status 列,可用于判断该通知是否已开启。

扩展示例

假设您的账户中包含以下项目:

  • 数据库 my_db 包含两个表(t1t2)以及一个视图 (v1)。

  • t1t2 与 ROW_COUNT DMF 相关联,且这两个关联均已开启异常检测。

  • 角色 analystmy_db 的所有者。

  • 视图 v1 与 NULL_COUNT DMF 相关联,且该关联已定义了期望值。

您希望当表 t1t2 出现异常时用户能收到电子邮件通知,但不希望在视图 v1 出现质量问题时发送通知。

备注

此示例演示如何使用通知集成来指定电子邮件地址。您还可以在运行 ALTER DATABASE 命令时直接指定电子邮件地址。

  1. 创建通知集成,用于指定当出现数据质量问题时由谁接收通知:

    CREATE NOTIFICATION INTEGRATION notify_int
      TYPE=EMAIL
      ENABLED=TRUE
      ALLOWED_RECIPIENTS=('joe.smith@example.com');
    
  2. 向角色 analyst``(即 ``my_db 的拥有者):ref:授予权限 <label-data_quality_notifications_grant>

    GRANT MANAGE DATA QUALITY ON ACCOUNT TO ROLE analyst;
    GRANT USAGE ON INTEGRATION notify_int TO ROLE analyst;
    
  3. 配置数据库设置 以开启通知。这些通知将包含出现数据质量问题的对象的名称。

    ALTER DATABASE my_db SET DATA_QUALITY_MONITORING_SETTINGS =
      $$
      notification:
        enabled: TRUE
        integrations:
          - NOTIFY_INT
        metadata_included: TRUE
      $$
    
  4. 针对视图 v1 与 NULL_COUNT DMF 之间的关联 关闭通知

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