我正在尝试在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文档),但是当尝试运行它时,我收到以下错误:
UDx RPC调用失败InvokeGetReturnType():用户定义对象[my_udf]出错,错误代码:0数据类型需要长度/精度规范。
我尝试设置参数的长度,但是要求argTypes为'SizedColumnTypes'类型,而不是'ColumnTypes',这是getPrototype的必需签名,因为它是强制覆盖。如果有人建议解决这个问题,那将会非常有用。
答案 0 :(得分:1)
使用 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");
}