CREATE DATA METRIC FUNCTION¶
在当前或指定架构中创建新的数据指标函数 (DMF),或替换现有的数据指标函数。
创建 DMF 后,使用 ALTER TABLE ...ALTER COLUMN 命令将其应用于表列,或使用 ALTER VIEW 命令将其应用于视图列。
- 另请参阅:
本主题内容:
语法¶
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>'
参数¶
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 的对象。
返回非标量输出。
访问控制要求¶
权限 |
对象 |
备注 |
---|---|---|
CREATE FUNCTION |
架构 |
请注意,对架构中的对象进行操作还需要对父数据库和架构具有 USAGE 权限。
有关创建具有指定权限集的自定义角色的说明,请参阅 创建自定义角色。
使用说明¶
如果要更新现有的数据指标函数,并需要查看函数的当前定义,请运行 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
$$;
示例:外键引用¶
您可以创建一个数据指标函数,该函数引用的表与 DMF 分配给的表不同。例如,您可能想创建一个 DMF 来测量因 外键约束 而产生的行数。作为一个有代表性的例子,考虑两个表 salespeople
和 salesorders
,它们有一个名为 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)';
手动调用 DMF,并指定 salesorders
表中的 sp_id
列:
SELECT governance.dmfs.foreign_key_sales(SELECT sp_id FROM salesorders);
输出将返回 salesorder
表中的行数,其中 sp_id
列中的值是 salespeople
表中 sp_id
列的值的结果。