监控模式的数据质量

当数据指标函数 (DMF) 与表或视图关联时,DMF 会定期运行并返回一个值,用于提供数据质量方面的洞察。

现在,您可以使用单个 SQL 语句来配置模式,使该模式中的所有对象都关联到同一个 DMF。您可以在模式级别关联以下系统 DMFs:

  • ROW_COUNT – 用于返回有关模式内对象的数据量的信息。

  • FRESHNESS – 用于返回模式内对象更新频率的信息。

当您在模式级别关联这些 DMFs 之一时,您可以指定希望 Snowflake 来确定表或视图的数据量或数据新鲜度在一段时间内是否存在 异常

以下示例展示了如何为 ROW_COUNT DMF 与 my_schema 模式中每个对象之间的关联启用异常检测:

ALTER SCHEMA my_schema
  ADD DATA METRIC FUNCTION SNOWFLAKE.CORE.ROW_COUNT ON ()
    ANOMALY_DETECTION = TRUE;

Snowflake 会训练异常检测算法,然后自动开始识别 my_schema 模式中表和视图数据量方面的异常。

将 DMF 添加到模式

当您将 DMF 与模式关联时,模式内的所有对象都会与该 DMF 关联。

语法

使用以下语法向模式添加 DMF。

ALTER SCHEMA <name>
  ADD DATA METRIC FUNCTION { SNOWFLAKE.CORE.ROW_COUNT | SNOWFLAKE.CORE.FRESHNESS } ON ()
    [ ANOMALY_DETECTION = { TRUE | FALSE } ]
    [ EXCLUDE_TABLE_TYPES = ( '<object_type>' [ , '<object_type>' ... ] ) ]

实参

{ SNOWFLAKE.CORE.ROW_COUNT | SNOWFLAKE.CORE.FRESHNESS } ON ()

将系统 DMF 与模式中的对象关联。

可能的值是 SNOWFLAKE.CORE.ROW_COUNTSNOWFLAKE.CORE.FRESHNESS

ANOMALY_DETECTION = { TRUE | FALSE }

如果为 TRUE,Snowflake 会使用算法来检测 DMF 返回的值中的异常。Snowflake 检测每个对象中的异常,而不是针对整个模式。

默认:FALSE

EXCLUDE_TABLE_TYPES = ( 'object_type', 'object_type' ... )

排除指定类型的所有对象;Snowflake 不会在 DMF 与这些对象之间建立关联。以下是可能的值:

  • 'DYNAMIC_TABLE'

  • 'EVENT_TABLE'

  • 'EXTERNAL_TABLE'

  • 'ICEBERG_TABLE'

  • 'MATERIALIZED_VIEW'

  • 'TABLE'

  • 'VIEW'

如果要排除某个特定对象而非某类型的所有对象,您可以在对象级别 覆盖 DMF 关联

示例

将 FRESHNESS DMF 与模式中的所有对象关联:

ALTER SCHEMA my_schema
  ADD DATA METRIC FUNCTION SNOWFLAKE.CORE.FRESHNESS ON ();

将 ROW_COUNT DMF 与模式中的所有对象关联,并为这些关联启用异常检测:

ALTER SCHEMA my_schema
  ADD DATA METRIC FUNCTION SNOWFLAKE.CORE.ROW_COUNT ON ()
    ANOMALY_DETECTION = TRUE;

将 ROW_COUNT DMF 与模式中的表关联,但不将其与视图和物化视图关联:

ALTER SCHEMA my_schema
  ADD DATA METRIC FUNCTION SNOWFLAKE.CORE.ROW_COUNT ON ()
    EXCLUDE_TABLE_TYPES=('VIEW', 'MATERIALIZED_VIEW');

在对象级别覆盖设置

当您在模式级别添加 DMF 时,Snowflake 会在模式中的每个对象与该 DMF 之间创建对象级别的关联。如果您想更改 DMF 在对象上的运行方式,可以在对象级别替换此关联。

假设您在将 ROW_COUNT DMF 添加到 my_schema 时启用了异常检测。如果您不希望 Snowflake 检测表 my_schema.employees 中的异常,请运行以下命令:

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

如果您希望停止运行 DMF,也可以从特定对象中移除该关联。例如,如果您希望停止 ROW_COUNT DMF 在 my_schema.employees 表上运行,请运行以下命令:

ALTER TABLE employees
  DROP DATA METRIC FUNCTION SNOWFLAKE.CORE.ROW_COUNT ON ();

您也可以替换模式级别的计划,以更改 DMF 针对特定对象的运行频率。有关在对象级别设置计划的信息,请参阅 调整 DMFs 的计划

调整运行计划

默认情况下,模式的数据指标计划为 60 分钟;DMF 每小时对模式中的每个对象运行一次。您可以在模式级别更改此默认值,也可以在对象级别替换它。

使用以下命令来控制 DMFs 对模式中对象的运行频率:

ALTER SCHEMA <name> SET DATA_METRIC_SCHEDULE = '<schedule>';

schedule 的可能取值在模式级别与对象级别相同。要查看可能的值,请参阅 ALTER TABLE...SET DATA_METRIC_SCHEDULE

您在模式级别设置的计划控制着 DMF 在每个对象上的运行频率,除非您为特定表或视图替换了该设置。有关在对象级别设置计划的信息,请参阅 调整 DMFs 的计划

暂停 DMFs

暂停和恢复模式级别关联的 DMF 的语法与表级别关联的语法相同。例如,要暂停与模式 my_schema 关联的 ROW_COUNT DMF,请运行以下命令:

ALTER SCHEMA my_schema
  MODIFY DATA METRIC FUNCTION SNOWFLAKE.CORE.ROW_COUNT ON ()
    SUSPEND;

确定哪些关联是在模式级别设置的

您可以使用以下视图和函数来确定哪些对象与 DMF 关联:

该视图和函数的输出包含一个 level 列,该列有以下可能的值:

  • TABLE – 有人直接将 DMF 与对象关联。

  • SCHEMA – 有人将 DMF 添加到了模式中,从而创建了对象与 DMF 之间的关联。

跟踪模式级别的关联

您可以调用 DATA_METRIC_FUNCTION_REFERENCES 函数来确定哪些 DMFs 被添加到了模式中。例如,要查看哪些 DMFs 被添加到了 db1.my_schema 模式,请运行以下命令:

SELECT *
  FROM TABLE(
    INFORMATION_SCHEMA.DATA_METRIC_FUNCTION_REFERENCES(
      REF_ENTITY_NAME => 'db1.my_schema',
      REF_ENTITY_DOMAIN => 'schema'
    )
  );

访问控制要求

要向模式添加 DMF,您必须具有以下访问控制权限和角色:

  • 模式的 OWNERSHIP 权限。

  • 账户的 MANAGE DATA QUALITY 权限。

  • 账户的 EXECUTE DATA METRIC FUNCTION 权限。

  • SNOWFLAKE.DATA_METRIC_USER 数据库角色。

除非模式所有者仍然拥有对账户的 MANAGE DATA QUALITY 权限,否则 Snowflake 将不会运行该 DMF。

要成功对模式中的对象运行 DMF,对象所有者必须具有将 DMF 与该对象关联所需的相同权限。有关这些权限的列表,请参阅 访问控制要求

注意事项和限制

  • FRESHNESS DMF 需要为视图和外部表提供一个列实参。因此,如果您将 FRESHNESS DMF 添加到模式中,Snowflake 在将 DMF 与模式中的对象关联时会跳过视图和外部表。

  • 您无法在模式级别设置基于触发的计划。