值溢出小数位数为0的指定精度0

时间:2019-07-03 14:43:18

标签: java apache-drill

我正在尝试为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.

1 个答案:

答案 0 :(得分:1)

返回十进制数据类型的

UDF也应在returnType中指定@FunctionTemplate,以便能够确定结果的小数位数和精度。您可以使用VarDecimalFunctions类中的函数实现作为示例。