1

我创建了一个已注册的自定义 udf,但是当我尝试运行select do_protect('abc@test.com','Test_EMAIL');时出现以下错误:

io.trino.spi.TrinoException:do_protect 的确切实现与预期的 java 类型不匹配

这是我的 Trino udf。我想传递两个字符串(VARCHAR)参数。

@ScalarFunction("do_protect")
@Description("Return encrypted string")
@SqlType(StandardTypes.VARCHAR)
public String protectUDF(@SqlType(StandardTypes.VARCHAR) Slice slice1, @SqlType(StandardTypes.VARCHAR) Slice slice2) throws PrivaceraException {
        logger.info("protectUDF get called...");

        String valueForEncrypt = slice1.toString();
        logger.info("AS :: valueForEncrypt :: "+valueForEncrypt);
        String schemeForEncrypt = slice2.toString();
        logger.info("AS :: schemeForEncrypt :: "+schemeForEncrypt);
}

4

1 回答 1

0

我认为错误在于VARCHARto的映射Slice。相反,我认为它应该映射到 a string,如下所示:

protectUDF(@SqlType(StandardTypes.VARCHAR) string slice1, @SqlType(StandardTypes.VARCHAR) string slice2)

我在 Stack Overflow 上发现了一个类似的问题:

Presto 自定义 UDF

VARCHAR这使我看到了一篇文章,其中显示了String

“CHAR、VARCHAR 和 LONGVARCHAR 可以映射到 String 或 char[],但 String 更适合正常使用。”

https://www.cis.upenn.edu/~bcpierce/courses/629/jdkdocs/guide/jdbc/getstart/mapping.doc.html

于 2021-12-03T18:43:01.330 回答