检测数据质量异常

从数据指标函数返回的值 (DMF) 提供了有用信息,但可能难以判断它是否意味着存在数据质量问题。如果您知道什么是可接受的值,可以定义 期望,但可能很难制定足够的手动规则来识别所有可能的数据质量问题。

作为解决方案,Snowflake 提供了一种算法,可检测 DMF 返回值中的异常。Snowflake 使用历史数据训练该算法,然后自动识别超出预测范围的返回值。

您可以为以下系统 DMFs 启用异常检测:

  • ROW_COUNT – 用于识别表中数据量的异常。

  • FRESHNESS – 用于识别表更新频率的异常。

下面的示例展示了如何为 ROW_COUNT DMF 与表 t1 之间的关联启用异常检测:

ALTER TABLE t1
  ADD DATA METRIC FUNCTION SNOWFLAKE.CORE.ROW_COUNT ON ()
    ANOMALY_DETECTION = TRUE;
Copy

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;
Copy
示例:为现有关联启用异常检测

要为 ROW_COUNT DMF 与表 t1 之间的现有关联启用异常检测,请运行以下命令:

ALTER TABLE t1
  MODIFY DATA METRIC FUNCTION SNOWFLAKE.CORE.ROW_COUNT ON ()
    SET ANOMALY_DETECTION = TRUE;
Copy

调整异常检测的灵敏度级别

启用异常检测后,您可以 跟踪账户中发生的异常数量。如果异常数量过少或过多,您可以调整异常检测算法的灵敏度级别。

  • 如果存在过多假阳性(即被误判为异常的值),您可以将灵敏度调整为 LOW 以减少检测到的异常数量。

  • 如果存在过多假阴性(即未被识别但实际上是异常的值),您可以将灵敏度调整为 HIGH 以检测到更多异常。

默认敏感度级别为 MEDIUM。

例如,要提高 DMF 关联对表 t1 中数据量异常的敏感度,请运行以下命令:

ALTER TABLE t1
  MODIFY DATA METRIC FUNCTION SNOWFLAKE.CORE.ROW_COUNT ON ()
    SET SENSITIVITY = 'HIGH';
Copy

禁用异常检测

您可以随时通过 ALTER 语句修改对象来禁用 DMF 关联的异常检测。

例如,要禁用 ROW_COUNT DMF 与表 t1 之间关联的异常检测,请运行以下命令:

ALTER TABLE t1
  MODIFY DATA METRIC FUNCTION SNOWFLAKE.CORE.ROW_COUNT ON ()
    SET ANOMALY_DETECTION = FALSE;
Copy

识别异常

您可以通过以下方式识别异常:

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 结果。

语言: 中文