TransformFunctionFactory 类

TransformFunctionFactory 类将向 Vertica 提供有关 UDTF 的元数据:其参数的数量和数据类型及其返回值的数据类型。该类还会实例化 TransformFunction 的子类。

您必须在 TransformFunctionFactory 中实施以下方法:

  • getPrototype() 将返回两个 ColumnTypes 对象,这两个对象描述 UDTF 将用作输入的列以及作为输出返回的列。

  • getReturnType() 将向 Vertica 提供有关输出值的详细信息:可变大小数据类型(例如 VARCHAR)的宽度和具有可设置精度的数据类型(例如 TIMESTAMP)的精度。您还可以使用此函数设置输出列的名称。虽然此方法对于返回单个值的 UDx 是可选的,但您必须为 UDTF 实施该方法。

  • createTransformFunction() 实例化 TransformFunction 子类。

对于使用 C++ 语言编写的转换函数,您可以提供有助于优化查询的信息。请参阅提高查询性能(仅限 C++)

API

TransformFunctionFactory API 提供了以下通过子类扩展的方法:

virtual TransformFunction *
    createTransformFunction (ServerInterface &srvInterface)=0;

virtual void getPrototype(ServerInterface &srvInterface,
            ColumnTypes &argTypes, ColumnTypes &returnType)=0;

virtual void getReturnType(ServerInterface &srvInterface,
            const SizedColumnTypes &argTypes,
            SizedColumnTypes &returnType)=0;

virtual void getParameterType(ServerInterface &srvInterface,
            SizedColumnTypes &parameterTypes);

TransformFunctionFactory API 提供了以下通过子类扩展的方法:

public abstract TransformFunction createTransformFunction(ServerInterface srvInterface);

public abstract void getPrototype(ServerInterface srvInterface, ColumnTypes argTypes, ColumnTypes returnType);

public abstract void getReturnType(ServerInterface srvInterface, SizedColumnTypes argTypes,
        SizedColumnTypes returnType) throws UdfException;

public void getParameterType(ServerInterface srvInterface, SizedColumnTypes parameterTypes);

TransformFunctionFactory API 提供了以下通过子类扩展的方法:


def createTransformFunction(self, srv)

def getPrototype(self, srv_interface, arg_types, return_type)

def getReturnType(self, srv_interface, arg_types, return_type)

def getParameterType(self, server_interface, parameterTypes)

实施 工厂函数 API 以定义转换函数工厂:

FunctionNameFactory <- function() {
  list(name    = FunctionName,
       udxtype = c("scalar"),
       intype  = c("int"),
       outtype = c("int"))
}