使用数据指标函数执行数据质量检查¶
本主题介绍如何将数据指标函数 (DMF) 与表或视图关联,以便定期执行数据质量检查。它还介绍了如何直接调用 DMF,例如,如果要在将 DMF 与表或视图关联之前对其进行测试。
关联 DMF 以自动执行数据质量检查¶
您可以将 DMF 与表或视图关联,以便定期自动调用它。关联 DMF 时,您指定将哪些列作为实参传递给 DMF。
将 DMF 与表或视图关联以自动执行数据质量检查的过程分为两个步骤:
在表或视图上设置计划,确定 DMFs 的执行频率。在将 DMF 与表或视图关联之前,您必须设置计划。
将 DMF 与表或视图关联。
计划 DMF 运行¶
您可以计划 DMFs 运行,以自动衡量表的数据质量。
Snowflake 使用表所有者角色(即对表具有 OWNERSHIP 权限的角色)调用计划的 DMF。表所有者角色必须具有以下授权:
对用户定义的 DMF 具有 USAGE 权限,以及对用于存储用户定义的 DMF 的数据库和架构具有 USAGE 权限。
DATA_METRIC_USER 数据库角色(如果 DMF 是系统 DMF)。
对账户具有 EXECUTE DATA METRIC FUNCTION 权限。
通过表、视图或物化视图的 DATA_METRIC_SCHEDULE 对象参数,可以计划 DMFs 何时运行。表或视图上的所有数据指标函数都遵循相同的计划。
可以通过三种方法计划 DMF 的运行:
将 DMF 设置为在指定的分钟数后运行。
使用 cron 表达式计划 DMF,使其按特定的频率运行。
使用触发事件计划 DMF 在表发生 :doc:`DML 更改 </sql-reference/sql-dml>`(例如,在表中插入新行)时运行。但是:
例如:
将数据指标函数计划设置为每 5 分钟运行一次:
ALTER TABLE hr.tables.empl_info SET DATA_METRIC_SCHEDULE = '5 MINUTE';
将数据指标函数计划设置为每天 8:00 AM 运行:
ALTER TABLE hr.tables.empl_info SET DATA_METRIC_SCHEDULE = 'USING CRON 0 8 * * * UTC';
将数据指标函数计划设置为仅在工作日的 8:00 AM 运行:
ALTER TABLE hr.tables.empl_info SET DATA_METRIC_SCHEDULE = 'USING CRON 0 8 * * MON,TUE,WED,THU,FRI UTC';
将数据指标函数计划设置为每天在 0600、1200 和 1800 UTC 时间运行三次:
ALTER TABLE hr.tables.empl_info SET DATA_METRIC_SCHEDULE = 'USING CRON 0 6,12,18 * * * UTC';
将数据指标函数设置为在常规 DML 操作(例如插入新行)修改表时运行:
ALTER TABLE hr.tables.empl_info SET DATA_METRIC_SCHEDULE = 'TRIGGER_ON_CHANGES';
您可以使用 SHOW PARAMETERS 命令查看支持的表对象的 DMF 计划:
SHOW PARAMETERS LIKE 'DATA_METRIC_SCHEDULE' IN TABLE hr.tables.empl_info;+----------------------+--------------------------------+---------+-------+------------------------------------------------------------------------------------------------------------------------------+--------+ | key | value | default | level | description | type | +----------------------+--------------------------------+---------+-------+------------------------------------------------------------------------------------------------------------------------------+--------+ | DATA_METRIC_SCHEDULE | USING CRON 0 6,12,18 * * * UTC | | TABLE | Specify the schedule that data metric functions associated to the table must be executed in order to be used for evaluation. | STRING | +----------------------+--------------------------------+---------+-------+------------------------------------------------------------------------------------------------------------------------------+--------+
对于视图和物化视图对象,将 TABLE
指定为对象域并按如下方式检查计划:
SHOW PARAMETERS LIKE 'DATA_METRIC_SCHEDULE' IN TABLE mydb.public.my_view;
备注
从修改表的 DMF 开始,会有 10 分钟的滞后,以便任何计划变更对分配给表的先前 DMFs 生效。但是,新分配到表的 DMF 不受 10 分钟延迟的限制。请仔细规划 DMF 计划和 DMF 取消设置操作,以符合您的预期 DMF 成本。
此外,当您评估 DMF 结果(如查询 DATA_QUALITY_MONITORING_RESULTS 视图)时,请在查询中指定 measurement_time
列作为评估的基础。DMF 评估由一个内部流程启动,在计划时间和测量时间之间可能会出现表更新(如 INSERT 操作)。使用 measurement_time
列时,可以更准确地评估 DMF 结果,因为测量时间可以指示 DMF 的评估时间。
将 DMF 与表关联¶
使用 ALTER TABLE 或 ALTER VIEW 命令关联 DMF 并指定哪些列作为实参传递。例如,以下命令将系统 DMF NULL_COUNT
与表 t
关联。DMF 执行时,它将返回 c1
列中的 NULL 值的数量。
ALTER TABLE t
ADD DATA METRIC FUNCTION SNOWFLAKE.CORE.NULL_COUNT
ON (c1);
备注
使用 ALTER VIEW 命令在物化视图列上添加 DMF,或从物化视图列中删除 DMF。
从对象中删除 DMF¶
您可以使用 ALTER TABLE 或 ALTER VIEW 命令删除 DMF。例如:
ALTER TABLE t DROP DATA METRIC FUNCTION governance.dmfs.count_positive_numbers ON (c1, c2, c3);
手动调用 DMF¶
直接调用 DMF 有助于测试 DMF 的输出,然后将其与表或视图关联。
使用以下语法调用 DMF:
SELECT <data_metric_function>(<query>)
其中:
data_metric_function
指定系统定义或用户定义的 DMF。
query
指定对表或视图进行 SQL 查询。
查询投射的列必须与 DMF 签名中的列实参匹配。
例如,要调用接受三个列作为实参的自定义 DMF count_positive_numbers
,请执行以下命令:
SELECT governance.dmfs.count_positive_numbers(
SELECT c1, c2, c3
FROM t);
例如,要调用 NULL_COUNT(系统数据指标函数) 系统 DMF 以查看 ssn
列中 NULL 值的数量,请执行以下操作:
SELECT SNOWFLAKE.CORE.NULL_COUNT(
SELECT ssn
FROM hr.tables.empl_info);