运行 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");
}
我正在尝试在 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");
}