MultiPhaseTransformFunctionFactory 类

使用多阶段 UDTF,您可以将数据处理分为多个步骤。使用此功能后,您的 UDTF 可以使用类似于 Hadoop 或其他 MapReduce 框架的方式执行处理。您可以使用第一阶段来分解并收集数据,然后使用后续阶段来处理数据。例如,您的 UDTF 的第一阶段可以是从存储在表列的 Web 服务器日志中提取特定类型的用户交互,而且后续阶段可以是对这些交互执行分析。

多阶段 UDTF 还能让您决定在什么地方进行处理:在每个节点本地,还是在整个群集内。如果您的多阶段 UDTF 类似于 MapReduce 流程,您可能希望在多阶段 UDTF 的第一阶段处理存储在本地(运行 UDTF 实例的节点)的数据。这样可防止在 Vertica 群集中复制较大的数据段。根据在后续阶段执行的处理类型,您可以选择对数据进行分段并分布在 Vertica 群集中。

UDTF 的每个阶段都与传统(单阶段)UDTF 相同:它可以接收作为输入的表,然后生成作为输出的表。每个阶段的输出的架构不需要与其输入匹配,而且每个阶段可以根据需要输出大量或少量行。

要定义由每个阶段执行的处理,请创建 TransformFunction 的子类。如果已从单阶段 UDTF(用于执行您希望多阶段 UDTF 的其中一个阶段执行的处理)创建了 TransformFunction,则您可以轻松调整该子类以使其在多阶段 UDTF 中工作。

多阶段 UDTF 和传统 UDTF 不同之处是所使用的工厂类。应使用 MultiPhaseTransformFunctionFactory 的子类定义多阶段 UDTF,而非 TransformFunctionFactory。此特殊工厂类用作多步骤 UDTF 中所有阶段的容器。此工厂类通过 getPrototype() 函数向 Vertica 提供整个多阶段 UDTF 的输入要求和输出要求,以及该 UDTF 中所有阶段的列表。

MultiPhaseTransformFunctionFactory 类的子类中,可以定义 TransformFunctionPhase 的一个或多个子类。对于多阶段 UDTF 中的每个阶段,这些类充当与 TransformFunctionFactory 类相同的角色。这些类定义每个阶段的输入和输出并创建其关联的 TransformFunction 类的实例,以对 UDTF 的每个阶段执行处理。除了这些子类之外,MultiPhaseTransformFunctionFactory 还包含可用于控制每个 TransformFunctionPhase 子类的实例的字段。

API

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

virtual void getPhases(ServerInterface &srvInterface,
        std::vector< TransformFunctionPhase * > &phases)=0;

如果使用该工厂,则还必须扩展 TransformFunctionPhase。请参阅 SDK 参考文档。

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

public abstract void getPhases(ServerInterface srvInterface,
        Vector< TransformFunctionPhase > phases);

如果使用该工厂,则还必须扩展 TransformFunctionPhase。请参阅 SDK 参考文档。

TransformFunctionFactory 类扩展了 TransformFunctionFactory。对于每个阶段,工厂必须定义可扩展 TransformFunctionPhase 的类。

工厂将添加以下方法:


def getPhase(cls, srv)

TransformFunctionPhase 包含以下方法:


def createTransformFunction(cls, srv)

def getReturnType(self, srv_interface, input_types, output_types)