Java UDF 限制¶
本主题介绍使用 Java 编写的处理程序的现有限制。
本主题内容:
一般限制¶
尽管 Java 方法可以使用标准 Java 库中的类和方法,但 Snowflake 安全约束会禁用某些功能,例如写入文件。有关详细信息,请参阅标题为 遵循良好的安全实践 的部分。
Java UDFs 是不可共享的。使用 Java UDFs 的数据库对象也是不可共享的。例如,不能执行以下操作:
直接共享一个 Java UDF。
共享调用 Java UDF 的视图。
共享调用 Java UDF 的函数。
使用具有掩码或行访问策略来共享表,该策略调用 Java UDF。
授予对 Java UDF 的 USAGE 权限可能允许收件人查看由该 UDF 导入的文件内容。如果将 Java UDF 的 USAGE 权限授予某个角色,并且该角色执行调用该 Java UDF 的语句,则同一语句中的任何 Java UDF 都可以读取您授予 USAGE 权限的 Java UDF 所导入的任何文件内容。
副本 尚不包括外部暂存区或内部暂存区。将辅助数据库提升为主数据库时,必须重新创建暂存区对象并重新导入内部暂存区中缺少的任何文件。这些文件的路径和文件名应与原始主数据库中的路径和文件名相同。
Java UDF 输出行的最大大小为 16 MB。
克隆的限制¶
当克隆包含 Java UDF 的数据库或架构时,可以克隆 Java UDF。Java UDF 必须满足以下条件才能被克隆:
如果 Java UDF 引用某个暂存区(例如,包含 UDF 的 JAR 文件的暂存区),则该暂存区必须位于要克隆的架构(或数据库) 之外。
您可以通过以下方式将 Java UDF 及其引用的暂存区保存在单独的架构中(和/或单独的数据库中):
无论 Java UDF 引用哪个暂存区,都使用与 Java UDF 的架构或数据库不同的限定暂存区名称(例如 "my_db.my_schema.my_stage()")。如果克隆操作克隆数据库,则暂存区引用应包括数据库和架构。如果克隆操作克隆架构,则暂存区引用应包括该架构(以及可选的数据库)。
使用非限定暂存区名称(隐式使用当前会话的活动数据库和架构)创建引用的暂存区,并使用与会话的当前数据库和架构不匹配的限定名称创建 Java UDF。
使用用户暂存区作为引用暂存区(用户暂存区与任何数据库暂存区或架构暂存区是分开的)。
如果架构或数据库中的一个或多个 Java UDFs 不满足所需的条件,则仍可以克隆架构或数据库,但会从克隆中省略不合规的 Java UDFs,而不会出现任何错误或警告消息。
每个克隆的 Java UDF 的定义与原来的相同。该定义包括对暂存区的任何引用。Java UDF 中的暂存区引用必须是完全限定的,因此是绝对的,与要克隆的架构或数据库无关。因为原始版本和克隆版本都指向相同的暂存区和文件:
弃用该暂存区或从暂存区中移除所需文件会禁用原始和克隆的 UDF。
更改暂存区或暂存区上的文件(例如,用较新的 JAR 文件替换 JAR 文件)会影响原始的和克隆的 UDF。
有关克隆的更多信息,请参阅 克隆注意事项。