Java UDFs 简介¶
您可以使用 Java 为用户定义函数 (UDF) 编写处理程序。本部分中的主题描述如何设计和编写 Java 处理程序。您还会发现一些例子。
有关 UDFs 的介绍,包括可用于编写 UDF 处理程序的语言列表,请参阅 用户定义函数概述。
有了处理程序后,就可以用 SQL 创建 UDF。有关使用 SQL 创建或调用 UDF 的信息,请参阅 创建 UDF,或 调用 UDF。
Snowflake 目前支持使用以下版本的 Java 编写 UDFs :
11.x
17.x(所有账户都可以使用此功能的预览支持。)
备注
如需了解有关 Java UDF 处理程序的限制,请参阅 Java UDF 限制。
本主题内容:
Java 处理程序的工作原理¶
当用户调用 UDF 时,用户将 UDF 的名称和实参传递给 Snowflake。Snowflake 调用相关处理程序代码(如有实参则使用实参)来执行 UDF 的逻辑。然后,处理程序方法将输出返回给 Snowflake,Snowflake 再将其传回给客户端。
对于传递给 UDF 的每行, UDF 返回标量(即单个)值,或者如果定义为表函数,则返回一组行。
Java UDFs 可以包含新代码和对现有库的调用,从而为您提供灵活性和代码重用。例如,如果您已经有 Java 数据分析代码,那么您可以将其合并到 Java UDF 中。
以下是数据流的简化说明:
示例¶
以下示例中的代码使用处理程序方法 TestFunc.echoVarchar
创建一个称为 echo_varchar
的 UDF。Snowflake 会根据 SQL-Java 数据类型映射 中描述的映射将 Java 实参和返回类型与 SQL 相互转换。
create or replace function echo_varchar(x varchar)
returns varchar
language java
called on null input
handler='TestFunc.echoVarchar'
target_path='@~/testfunc.jar'
as
'class TestFunc {
public static String echoVarchar(String x) {
return x;
}
}';
设计注意事项¶
为设计有用的处理程序,请记住以下几点。
一般注意事项。 对于 UDFs 和过程的常见注意事项,请参阅 函数和过程的设计准则和约束。
SQL-Java 类型映射。 当与 UDF 交换实参和返回值时,Snowflake 在处理程序语言和 SQL 之间转换。有关选择处理程序代码的数据类型的更多信息,请参阅 选择数据类型。
代码打包。 您可以与 CREATE FUNCTION 语句内联以使处理程序代码可用,或将处理程序代码作为 JAR 中的编译代码以使其在暂存区上可用。如需了解相关区别,请参阅 将处理程序代码保持内联或保留在暂存区。
代码优化。 有关优化处理程序代码的信息(例如当代码处理跨行共享的状态时),请参阅 在标量 UDFs 中优化初始化和控制全局状态。
最佳实践。 有关最佳实践的信息,请参阅 遵循最佳实践 和 UDFs 和过程的安全实践。
处理程序编码¶
从基础知识到详细示例,以下主题描述了如何使用 Java 编写 UDF 处理程序。
Java 类定义。 使用 Java 类编写一个 UDF 逻辑。有关 Snowflake 如何与代码交互的更多信息,请参阅 设计类。
错误处理。 有关 Snowflake 如何显示处理程序生成的错误的信息,请参阅 处理错误。
表格返回值。 您可以通过 UDF 返回表格值和标量(单个)值。有关如何编写返回表格值的处理程序的信息,请参阅 表格 Java UDFs (UDTFs)。
日志记录和事件跟踪。 有关在处理程序代码执行时获取日志和跟踪数据的信息,请参阅 日志记录和跟踪概述。
依赖项。您可以将依赖项上传到暂存区,使其在运行时可用于您的代码。有关详细信息,请参阅 为代码提供依赖项。
处理程序文件组织。 如果您打算将编译后的处理程序代码打包到 JAR 文件,可使用 整理文件 中的建议来组织和构建代码。
代码示例 有关使用 Java 编写的一系列处理程序示例,请参阅 Java UDF 处理程序示例。