创建 UDF

您可以使用 CREATE FUNCTION 命令创建用户定义函数 (UDF) 或用户定义表函数 (UDTF),该命令指定函数的属性,包括用于其逻辑的处理程序。

本主题列出了创建 UDF 的步骤。有关示例,请参阅 CREATE FUNCTION 参考

使用 CREATE FUNCTION 语句将处理程序方法与 UDF 名称相关联

按照以下步骤创建 UDF :

  1. 编写在调用 UDF 时执行的处理程序代码。

    可以使用受支持的某种处理程序语言。有关更多信息,请参阅 支持的语言

  2. 选择是使用 CREATE FUNCTION SQL 语句将处理程序代码内联,还是在暂存区上引用该代码。

    每种做法都有其优点。有关更多信息,请参阅 将处理程序代码保持内联或保留在暂存区

  3. 在 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;
              }
          }
      $$;
    
    Copy

    下面介绍创建函数时需要或通常使用的一些属性。

    • 函数名称。

      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_functionmy_function

      仅限类名称。处理程序方法名称由所需的接口预先确定。

      SQL

      无。

      无。

    • 使用 IMPORTS 或 PACKAGES 子句时,处理程序所需的依赖项(如果有)。

      有关使依赖项可供处理程序使用的更多信息,请参阅 为代码提供依赖项

    • RUNTIME_VERSION 子句的处理程序语言运行时。

      当处理程序语言是 Java 或 Python 时,使用 RUNTIME_VERSION 子句指定要使用的受支持的运行时版本。省略该子句将提示 Snowflake 使用默认值(将来可能会有变)。

语言: 中文