表格 SQL UDFs (UDTFs)¶
Snowflake 支持此类 SQL UDFs:返回一组行,其中包含零行、一行或多行,并且每行有一列或多列。此类 UDFs 称为*表格 UDFs*、表 UDFs 或最常见的 *UDTFs*(用户定义的表函数)。
可以在查询的 UDTF 子句中访问 FROM。
语法¶
有关所有 UDFs 的通用语法的更详细描述(包括 SQL UDTFs),请参阅 CREATE FUNCTION。
实参¶
name:这应该是有效数据库对象名称(遵循 标识符要求 中描述的规则)。
arguments:这必须是一个表达式,例如列名称、字面量或可计算为单个值的表达式。通常,函数接受一个实参,即列名称。可以传递多个值,例如,多个列名称,或者一个列名称和一个或多个字面量值。
可以传递常量值或根本不传递值。但是,在大多数情况下,如果每次的输入都相同,则每次的输出都会相同。
RETURNS TABLE(...)指定 UDF 应返回表。在括号内,指定要包含在返回表中的列的名称类型对(如下所述)。
output_col_name:要包含在返回表中的输出列的名称。必须至少有一个输出列。
output_col_type:输出列的数据类型。
sql_expression:一个有效的 SQL 表达式或语句,返回具有零行或多行的表,并且每行都有一列或多列。输出必须与 RETURNS 子句中指定的数字和数据类型匹配。
使用说明¶
SQL UDTF 的主体(也称为“定义”)必须是一个 SELECT 表达式。
尽管
sql_expression周围的分隔符通常是单引号,但可以使用一对美元符号$$作为分隔符。结束分隔符必须与开始分隔符匹配。当sql_expression包含单引号时,使用一对美元符号会很方便。下面的示例部分包含了使用一对美元符号的示例。如果分隔符是单引号,并且主体包含单引号,则可以使用反斜杠字符
\作为转义字符来转义主体中的单引号。下面的示例部分包含一个示例。在 UDTF 中定义的列可以出现在可使用普通表列的任何位置。
在 RETURNS 子句中指定的返回类型决定了表格结果中列的名称和类型,并且必须匹配位于函数主体中 SELECT 语句的相应位置的表达式类型。
调用 UDTF 时,必须在 UDTF 关键字后面的括号内包含 TABLE 名称和实参。有关更多信息,请参阅 调用 SQL UDTF。
备注
表格函数 (UDTFs) 的输入实参限制为 500 个,输出列限制为 500 列。
调用 SQL UDTF¶
在查询的 FROM 子句中调用 UDTF 时,请在 TABLE 关键字后面的括号内指定 UDTF 的名称和实参。
换言之,在调用 UDTF 时,对 TABLE 关键字使用如下形式:
示例 SQL UDTFs¶
基本示例¶
这是一个人为简化的示例 UDTF,它对输出进行硬编码。此示例也展示了用作分隔符的 $$:
以下示例与前一个示例类似,但它使用单引号作为分隔符,并使用 \ 转义字符对 UDTF 主体中的单引号进行转义:
以下是 UDTF 的另一个简单示例。它查询一个表,并从该表中返回两列:
也可以使用视图实现相同的功能。
使用联接的示例¶
创建并使用一个 SQL UDTF,其返回指定用户 COUNTRY_CODE 的国家/地区信息(COUNTRY_NAME 和 ID):
创建一个 SQL UDTF,以返回指定年份最热门的颜色:
在查询中使用 UDTF:
在与另一个表的联接中使用 UDTF;请注意,表中的联接列将作为实参传递给函数。
使用 WHERE 子句而不是 ON 来表示其他谓词:
在联接表达式中,将 UDTF 与常量一起使用;请注意,必须使用 WHERE 子句而不是 ON 来表示其他联接条件: