创建 UDF¶
您可以使用 CREATE FUNCTION 命令创建用户定义函数 (UDF) 或用户定义表函数 (UDTF),该命令指定函数的属性,包括用于其逻辑的处理程序。
本主题列出了创建 UDF 的步骤。有关示例,请参阅 CREATE FUNCTION 参考。
按照以下步骤创建 UDF :
编写在调用 UDF 时执行的处理程序代码。
可以使用受支持的某种处理程序语言。有关更多信息,请参阅 支持的语言。
选择是使用 CREATE FUNCTION SQL 语句将处理程序代码内联,还是在暂存区上引用该代码。
每种做法都有其优点。有关更多信息,请参阅 将处理程序代码保持内联或保留在暂存区。
在 SQL 中执行 CREATE FUNCTION 语句,指定函数的属性。
以下示例中的代码创建一个名为
function_name
的 UDF,其包含内联处理程序HandlerClass.handlerMethod
。create function function_name(x integer, y integer) returns integer language java handler='HandlerClass.handlerMethod' target_path='@~/HandlerCode.jar' as $$ class HandlerClass { public static int handlerMethod(int x, int y) { return x + y; } } $$;
下面介绍创建函数时需要或通常使用的一些属性。
函数名称。
UDF 名称不需要与处理程序的名称匹配。CREATE FUNCTION 语句会将 UDF 名称与处理程序相关联。
有关名称约束和约定的更多信息,请参阅 命名和重载过程和 UDFs。
函数实参(如果有)。
请参阅 定义 UDFs 和存储过程的实参。
RETURNS 子句的返回类型。
对于标量返回值,RETURNS 子句将指定单个返回类型;对于表格返回值,RETURNS 将指定在表格返回值中指定列类型的 TABLE 关键字。
有关 Snowflake 如何将 SQL 数据类型映射到处理程序数据类型的信息,请参阅 命名和重载过程和 UDFs。
HANDLER 子句的处理程序名称。
需要此属性时,它是类或方法的名称,该类或方法包含了调用 UDF 时执行的代码。您只需要为使用 Java 和 Python 编写的处理程序指定处理程序名称。对于 JavaScript 和 SQL 处理程序,以内联方式指定的所有代码都将作为处理程序执行。
下表描述了基于处理程序语言和函数类型的 HANDLER 子句值的形式。
处理程序语言
UDF
UDTF
Java
类和方法名称。
例如:
MyClass.myMethod
仅限类名称。处理程序方法名称由所需的接口预先确定。
JavaScript
无。
无。
Python
类和方法名称(如果使用类),否则为函数名称。
例如:
module.my_function
或my_function
仅限类名称。处理程序方法名称由所需的接口预先确定。
SQL
无。
无。
使用 IMPORTS 或 PACKAGES 子句时,处理程序所需的依赖项(如果有)。
有关使依赖项可供处理程序使用的更多信息,请参阅 为代码提供依赖项。
RUNTIME_VERSION 子句的处理程序语言运行时。
当处理程序语言是 Java 或 Python 时,使用 RUNTIME_VERSION 子句指定要使用的受支持的运行时版本。省略该子句将提示 Snowflake 使用默认值(将来可能会有变)。