CREATE DATA METRIC FUNCTION

在当前或指定架构中创建新的数据指标函数 (DMF),或替换现有的数据指标函数。

创建 DMF 后,使用 ALTER TABLE ...ALTER COLUMN 命令将其应用于表列,或使用 ALTER VIEW 命令将其应用于视图列。

另请参阅:

DMF 命令参考

本主题内容:

语法

CREATE [ OR REPLACE ] DATA METRIC FUNCTION [ IF NOT EXISTS ] <name>
  ( <arg_name> TABLE( <c1> <data_type> [ , ... ] ) )
  RETURNS <metric_data_type> [ [ NOT ] NULL ]
  [ COMMENT = '<string_literal>' ]
  AS
  '<expression>'
Copy

参数

name

DMF 的标识符;对于架构必须是唯一的。

此外,标识符必须以字母字符开头,且不能包含空格或特殊字符,除非整个标识符字符串放在双引号内(例如,"My object")。放在双引号内的标识符也区分大小写。

有关更多信息,请参阅 标识符要求

( arg_name TABLE( c1 data_type [ , ... ] ) )

DMF 的签名,用作表达式的输入。

您必须指定:

  • 表的唯一一个实参名称,即 arg_name

  • 至少一个列名及其数据类型,即 c1 data_type

    您可以选择指定其他列及其数据类型。列必须在同一个表中,不能引用其他表。

RETURNS metric_data_type

函数输出的数据类型。

数据类型可以是 BOOLEAN 或 NUMBER。

COMMENT = 'string_literal'

DMF 的注释。

AS expression

确定函数输出的 SQL 表达式。该表达式必须是确定性的,并返回标量值。表达式可以引用其他表对象,如使用 WITH 子句或 WHERE 子句来引用。

周围的 expression 分隔符可以是单引号或一对美元符号。使用 $$ 作为分隔符可以更轻松地编写包含单引号的表达式。

如果 expression 的分隔符是单引号字符,则 expression 中的任何单引号(例如字符串字面量)都 必须 用单引号转义。

expression 不支持以下操作:

  • 使用 JOIN 结构。

  • 使用非确定性函数(例如 CURRENT_TIME)。

  • 引用依赖于 UDF 或 UDTF 的对象。

  • 返回非标量输出。

访问控制要求

用于执行此 SQL 命令的 角色 必须至少具有以下 权限

权限

对象

备注

CREATE FUNCTION

架构

请注意,对架构中的对象进行操作还需要对父数据库和架构具有 USAGE 权限。

有关创建具有指定权限集的自定义角色的说明,请参阅 创建自定义角色

有关对 安全对象 执行 SQL 操作的相应角色和权限授予的一般信息,请参阅 访问控制概述

使用说明

  • 如果要更新现有的数据指标函数,并需要查看函数的当前定义,请运行 DESCRIBE FUNCTION 命令。

  • 关于元数据:

    注意

    客户应确保在使用 Snowflake 服务时,不会将个人数据(用户对象除外)、敏感数据、出口管制数据或其他受监管数据作为元数据输入。有关更多信息,请参阅 Snowflake 中的元数据字段

示例:计算非 NULL 值数量

创建一个调用 COUNT 函数的 DMF,返回在计算表中前三列时不包含 NULL 值的总行数:

CREATE OR REPLACE DATA METRIC FUNCTION governance.dmfs.count_positive_numbers(
  arg_t TABLE(
    arg_c1 NUMBER,
    arg_c2 NUMBER,
    arg_c3 NUMBER
  )
)
RETURNS NUMBER
AS
$$
  SELECT
    COUNT(*)
  FROM arg_t
  WHERE
    arg_c1>0
    AND arg_c2>0
    AND arg_c3>0
$$;
Copy

示例:外键引用

您可以创建一个数据指标函数,该函数引用的表与 DMF 分配给的表不同。例如,您可能想创建一个 DMF 来测量因 外键约束 而产生的行数。作为一个有代表性的例子,考虑两个表 salespeoplesalesorders,它们有一个名为 sp_id 的公共列,该列被指定为外键约束。

创建 DMF 以确定包含外键引用的行数。WHERE 子句指定了 salespeople 表中包含销售人员标识符的 sp_id 列:

CREATE OR REPLACE DATA METRIC FUNCTION governance.dmfs.foreign_key_sales(
  arg_t TABLE (arg_c INT))
RETURNS NUMBER AS
'SELECT COUNT(*) FROM arg_t
   WHERE arg_c IN (SELECT sp_id FROM salespeople)';
Copy

手动调用 DMF,并指定 salesorders 表中的 sp_id 列:

SELECT governance.dmfs.foreign_key_sales(SELECT sp_id FROM salesorders);
Copy

输出将返回 salesorder 表中的行数,其中 sp_id 列中的值是 salespeople 表中 sp_id 列的值的结果。

语言: 中文