数据质量问题的补救¶
数据质量度量 (DMFs) 可让您确定表中有多少记录可能包含质量问题。例如,SNOWFLAKE.CORE.NULL_COUNT 可以标识在特定列中包含 NULL 值的记录数。
为了帮助您修复这些可能的质量问题,您可以调用 SYSTEM$DATA_METRIC_SCAN 系统函数以返回由 DMF 标识为包含未通过数据质量检查的数据的各个记录。例如,如果您将 NULL_COUNT DMF 作为参数传入到 SYSTEM$DATA_METRIC_SCAN 函数中,就可以获得包含 NULL 值的实际记录,而不仅仅是包含 NULL 值的记录数。
支持的 DMFs¶
SYSTEM$DATA_METRIC_SCAN 函数接受 DMF 作为参数,以返回由 DMF 标识为包含问题数据的记录。以下系统 DMFs 可用作参数:
SNOWFLAKE.CORE.NULL_COUNT
SNOWFLAKE.CORE.NULL_PERCENT
SNOWFLAKE.CORE.BLANK_COUNT
SNOWFLAKE.CORE.BLANK_PERCENT
SNOWFLAKE.CORE.DUPLICATE_COUNT
限制和注意事项¶
不能使用自定义 DMFs 作为 SYSTEM$DATA_METRIC_SCAN 函数的参数。
如果表受策略(如掩码策略或行访问策略)保护,则 SYSTEM$DATA_METRIC_SCAN 函数可能会返回意外或不完整的数据,因为结果取决于执行函数时用户的角色。
调用 SYSTEM$DATA_METRIC_SCAN 函数¶
当您调用 SYSTEM$DATA_METRIC_SCAN 函数时,它会分析一个带有 DMF 的表,以识别可能的数据质量问题。您必须将以下参数传递给 SYSTEM$DATA_METRIC_SCAN 函数:表的名称、DMF 以及传递给 DMF 的任何参数,以帮助识别有问题的记录。例如,假定 SNOWFLAKE.CORE.NULL_COUNT 函数返回特定列中的 NULL 值的总数,则以下函数返回 employeesTable
表中在过去特定时间存在的表版本中的 NULL 列中具有 SSN
值的行。
SELECT *
FROM TABLE(SYSTEM$DATA_METRIC_SCAN(
REF_ENTITY_NAME => '<governance.sch.employeesTable>'
,METRIC_NAME => '<snowflake.core.null_count>'
,ARGUMENT_NAME => '<SSN>'
,AT_TIMESTAMP => '<2024-08-28 02:00:00 -0700>'
));
要检查表或视图过去的 DMF 评估结果,可以传递 AT_TIMESTAMP 参数。AT_TIMESTAMP 参数允许您使用 Time Travel 转换时间戳字符串,以仅返回在“2024-08-28 02:00:00 -0700”时间戳时表中存在的那些记录。
使用 SYSTEM$DATA_METRIC_SCAN 修复数据¶
SYSTEM$DATA_METRIC_SCAN 函数是一个返回一组行的 表函数。该函数的输出可在 DML 语句中使用,以针对已被标识为包含未通过数据质量检查的数据的记录执行操作。
假设您要用 NULL 值替换 t
表 email
列中的空白值。由于 BLANK_COUNT 数据度量函数标识空白值,因此可以运行以下语句:
UPDATE T
SET email = null
WHERE T.ID IN (SELECT ID FROM TABLE(SYSTEM$DATA_METRIC_SCAN(
REF_ENTITY_NAME => '<t>'
,METRIC_NAME => '<snowflake.core.blank_count>'
,ARGUMENT_NAME => '<email>'
)));