在Snowflake Java UDF中使异常变为空值

问题描述 投票:0回答:1

我有一个第 3 方 JAR,我已将其制作成 UDF,如下所示:

CREATE OR REPLACE FUNCTION MY_DB.MY_SCHEMA.my_udf("FOO" ARRAY)
RETURNS OBJECT
LANGUAGE JAVA
HANDLER = '<proper path>'
IMPORTS = ('@MY_STAGE/path/to/my_jar.jar')
;

这在大多数情况下都有效,但有时会返回

java.lang.IllegalArgumentException

如何使 SELECT 使所有错误都变为 NULL 作为返回值?

基本上,

SELECT NULLIF(my_udf([foo]), IS_ERROR())

我可以更改 UDF CREATE 块或 SELECT 文本,但不能更改底层 JAR。

sql jar snowflake-cloud-data-platform user-defined-functions
1个回答
0
投票

您可以使用少量内联代码来包装对第三方库的调用,例如:

CREATE OR REPLACE FUNCTION MY_DB.MY_SCHEMA.my_udf("FOO" ARRAY)
RETURNS OBJECT
LANGUAGE JAVA
HANDLER = 'WrapperCode.handler'
IMPORTS = ('@MY_STAGE/path/to/my_jar.jar') AS
'''
import java.util.Map;

class WrapperCode {
  public static Map<String, String> handler(String[] foo) {
    try {
      return com.third_party.library.handler(foo);
    } catch (Exception e) {
      return null;
    }
  }
}
''';

现在如果第三方库抛出异常,它会被捕获,并且处理程序方法将返回

null
。 (我不确定参数/返回类型是否正确,但如果需要,您可以更新它们。)

© www.soinside.com 2019 - 2024. All rights reserved.