检测数据质量异常¶
从数据指标函数返回的值 (DMF) 提供了有用信息,但可能难以判断它是否意味着存在数据质量问题。如果您知道什么是可接受的值,可以定义 期望,但可能很难制定足够的手动规则来识别所有可能的数据质量问题。
作为解决方案,Snowflake 提供了一种算法,可检测 DMF 返回值中的异常。Snowflake 使用历史数据训练该算法,然后自动识别超出预测范围的返回值。
您可以为以下系统 DMFs 启用异常检测:
下面的示例展示了如何为 ROW_COUNT DMF 与表 t1 之间的关联启用异常检测:
ALTER TABLE t1
ADD DATA METRIC FUNCTION SNOWFLAKE.CORE.ROW_COUNT ON ()
ANOMALY_DETECTION = TRUE;
Snowflake 会训练该算法,然后自动开始识别表 t1 的数据量异常。
关于训练周期¶
启用异常检测后,Snowflake 会基于历史数据训练异常检测算法。训练周期的长短取决于 DMF 的运行频率。
对于频繁运行的 DMFs,Snowflake 至少需要两周的 DMF 数据才能开始检测异常。这两周的数据对于确定每周的季节性模式至关重要。如果 DMF 已经运行更长时间,Snowflake 会使用最多 60 天的数据来训练算法。较长的训练周期可帮助算法识别每月的季节性,并提升检测准确性。Snowflake 建议使用 60 天的数据训练算法,以更高的置信度检测异常。
对于不经常运行或基于触发器调度的 DMFs,Snowflake 至少需要两个数据点来训练算法。例如,如果 DMF 每月运行一次,Snowflake 会回溯两个月的数据来训练算法。
您可以通过运行 DATA_METRIC_FUNCTION_REFERENCES 函数来判断 Snowflake 是否仍处于训练期。如果已启用异常检测,但算法仍在训练中,则输出的 anomaly_detection_status 列会显示值 TRAINING_IN_PROGRESS。
启用异常检测¶
在首次将 DMF 与对象关联时,您可以为 DMF 关联启用异常检测,也可以稍后启用。
- 示例:关联 DMF 时启用异常检测
在将 FRESHNESS DMF 与视图
v1关联时启用异常检测,请运行以下命令:ALTER VIEW v1 ADD DATA METRIC FUNCTION SNOWFLAKE.CORE.FRESHNESS ON (c_timestamp) ANOMALY_DETECTION = TRUE;
- 示例:为现有关联启用异常检测
要为 ROW_COUNT DMF 与表
t1之间的现有关联启用异常检测,请运行以下命令:ALTER TABLE t1 MODIFY DATA METRIC FUNCTION SNOWFLAKE.CORE.ROW_COUNT ON () SET ANOMALY_DETECTION = TRUE;
调整异常检测的灵敏度级别¶
启用异常检测后,您可以 跟踪账户中发生的异常数量。如果异常数量过少或过多,您可以调整异常检测算法的灵敏度级别。
如果存在过多假阳性(即被误判为异常的值),您可以将灵敏度调整为 LOW 以减少检测到的异常数量。
如果存在过多假阴性(即未被识别但实际上是异常的值),您可以将灵敏度调整为 HIGH 以检测到更多异常。
默认敏感度级别为 MEDIUM。
例如,要提高 DMF 关联对表 t1 中数据量异常的敏感度,请运行以下命令:
ALTER TABLE t1
MODIFY DATA METRIC FUNCTION SNOWFLAKE.CORE.ROW_COUNT ON ()
SET SENSITIVITY = 'HIGH';
禁用异常检测¶
您可以随时通过 ALTER 语句修改对象来禁用 DMF 关联的异常检测。
例如,要禁用 ROW_COUNT DMF 与表 t1 之间关联的异常检测,请运行以下命令:
ALTER TABLE t1
MODIFY DATA METRIC FUNCTION SNOWFLAKE.CORE.ROW_COUNT ON ()
SET ANOMALY_DETECTION = FALSE;
识别异常¶
您可以通过以下方式识别异常:
SNOWFLAKE.LOCAL.DATA_QUALITY_MONITORING_RESULTS_RAW – 记录原始数据质量结果的专用事件表。
DATA_QUALITY_MONITORING_ANOMALY_DETECTION 视图 – SNOWFLAKE.LOCAL 架构中的视图,其中包含展平的结果。
SNOWFLAKE.LOCAL.DATA_QUALITY_MONITORING_RESULTS_RAW¶
数据质量结果记录在专用事件表 SNOWFLAKE.LOCAL.DATA_QUALITY_MONITORING_RESULTS_RAW 中。
如果 DMF 关联启用了异常检测,每次 Snowflake 计算 DMF 的结果时,表中都会新增两行数据。第一行记录 DMF 与之关联的对象、DMF 本身以及数据质量检查结果的相关信息。第二行记录与异常检测相关的信息。
record_attribute 列中的 snow.data_metric.record_type 字段用于指示该行是否属于异常检测。此字段有两个可能的值:
ANOMALY_DETECTION_STATUS– 表示该行属于异常检测。EVALUATION_RESULT– 表示该行与 DMF 的评估结果相对应。
判断是否存在异常¶
在确认事件表中的某行属于异常检测后,您可以检查 resource_attribute 列中的 snow.data_metric.evaluation_result 字段,以判断是否存在异常。
该字段包含一个 VARIANT,其中记录了 DMF 返回的值,以及一个 BOOLEAN 值,用于指示该值是否为异常。例如,如果 snow.data_metric.evaluation_result 字段的值为 5, TRUE,则返回值为 5,Snowflake 会将其识别为异常。
其他字段¶
如果事件表中的该行属于异常检测,resource_attribute 列还包括以下字段:
snow.data_metric.upper_bound– 基于异常检测算法,DMF 应返回的最大值。如果 DMF 返回的值高于该上限,则判定为异常。snow.data_metric.lower_bound– 基于异常检测算法,DMF 应返回的最小值。如果 DMF 返回的值低于该下限,则判定为异常。snow.data_metric.forecast– 异常检测算法预测 DMF 将返回的值。
DATA_QUALITY_MONITORING_ANOMALY_DETECTION 视图¶
DATA_QUALITY_MONITORING_ANOMALY_DETECTION 视图 视图位于 SNOWFLAKE.LOCAL 架构中,可将事件表中的信息展平成扁平结构,从而更方便地访问 DMF 结果。