运行 Vertica UDSF 时出错

Error when running Vertica UDSF

我正在尝试在 vertica 中创建一个用户定义的标量函数 (UDSF),因此我正在扩展 ScalarFunctionFactory 和 ScalarFunction 类(来自 vertica sdk)。扩展 ScalarFunction 的强制覆盖方法定义如下:

 public void getPrototype(ServerInterface serverInterface, ColumnTypes argTypes,ColumnTypes returnType) {
    argTypes.addLongVarchar(); // varchar input argument 1
    argTypes.addLongVarchar(); // varchar input argument 2
    returnType.addLongVarchar(); //varchar output
}

我为此创建了一个库和一个函数(参考关于部署 UDSF 的 vertica 文档),但是在尝试 运行 时,我收到以下错误:

Failure in UDx RPC call InvokeGetReturnType(): Error in User Defined Object [my_udf], error code: 0 The data type requires length/precision specification.

我试图设置参数的长度,但这要求 argTypes 是 'SizedColumnTypes' 类型而不是 'ColumnTypes' 类型,这是 getPrototype 所需的签名,因为它是强制覆盖。如果有人对此提出解决方案,那将非常有帮助。

输出字符串的最大长度使用 getReturnType() 定义。示例:

virtual void getPrototype(ServerInterface &interface,
                          ColumnTypes &argTypes,
                          ColumnTypes &returnType)
{
    argTypes.addVarchar();
    argTypes.addVarchar();
    returnType.addVarchar();
}

virtual void getReturnType(ServerInterface &srvInterface, 
                           const SizedColumnTypes &inputTypes, 
                           SizedColumnTypes &outputTypes)
{
    int len1 = inputTypes.getColumnType(1).getStringLength();
    int len2 = inputTypes.getColumnType(2).getStringLength();

    // Output size as sum of input string sizes:
    outputTypes.addVarchar(len1+len2, "column");
}