Scala UDFs 简介

您可以用 Scala 为用户定义函数 (UDF) 编写处理程序。在 SQL 中调用函数时,处理程序将作为函数的逻辑执行。

Snowflake 目前支持使用 Scala 的以下版本编写 UDFs :

  • 2.12

有了处理程序后,就可以用 SQL 创建 UDF。有关使用 SQL 创建或调用 UDF 的信息,请参阅 创建 UDF,或 调用 UDF

有关 UDFs 的介绍,包括可用于编写 UDF 处理程序的语言列表,请参阅 用户定义函数概述

备注

有关与 Scala 处理程序相关的限制,请参阅 Scala UDF 限制

您还可以在使用 Snowpark API 时使用 Scala 编写 UDF。有关更多信息,请参阅 在 Scala 中为 DataFrames 创建用户定义的函数 (UDFs)

处理程序的工作原理

当用户调用 UDF 时,用户将 UDF 的名称和实参传递给 Snowflake。Snowflake 调用与 UDF 关联的处理程序方法来执行 UDF 的逻辑。然后,处理程序方法将输出返回给 Snowflake,Snowflake 再将其传回给客户端。

对于标量函数(返回单个值的函数), UDF 会为传递给给 UDF 的每一行返回单一值。

为了支持处理程序的逻辑,代码可以调用处理程序外部的库。例如,如果您已经拥有使用 Scala 编写的数据分析代码,那么您或许可以在处理程序代码中使用它。

有关使用 Scala 编写处理程序的一般信息,请参阅 一般 Scala UDF 处理程序编码准则。有关编写标量函数的信息,请参阅 使用 Scala 编写标量 UDF

示例

以下示例中的代码使用处理程序方法 TestFunc.echoVarchar 创建一个称为 echo_varchar 的 UDF。Snowflake 会根据 SQL-Scala 数据类型映射 中描述的映射将 Scala 实参和返回类型与 SQL 相互转换。

CREATE OR REPLACE FUNCTION echo_varchar(x VARCHAR)
RETURNS VARCHAR
LANGUAGE SCALA
RUNTIME_VERSION = 2.12
HANDLER='TestFunc.echoVarchar'
AS
$$
class TestFunc {
  def echoVarchar(x : String): String = {
    return x
  }
}
$$;
Copy

调用 UDF

SELECT echo_varchar('Hello');
Copy

设计注意事项

为设计有用的处理程序,请记住以下几点。

处理程序编码

从基础知识到详细示例,以下主题描述了如何使用 Scala 编写 UDF 处理程序。

语言: 中文