CREATE DATA METRIC FUNCTION

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

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

该命令支持以下变体:

另请参阅:

DMF 命令参考CREATE OR ALTER <对象>

语法

CREATE [ OR REPLACE ] [ SECURE ] DATA METRIC FUNCTION [ IF NOT EXISTS ] <name>
  ( <table_arg> TABLE( <col_arg> <data_type> [ , ... ] )
    [ , <table_arg> TABLE( <col_arg> <data_type> [ , ... ] ) ] )
  RETURNS NUMBER [ [ NOT ] NULL ]
  [ LANGUAGE SQL ]
  [ COMMENT = '<string_literal>' ]
  AS
  '<expression>'
Copy

变体语法

CREATE OR ALTER DATA METRIC FUNCTION

如果数据指标函数尚不存在,则新建一个,或者将现有数据指标函数转换为在语句中定义的函数。CREATE OR ALTER DATA METRIC FUNCTION 语句遵循 CREATE DATA METRIC FUNCTION 语句的语法规则,并且具有与 ALTER FUNCTION (DMF) 语句相同的限制。

与 CREATE OR REPLACE DATA METRIC FUNCTION 命令不同,CREATE OR ALTER 命令会更新对象,而无需删除和重新创建对象。

支持的功能更改包括对 COMMENT 属性的更改。

有关更多信息,请参阅 CREATE OR ALTER DATA METRIC FUNCTION 使命说明

CREATE [ OR ALTER ] DATA METRIC FUNCTION ...
Copy

必填参数

name

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

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

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

( table_arg TABLE( col_arg data_type [ , ... ] ) [ , table_arg TABLE( col_arg data_type [ , ... ] ) ] )

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

您必须指定:

  • 每个表的实参名称 (table_arg)。

  • 对于每个表,至少一个列的实参名及其数据类型 (col_arg data_type)。

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

RETURNS NUMBER

函数输出的数据类型。

数据类型只能是 NUMBER。

AS expression

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

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

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

expression 不支持以下操作:

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

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

  • 返回非标量输出。

可选参数

SECURE

指定数据指标函数为安全函数。有关更多信息,请参阅 使用安全 UDFs 和存储过程保护敏感信息

LANGUAGE SQL

指定用于编写表达式的语言。

SQL 是唯一支持的语言。

COMMENT = 'string_literal'

DMF 的注释。

访问控制要求

用于执行此操作的 角色 必须至少具有以下 权限

权限

对象

备注

CREATE DATA METRIC FUNCTION

架构

该权限仅允许在架构中创建数据指标函数。

如果您要允许创建用户定义函数(如 SQL 或 Java UDFs),则角色必须具有 CREATE FUNCTION 权限。

要对架构中的任何对象执行操作,需要对父数据库和架构的 USAGE 权限。

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

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

一般使用说明

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

  • 关于元数据:

    注意

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

CREATE OR ALTER DATA METRIC FUNCTION 使命说明

  • 不支持以下更改:

    • 更改数据指标函数的主体。

    • 更改数据指标和输入表定义。

示例:单表实参

创建一个会调用 COUNT 函数的 DMF,以返回表前三列中具有正数的总行数:

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

示例:多表实参

返回一个表中某列的值在另一个表的相应列中没有对应值的记录数:

CREATE OR REPLACE DATA METRIC FUNCTION governance.dmfs.referential_check(
  arg_t1 TABLE (arg_c1 INT), arg_t2 TABLE (arg_c2 INT))
RETURNS NUMBER
AS
$$
  SELECT
    COUNT(*)
    FROM arg_t1
  WHERE
    arg_c1 NOT IN (SELECT arg_c2 FROM arg_t2)
$$;
Copy

有关使用此 DMF 验证引用完整性的示例,请参阅 示例:使用多个表实参执行参照检查

示例:使用 CREATE OR ALTER DATA METRIC FUNCTION 命令更改数据指标函数

更改上面示例中创建的单表数据指标函数,以设置安全性和注释。

CREATE OR ALTER SECURE DATA METRIC FUNCTION governance.dmfs.count_positive_numbers(
  arg_t TABLE(
    arg_c1 NUMBER,
    arg_c2 NUMBER,
    arg_c3 NUMBER
  )
)
RETURNS NUMBER
COMMENT = "count positive numbers"
AS
$$
  SELECT
    COUNT(*)
  FROM arg_t
  WHERE
    arg_c1>0
    AND arg_c2>0
    AND arg_c3>0
$$;
Copy
语言: 中文