我正在尝试为Apache Drill(v1.15)创建自定义功能。
使用十进制作为输出数据类型时,即使使用最简单的示例,该操作也会失败。 使用其他数据类型(int,float ..)时,效果很好。
有什么简单的方法,如何使小数作为UDF的输出?
@FunctionTemplate(
name = "testing_udf",
scope = FunctionTemplate.FunctionScope.SIMPLE,
nulls = FunctionTemplate.NullHandling.NULL_IF_NULL
)
public class TestingUdfFunction implements DrillSimpleFunc {
@Param
Decimal18Holder input;
@Output
Decimal18Holder out;
public void setup() {
}
public void eval() {
out.precision = input.precision;
out.scale = input.scale;
out.value = input.value;
}
}
SQL调用:
SELECT testing_udf(6.66);
> VALIDATION ERROR: Value 7 overflows specified precision 0 with scale 0.
答案 0 :(得分:1)
UDF也应在returnType
中指定@FunctionTemplate
,以便能够确定结果的小数位数和精度。您可以使用VarDecimalFunctions
类中的函数实现作为示例。