CREATE DATA METRIC FUNCTION¶
在当前或指定架构中创建新的数据指标函数 (DMF),或替换现有的数据指标函数。
创建 DMF 后,使用 ALTER TABLE ...ALTER COLUMN 命令将其应用于表列,或使用 ALTER VIEW 命令将其应用于视图列。
该命令支持以下变体:
CREATE OR ALTER DATA METRIC FUNCTION:如果数据指标函数不存在,则新建一个,或者更改现有数据指标函数。
语法¶
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>'
变体语法¶
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 ...
必填参数¶
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 权限。
有关创建具有指定权限集的自定义角色的说明,请参阅 创建自定义角色。
一般使用说明¶
如果要更新现有的数据指标函数,并需要查看函数的当前定义,请运行 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
$$;
示例:多表实参¶
返回一个表中某列的值在另一个表的相应列中没有对应值的记录数:
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)
$$;
有关使用此 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
$$;