如何解决Snowflake Java UDF返回Float数组报错的问题
Snowflake Java UDF返回浮点数组报错修复方案
错误原因
Java语法规定,不带后缀的浮点字面量默认是double基本类型,你定义的返回数组为Float包装类数组,Java不支持double类型直接隐式转换为Float,因此触发编译类型不兼容错误。
修复方案
有两种可行的修改方式:
方案1:修改浮点字面量为float类型
给数组内的浮点字面量添加f后缀,显式声明为float类型,即可匹配Float数组的类型要求,修改后代码如下:
create or replace function float_array_test() returns array language java handler='MyClass.test' as $$ class MyClass { public static Float[] test() { return new Float[] {1.1f, 2.2f}; } } $$;
方案2:改用Double数组返回
如果不需要严格限制单精度浮点,直接将方法返回值类型改为Double[],和默认的double字面量天然兼容,修改后代码如下:
create or replace function float_array_test() returns array language java handler='MyClass.test' as $$ class MyClass { public static Double[] test() { return new Double[] {1.1, 2.2}; } } $$;
说明:Snowflake内置的FLOAT类型本身就是双精度实现,两种方案返回的数组在Snowflake侧使用没有差异。
内容的提问来源于stack exchange,提问作者Felipe Hoffa
相关产品推荐
相关产品推荐

