Значение переполняет заданную точность 0 со шкалой 0 - PullRequest
2 голосов
/ 03 июля 2019

Я пытаюсь создать пользовательскую функцию для 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 Ответ

1 голос
/ 04 июля 2019

UDF, которые возвращают десятичный тип данных, должны также указывать returnType в @FunctionTemplate, чтобы иметь возможность определять результирующий масштаб и точность. В качестве примера можно использовать реализации функций из класса VarDecimalFunctions.

...