使用期望来实施数据质量检查¶
从数据指标函数 (DMF) 返回值可提供有用的信息,但如果不了解您认为哪些数据是可以接受的,则可能难以判断该值是否表示存在数据质量问题。例如,您可能会将给定列中包含少于 10 个 NULL 值的表视为通过了数据质量检查。在这种情况下,您 期望 该值小于 10,并且仅希望在超过该值时才收到通知。
期望 允许您定义标准,以确定数据是否通过由 DMF 执行的数据质量检查。当 DMF 返回值时,将该值与该标准进行比较,以确定数据是否通过检查。未通过检查的返回值会被报告为违背期望,因此您可以对数据采取适当的措施。
以下内容创建了列 C1
包含少于 10 个 NULL 值的期望。
ALTER VIEW v1
ADD DATA METRIC FUNCTION SNOWFLAKE.CORE.NULL_COUNT ON (C1)
EXPECTATION my_exp ( VALUE < 10);
您可以定义系统 DMFs 和自定义 DMFs 的期望。
定义符合期望的内容¶
期望包括一个布尔表达式,用于确定是否符合期望。当此表达式的计算结果为 TRUE 时,表示 DMF 结果符合您的期望。
在表达式中,关键字 VALUE
表示 DMF 返回的值。例如,假设您对期望有以下定义:
EXPECTATION my_exp (VALUE < 5)
Snowflake 在评估期望时将 VALUE
替换为 DMF 返回的值。如果 DMF 返回了 3
,则符合期望,因为表达式的计算结果为 TRUE。
如果表达式的计算结果为 FALSE,Snowflake 会将其报告为违背期望。有关跟踪这些违背期望情况的信息,请参阅 识别违背期望的情况。
表达式可以包含以下类型的运算符:
表达式不能引用其他表或视图,或用户定义的函数 (UDFs)。
创建期望¶
DMF 和对象之间的每个关联都可能有一个或多个期望。
在将 DMF 与表或视图关联时可以添加期望,也可以稍后将其添加到关联中。您还可以修改现有的期望。
添加期望后,您可以对其 手动测试,而不必等到 DMF 根据其计划运行。
关联 DMF 时添加期望¶
您可以使用 ALTER TABLE 或 ALTER VIEW 命令将 DMF 与表或视图关联。您可以在创建关联的同一 SQL 语句中为该关联添加期望。
例如,在将 DMF 与表关联时添加期望的语法如下所示。视图使用类似的语法。此预览版介绍了突出显示的子句。
ALTER TABLE <table>
ADD DATA METRIC FUNCTION <dmf>
ON (<col_name> [ , ... ] [ , TABLE<table_name>( <col_name> [ , ... ] ) )
[ EXPECTATION <expectation_name> ( <expression> )
[, <expectation_name> ( <expression> ) [ , ... ] ] ]
其中:
expectation_name
是一个用于标识期望的字符串。只要期望属于不同的关联,就可以使用相同的名称创建期望。expression
是一个布尔表达式,用于确定DMF 是否返回了期望值。请参阅 定义符合期望的内容。
- 示例:添加单个期望
假设您要将 MAX 系统 DMF 与视图
v1
关联,以检查列c1
中的最大值。您期望最大值介于 25 到 50 之间。ALTER VIEW v1 ADD DATA METRIC FUNCTION SNOWFLAKE.CORE.MAX ON (C1) EXPECTATION my_exp ( 25 < VALUE AND VALUE < 50);
如果 MAX DMF 返回的值超出此期望值范围,则 Snowflake 将其记录为违背期望。
- 示例:添加多个期望
假设您希望在五分钟内未更新表时收到通知,然后在 30 分钟未更新表时再次收到通知。您可以添加以下期望,然后检查何时违背了这些期望。
ALTER TABLE emp ADD DATA METRIC FUNCTION SNOWFLAKE.CORE.FRESHNESS ON (last_updated) EXPECTATION lessThan5Mins (VALUE < 300), lessThan30Mins (VALUE < 1800);
为现有关联添加期望¶
您可以使用 ALTER TABLE 或 ALTER VIEW 命令将期望添加到 DMF 和表或视图之间的现有关联中。
例如,为表和 DMF 之间的关联添加期望的语法如下所示。视图使用类似的语法。此预览版介绍了突出显示的子句。
ALTER TABLE <table>
MODIFY DATA METRIC FUNCTION <dmf>
ON (<col_name> [ , ... ] [ , TABLE<table_name>( <col_name> [ , ... ] ) )
[ ADD EXPECTATION <expectation_name> ( <expression> )
[, <expectation_name> ( <expression> ) [ , ... ] ] ]
其中:
expectation_name
是一个用于标识期望的字符串。只要期望属于不同的关联,就可以使用相同的名称创建期望。expression
是一个布尔表达式,用于确定DMF 是否返回了期望值。请参阅 定义符合期望的内容。
- 示例
假设您之前已将 NULL_COUNT 系统 DMF 与表
my_table
中的列c1
关联。要添加期望,以便您在列c1
中有 10 个或更多 NULL 值时收到通知,请运行以下代码:ALTER TABLE my_table MODIFY DATA METRIC FUNCTION SNOWFLAKE.CORE.NULL_COUNT ON (c1) ADD EXPECTATION my_exp (VALUE < 10);
如果 NULL_COUNT 的结果为 15,则将其报告为违背期望。
修改现有期望¶
您可以使用 MODIFY EXPECTATION 子句来更改之前添加到关联中的期望表达式。
例如,假设您之前已将期望 my_exp
添加到表 t1
和 NULL_COUNT DMF 之间的关联中。要修改期望,以便在列 c1
中有 15 个或更多 NULL 值时违背期望,请运行以下代码:
ALTER TABLE t1
MODIFY DATA METRIC FUNCTION SNOWFLAKE.CORE.NULL_COUNT ON (c1)
MODIFY EXPECTATION my_exp (VALUE < 15);
之前的期望表达式替换为 VALUE < 15
。
测试期望¶
添加期望后,您可以调用 SYSTEM$EVALUATE_DATA_QUALITY_EXPECTATIONS 系统函数来确保正确添加期望,并确定当前是否违背了这些期望。
例如,假设您在 DMF 和表 t1
之间的关联中添加了至少一个期望。要查看当前是否违背了这些期望,请运行以下代码:
SELECT *
FROM TABLE(SYSTEM$EVALUATE_DATA_QUALITY_EXPECTATIONS(
REF_ENTITY_NAME => 'my_db.sch.t1'));
删除期望¶
使用 DROP EXPECTATION 子句从关联中删除期望并将其从系统中删除。
例如,假设您之前已将期望 my_exp
添加到表 t1
中的列 c1
与 NULL_COUNT DMF 之间的关联中。要从该关联和 DMF 中删除 my_exp
,请运行以下代码:
ALTER TABLE t1
MODIFY DATA METRIC FUNCTION SNOWFLAKE.CORE.NULL_COUNT on (c1)
DROP EXPECTATION my_exp;
识别违背期望的情况¶
您可以使用以下方法识别违背期望的情况:
SNOWFLAKE.LOCAL.DATA_QUALITY_MONITORING_RESULTS_RAW – 记录原始数据质量结果的专用事件表。
DATA_QUALITY_MONITORING_EXPECTATION_STATUS 视图 – SNOWFLAKE.LOCAL 架构中的视图,其中包含展平的结果。
DATA_QUALITY_MONITORING_EXPECTATION_STATUS 函数 – 返回期望结果的表函数。
SNOWFLAKE.LOCAL.DATA_QUALITY_MONITORING_RESULTS_RAW¶
数据质量结果记录在专用事件表 SNOWFLAKE.LOCAL.DATA_QUALITY_MONITORING_RESULTS_RAW 中。
如果对象和 DMF 之间的关联中包含期望,则每次 Snowflake 计算 DMF 的结果时都会向表中添加两行。第一行记录 DMF 与之关联的对象、DMF 本身以及数据质量检查结果的相关信息。第二行记录与 DMF 关联设定的期望相关的信息,包括是符合了期望还是违背了期望。如果有多个期望,则每个期望都对应一行。
resource_attribute
列中的 snow.data_metric.record_type
字段表示行是否与期望对应。此字段有两个可能的值:
EXPECTATION_VIOLATION_STATUS
– 表示该行与期望相对应。EVALUATION_RESULT
– 表示该行与 DMF 的评估结果相对应。
如果该行与期望相对应,则 resource_attribute
列还包含以下与期望相关的字段:
snow.data_metric.expectation_id
– 系统生成的标识符。snow.data_metric.expectation_name
– 将期望添加到关联中时的期望名称。snow.data_metric.expectation_expression
– 期望的表达式。
当您确定某一行与期望的评估结果对应后,可以检查 value
列以确定是否违背了期望。如果为 TRUE,则违背了期望。
DATA_QUALITY_MONITORING_EXPECTATION_STATUS 视图¶
DATA_QUALITY_MONITORING_EXPECTATION_STATUS 视图 存在于 SNOWFLAKE.LOCAL 架构中,可将事件表中的信息展平,以便更轻松地访问 DMF 结果。
DATA_QUALITY_MONITORING_EXPECTATION_STATUS 函数¶
DATA_QUALITY_MONITORING_EXPECTATION_STATUS 表函数返回的行提供的信息与 DATA_QUALITY_MONITORING_EXPECTATION_STATUS 视图中提供的信息相同。该函数使用与视图不同的访问控制模型。
跟踪期望的使用情况¶
Snowflake 会记录账户中的所有期望。您可以 运行函数 或 查询 ACCOUNT_USAGE 视图 来监控期望的使用情况,包括执行以下任务:
监控哪些对象已为其与 DMF 的关联定义了期望。
监控哪些 DMFs 已为其与对象的关联定义了期望。
了解是否为对象和 DMF 之间的特定关联定义了期望。
确定期望的布尔表达式,以更好地理解数据质量检查。
运行函数来跟踪期望¶
您可以运行 DATA_METRIC_FUNCTION_EXPECTATIONS 函数来输出为特定对象、特定 DMF 或对象与 DMF 之间的关联定义的期望。
示例: 针对特定对象存在的期望
SELECT *
FROM TABLE(
INFORMATION_SCHEMA.DATA_METRIC_FUNCTION_EXPECTATIONS(
REF_ENTITY_NAME => 'my_table',
REF_ENTITY_DOMAIN => 'table'));
示例: 针对特定 DMF 存在的期望
SELECT *
FROM TABLE(
INFORMATION_SCHEMA.DATA_METRIC_FUNCTION_EXPECTATIONS(
METRIC_NAME => 'SNOWFLAKE.CORE.NULL_COUNT'));
示例: 针对对象与 DMF 之间的特定关联存在的期望
SELECT *
FROM TABLE(
INFORMATION_SCHEMA.DATA_METRIC_FUNCTION_EXPECTATIONS(
METRIC_NAME => 'SNOWFLAKE.CORE.NULL_COUNT',
REF_ENTITY_NAME => 'my_table',
REF_ENTITY_DOMAIN => 'table'));
查询视图以跟踪期望¶
ACCOUNT_USAGE 架构中的 DATA_METRIC_FUNCTION_EXPECTATIONS 视图 包含账户中的所有期望。您可以查询视图以跟踪账户中期望的使用情况,并确定每个期望的布尔表达式。
示例: 返回 Snowflake 账户的所有期望
SELECT * FROM snowflake.account_usage.data_metric_function_expectations
ORDER BY expectation_name;
示例: 确定特定数据指标函数的期望
SELECT expectation_name,
ref_database_name as object_database,
ref_schema_name as object_schema,
ref_entity_name as object_name
FROM snowflake.account_usage.data_metric_function_expectations
WHERE
metric_database_name = 'SNOWFLAKE' AND
metric_schema_name = 'CORE' AND
metric_name = 'ROW_COUNT'
ORDER BY expectation_name;