当 NullHandling 设置为 INTERNAL 时,找不到函数签名的匹配项
No match found for function signature when NullHandling set to INTERNAL
我正在尝试为 Apache Drill 实现用户定义的函数。
该函数采用浮点参数 (decimals do not work),并且它们必须可以为空才能 return 为零。
但是,当我使用NullHandling.Internal
并将参数设置为可空类型时,该函数将无法再被调用。
SELECT tetsting_udf(1.23,4.56);
VALIDATION ERROR: (...): No match found for function signature TESTING_UDF(<DECIMAL>, <DECIMAL>)
SELECT tetsting_udf(cast(1.23 as float), cast(4.56 as float));
VALIDATION ERROR: (...): No match found for function signature TESTING_UDF(<FLOAT>, <FLOAT>)
当使用 Float8Holders 和 NullHandling.NULL_IF_NULL 时,上面的两个调用都有效。
我做错了什么?
@FunctionTemplate(
name = "testing_udf",
scope = FunctionTemplate.FunctionScope.SIMPLE,
nulls = FunctionTemplate.NullHandling.INTERNAL
)
public class TestingFunction implements DrillSimpleFunc {
@Param
NullableFloat8Holder numberA;
@Param
NullableFloat8Holder numberB;
@Output
Float8Holder out;
public void setup() {
}
public void eval() {
// Whatever
}
}
对于指定 FunctionTemplate.NullHandling.INTERNAL
的情况,应指定具有所有可空性组合的 UDF 实现。对于您的情况,您应该指定接受 (Float8Holder
和 Float8Holder
)、(NullableFloat8Holder
和 NullableFloat8Holder
)、(Float8Holder
和 NullableFloat8Holder
), (NullableFloat8Holder
和 Float8Holder
).
我正在尝试为 Apache Drill 实现用户定义的函数。
该函数采用浮点参数 (decimals do not work),并且它们必须可以为空才能 return 为零。
但是,当我使用NullHandling.Internal
并将参数设置为可空类型时,该函数将无法再被调用。
SELECT tetsting_udf(1.23,4.56);
VALIDATION ERROR: (...): No match found for function signature TESTING_UDF(<DECIMAL>, <DECIMAL>)
SELECT tetsting_udf(cast(1.23 as float), cast(4.56 as float));
VALIDATION ERROR: (...): No match found for function signature TESTING_UDF(<FLOAT>, <FLOAT>)
当使用 Float8Holders 和 NullHandling.NULL_IF_NULL 时,上面的两个调用都有效。
我做错了什么?
@FunctionTemplate(
name = "testing_udf",
scope = FunctionTemplate.FunctionScope.SIMPLE,
nulls = FunctionTemplate.NullHandling.INTERNAL
)
public class TestingFunction implements DrillSimpleFunc {
@Param
NullableFloat8Holder numberA;
@Param
NullableFloat8Holder numberB;
@Output
Float8Holder out;
public void setup() {
}
public void eval() {
// Whatever
}
}
对于指定 FunctionTemplate.NullHandling.INTERNAL
的情况,应指定具有所有可空性组合的 UDF 实现。对于您的情况,您应该指定接受 (Float8Holder
和 Float8Holder
)、(NullableFloat8Holder
和 NullableFloat8Holder
)、(Float8Holder
和 NullableFloat8Holder
), (NullableFloat8Holder
和 Float8Holder
).