发送数据质量问题通知¶
Snowflake 提供的以下功能可用于识别数据指标函数 (DMF) 返回的值何时表明存在数据质量问题:
预期值 – 允许您使用布尔表达式将 DMF 的输出值与预期值进行比较。与布尔表达式不匹配的返回值被视为违反预期。
异常检测 – Snowflake 会自动检测 DMF 的输出是否构成异常。当 DMF 返回的值高于或低于基于历史数据的预期范围时,即发生异常。
当上述任一功能识别出数据质量问题时,您可以使用通知集成发送通知。配置 Snowflake 后,只要违反期望或 Snowflake 发现异常,就会发送通知。
您可以在数据库级别启用通知。启用后,该数据库中所有具有关联 DMF 的对象在出现质量问题时都会生成通知。在已启用通知的数据库中,您可以针对数据库中某个对象与 DMF 之间的特定关联关闭通知。
工作流程¶
配置 Snowflake 以发送数据质量问题通知包括以下任务:
有关此工作流程的端到端示例,请参阅 扩展示例。
创建通知集成¶
通知集成是 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 发送数据质量通知,请完成以下步骤:
例如,如果要使用 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 规范来定义通知设置。
设置此属性时,您可以控制数据质量通知的三个方面:
是否为该数据库启用或禁用通知。
使用哪些 通知集成 发送通知。您可以指定多个通知集成,以便通过不同的渠道发送通知。
通知是否包含存在数据质量问题的特定表或视图的名称。此元数据有助于快速识别并解决问题。
例如:
ALTER DATABASE my_db SET DATA_QUALITY_MONITORING_SETTINGS = $$ notification: enabled: TRUE integrations: - EMAIL_NOTIFY_INT - WEBHOOK_NOTIFY_INT metadata_included: TRUE $$
已为数据库
my_db启用通知。通知将通过两个通知集成发送:
email_notify_int和webhook_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;
确定通知是否已开启¶
DATA_METRIC_FUNCTION_REFERENCES 函数会返回有关对象与 DMF 之间关联的信息。输出包含 data_quality_notification_status 列,可用于判断该通知是否已开启。
扩展示例¶
假设您的账户中包含以下项目:
数据库
my_db包含两个表(t1和t2)以及一个视图 (v1)。表
t1和t2与 ROW_COUNT DMF 相关联,且这两个关联均已开启异常检测。角色
analyst是my_db的所有者。视图
v1与 NULL_COUNT DMF 相关联,且该关联已定义了期望值。
您希望当表 t1 或 t2 出现异常时用户能收到电子邮件通知,但不希望在视图 v1 出现质量问题时发送通知。
创建通知集成,用于指定当出现数据质量问题时由谁接收通知:
CREATE NOTIFICATION INTEGRATION notify_int TYPE=EMAIL ENABLED=TRUE ALLOWED_RECIPIENTS=('joe.smith@example.com');
将新通知集成的 :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;
配置数据库设置 以开启通知。这些通知将包含出现数据质量问题的对象的名称。
ALTER DATABASE my_db SET DATA_QUALITY_MONITORING_SETTINGS = $$ notification: enabled: TRUE integrations: - NOTIFY_INT metadata_included: TRUE $$
针对视图
v1与 NULL_COUNT DMF 之间的关联 关闭通知:ALTER VIEW v1 MODIFY DATA METRIC FUNCTION SNOWFLAKE.CORE.NULL_COUNT ON (c1) SET DATA_QUALITY_NOTIFICATION = FALSE;