发送数据质量问题通知

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

备注

通过 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');
Copy

授予权限

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

  • 对账户的 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;
Copy

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

在创建通知集成并授予必要权限后,您可以通过运行带有 DATA_QUALITY_MONITORING_SETTINGS 属性的 ALTER DATABASE 语句,为数据库开启通知。该属性使用 美元符号引用的 YAML 规范来定义通知设置。

设置此属性时,您可以控制数据质量通知的三个方面:

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

  • 使用哪些 通知集成 发送通知。您可以指定多个通知集成,以便通过不同的渠道发送通知。

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

例如:

ALTER DATABASE my_db SET DATA_QUALITY_MONITORING_SETTINGS =
  $$
  notification:
    enabled: TRUE
    integrations:
      - EMAIL_NOTIFY_INT
      - WEBHOOK_NOTIFY_INT
    metadata_included: TRUE
  $$
Copy
  • 已为数据库 my_db 启用通知。

  • 通知将通过两个通知集成发送:email_notify_intwebhook_notify_int。这意味着数据质量问题将通过这两个渠道触发通知。

  • 通知包含用于标识对象及其关联 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;
Copy

确定通知是否已开启

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 出现质量问题时发送通知。

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

    CREATE NOTIFICATION INTEGRATION notify_int
      TYPE=EMAIL
      ENABLED=TRUE
      ALLOWED_RECIPIENTS=('joe.smith@example.com');
    
    Copy
  2. 将新通知集成的 :ref:` 权限授予 <label-data_quality_notifications_grant>` 角色 analyst,该角色是 my_db 的所有者:

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

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

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