使用数据指标函数执行数据质量检查

本主题介绍如何将数据指标函数 (DMF) 与表或视图关联,以便定期执行数据质量检查。它还介绍了如何直接调用 DMF,例如,如果要在将 DMF 与表或视图关联之前对其进行测试。

关联 DMF 以自动执行数据质量检查

您可以将 DMF 与表或视图关联,以便定期自动调用它。关联 DMF 时,您指定将哪些列作为实参传递给 DMF。

Use an ALTER TABLE or ALTER VIEW command to associate a DMF and specify which columns are passed as arguments. For example, the following command associates the NULL_COUNT system DMF with table t. When the DMF runs, it will return the number of NULL values in the column c1.

ALTER TABLE t
  ADD DATA METRIC FUNCTION SNOWFLAKE.CORE.NULL_COUNT
    ON (c1);
Copy

有些 DMFs 不接受列作为参数。例如,要将 ROW_COUNT 系统 DMF 与视图 v2 关联,请运行以下命令:

ALTER VIEW v2
  ADD DATA METRIC FUNCTION SNOWFLAKE.CORE.ROW_COUNT
    ON ();
Copy

ACCEPTED_VALUES DMF 包含一个 lambda 表达式以及列名,这使您能够检查有多少记录不符合预期值。例如,以下语句将该函数与表 t1 关联,使函数返回 age 列值 等于五的记录数。

ALTER TABLE t1
  ADD DATA METRIC FUNCTION SNOWFLAKE.CORE.ACCEPTED_VALUES ON (age, age -> age = 5);
Copy

从对象中删除 DMF

您可以使用 ALTER TABLE 或 ALTER VIEW 命令删除 DMF。例如:

ALTER TABLE t
  DROP DATA METRIC FUNCTION governance.dmfs.count_positive_numbers
    ON (c1, c2, c3);
Copy

调整 DMFs 的计划

The DATA_METRIC_SCHEDULE object parameter for a table, view, or materialized view controls how often DMFs run. By default, the schedule is set to one hour. All data metric functions on a table or view follow the same schedule.

You can use the following approaches to schedule your DMF to run:

  • 将 DMF 设置为在指定的分钟数后运行。

  • 使用 cron 表达式计划 DMF,使其按特定的频率运行。

  • 使用触发事件计划 DMF 在表发生 :doc:`DML 更改 </sql-reference/sql-dml>`(例如,在表中插入新行)时运行。但是:

    • 表的重聚类 不会触发 DMF 运行。

    • 触发方法只适用于某些类型的表。有关更多信息,请参阅 :ref:`ALTER TABLE ...<label-alter_table_data_metric_function_action> ` 。

例如:

将数据指标函数计划设置为每 5 分钟运行一次:

ALTER TABLE hr.tables.empl_info SET
  DATA_METRIC_SCHEDULE = '5 MINUTE';
Copy

将数据指标函数计划设置为每天 8:00 AM 运行:

ALTER TABLE hr.tables.empl_info SET
  DATA_METRIC_SCHEDULE = 'USING CRON 0 8 * * * UTC';
Copy

将数据指标函数计划设置为仅在工作日的 8:00 AM 运行:

ALTER TABLE hr.tables.empl_info SET
  DATA_METRIC_SCHEDULE = 'USING CRON 0 8 * * MON,TUE,WED,THU,FRI UTC';
Copy

将数据指标函数计划设置为每天在 0600、1200 和 1800 UTC 时间运行三次:

ALTER TABLE hr.tables.empl_info SET
  DATA_METRIC_SCHEDULE = 'USING CRON 0 6,12,18 * * * UTC';
Copy

将数据指标函数设置为在常规 DML 操作(例如插入新行)修改表时运行:

ALTER TABLE hr.tables.empl_info SET
  DATA_METRIC_SCHEDULE = 'TRIGGER_ON_CHANGES';
Copy

您可以使用 SHOW PARAMETERS 命令查看支持的表对象的 DMF 计划:

SHOW PARAMETERS LIKE 'DATA_METRIC_SCHEDULE' IN TABLE hr.tables.empl_info;
Copy
+----------------------+--------------------------------+---------+-------+------------------------------------------------------------------------------------------------------------------------------+--------+
| 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;
Copy

备注

从修改表的 DMF 开始,会有 10 分钟的滞后,以便任何计划变更对分配给表的先前 DMFs 生效。但是,新分配到表的 DMF 不受 10 分钟延迟的限制。请仔细规划 DMF 计划和 DMF 取消设置操作,以符合您的预期 DMF 成本

此外,当您评估 DMF 结果(如查询 DATA_QUALITY_MONITORING_RESULTS 视图)时,请在查询中指定 measurement_time 列作为评估的基础。DMF 评估由一个内部流程启动,在计划时间和测量时间之间可能会出现表更新(如 INSERT 操作)。使用 measurement_time 列时,可以更准确地评估 DMF 结果,因为测量时间可以指示 DMF 的评估时间。

暂停 DMFs

您可以暂停 DMF 以防止它运行,即使与表关联也可以暂停。或者,您可以使用一个语句,暂停与表关联的所有 DMFs。

  • **要暂停与表关联的特定 DMF **,请修改关联以设置 SUSPEND 参数。例如:

    ALTER TABLE t1
      MODIFY DATA METRIC FUNCTION SNOWFLAKE.CORE.NULL_COUNT ON ( col1 )
        SUSPEND;
    
    Copy

    要恢复运行 DMF,请使用另一个 MODIFY DATA METRIC FUNCTION 语句来设置 RESUME 参数。

  • **要暂停与表关联的所有 DMFs **,请将表的计划设置为空字符串。例如:

    ALTER TABLE t1 SET DATA_METRIC_SCHEDULE = '';
    
    Copy

    要恢复 DMFs,请将 DATA_METRIC_SCHEDULE 参数设置为有效值。

手动调用 DMF

直接调用 DMF 有助于测试 DMF 的输出,然后将其与表或视图关联。

使用以下语法调用 DMF:

SELECT <data_metric_function>(<query>)
Copy

其中:

data_metric_function

指定系统定义或用户定义的 DMF。

query

指定对表或视图进行 SQL 查询。

查询投射的列必须与 DMF 签名中的列实参匹配。

备注

以下系统 DMFs 不遵循此语法,因为它们不采用任何实参:

例如,要调用一个自定义 DMF ``count_positive_numbers``(该函数接受三列作为实参),请运行以下命令:

SELECT governance.dmfs.count_positive_numbers(
  SELECT c1, c2, c3
  FROM t);
Copy

例如,要调用 NULL_COUNT(系统数据指标函数) 系统 DMF 来查看 ssn 列中的 NULL 值数量,请运行以下命令:

SELECT SNOWFLAKE.CORE.NULL_COUNT(
  SELECT ssn
  FROM hr.tables.empl_info);
Copy

如果自定义 DMF 接受来自多个表的参数,那么每个投影列的查询都必须用括号括起来。例如,如果您想手动调用 REFERENTIAL_CHECK DMF,请执行以下命令:

SELECT referential_check( (SELECT id FROM salesorders), (SELECT id FROM salespeople) );
Copy
语言: 中文